示例#1
0
  public Object clone(Map oldEC2newEC) {
    Set allECSet = getAllEC();

    // make clone of all old ec, create a map from old ecs to new ecs
    oldEC2newEC.clear();
    EqualClassGraph newECF = new EqualClassGraph();
    for (Iterator it = allECSet.iterator(); it.hasNext(); ) {
      EqualClass oldEC = (EqualClass) it.next();
      EqualClass newEC = (EqualClass) oldEC.clone();
      oldEC2newEC.put(oldEC, newEC);
      if (this.forest.contains(oldEC)) {
        newECF.addRoot(newEC);
      }
    }

    // update super and sub class
    for (Iterator it = allECSet.iterator(); it.hasNext(); ) {
      EqualClass oldEc = (EqualClass) it.next();
      EqualClass ec = (EqualClass) oldEC2newEC.get(oldEc);

      for (Iterator sup = oldEc.getSuperClass().iterator(); sup.hasNext(); ) {
        EqualClass supOne = (EqualClass) sup.next();
        EqualClass newSupOne = (EqualClass) oldEC2newEC.get(supOne);
        if (newSupOne != null) {
          ec.removeSuperClass(supOne);
          ec.addSuperClass(newSupOne);
        }
      }
      for (Iterator sub = oldEc.getSubClass().iterator(); sub.hasNext(); ) {
        EqualClass subOne = (EqualClass) sub.next();
        EqualClass newSubOne = (EqualClass) oldEC2newEC.get(subOne);
        if (newSubOne != null) {
          ec.removeSubClass(subOne);
          ec.addSubClass(newSubOne);
        }
      }
    }
    return newECF;
  }
示例#2
0
 void removeRoot(EqualClass ec) {
   // remove the EC and add all its direct children as root
   forest.addAll(ec.getSubClass());
   forest.remove(ec);
 }