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; }
void removeRoot(EqualClass ec) { // remove the EC and add all its direct children as root forest.addAll(ec.getSubClass()); forest.remove(ec); }