package org.modeldriven.fuml.repository.merge; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.modeldriven.fuml.repository.Package; public class PackageGraphNode { private Log log = LogFactory.getLog(PackageGraphNode.class); private String id; private Package pkg; private List<PackageGraphNode> nodes; @SuppressWarnings("unused") private PackageGraphNode() {} public PackageGraphNode(String id) { this.id = id; } public String getId() { return id; } public Package getPackage() { return pkg; } public void setPackage(Package pkg) { this.pkg = pkg; } public List<PackageGraphNode> getNodes() { return nodes; } public void addNode(PackageGraphNode node) { if (nodes == null) nodes = new ArrayList<PackageGraphNode>(); nodes.add(node); } public void accept(PackageGraphVisitor visitor) { accept(visitor, this, null, new HashMap<PackageGraphNode, PackageGraphNode>()); } private void accept(PackageGraphVisitor visitor, PackageGraphNode target, PackageGraphNode source, Map<PackageGraphNode, PackageGraphNode> visited) { if (log.isDebugEnabled()) if (source != null) log.debug("accept: " + target.getPackage().getQualifiedName() + "<-" + source.getPackage().getQualifiedName()); else log.debug("accept: " + target.getPackage().getQualifiedName()); if (visited.get(target) == null) visited.put(target, target); else { if (log.isDebugEnabled()) log.debug("ignoring, " + target.getPackage().getQualifiedName()); return; } List<PackageGraphNode> nodes = target.getNodes(); if (nodes != null) for (int i = 0; i < nodes.size(); i++) { PackageGraphNode child = nodes.get(i); accept(visitor, child, target, visited); } visitor.visit(target, source); } public boolean contains(PackageGraphNode source) { return nodes != null && nodes.contains(source); } }