package org.dresdenocl.tools.transformation.pivot2sql.util; import java.util.Collection; import java.util.Comparator; import java.util.HashSet; import java.util.Set; import org.dresdenocl.tools.transformation.util.ModelAnalyser; import orgomg.cwm.objectmodel.core.ModelElement; import orgomg.cwm.objectmodel.core.Namespace; import orgomg.cwm.objectmodel.core.Package; public class CwmModelAnalyser extends ModelAnalyser<Package, ModelElement, ModelElement> { private Set<ModelElement> globalAllModelElements = null; public CwmModelAnalyser(Package model) { super(model); } private Set<ModelElement> query_AllModelElements(Package pkg) { Set<ModelElement> modelElements = new HashSet<ModelElement>(); modelElements.addAll(pkg.getOwnedElement()); for (ModelElement subPackage : pkg.getOwnedElement()) { if (subPackage instanceof Package) modelElements.addAll(query_AllModelElements((Package) subPackage)); } return modelElements; } protected Collection<ModelElement> getAllElements() { if (this.globalAllModelElements == null) { this.globalAllModelElements = query_AllModelElements(model); } return this.globalAllModelElements; } public Set<ModelElement> getAllInstances() { Set<ModelElement> instances = new HashSet<ModelElement>(); for (ModelElement cls : getAllElements()) { instances.add(cls); if (cls instanceof Namespace) instances.addAll(((Namespace) cls).getOwnedElement()); } return instances; } protected Comparator<ModelElement> createComparator() { return new ModelElementComparator(); } }