/* * This software is Copyright 2005,2006,2007,2008 Langdale Consultants. * Langdale Consultants can be contacted at: http://www.langdale.com.au */ package au.com.langdale.profiles; import java.util.Collection; import java.util.Iterator; import au.com.langdale.kena.OntModel; import au.com.langdale.kena.OntResource; import au.com.langdale.jena.JenaTreeModelBase; import au.com.langdale.xmi.UML; public class HierarchyModel extends JenaTreeModelBase { private boolean subClasses; private Refactory refactory; public HierarchyModel(boolean subClasses) { this.subClasses = subClasses; } public void setRefactory(Refactory refactory) { this.refactory = refactory; if(refactory != null) { refactory.refresh(); setOntModel(refactory.getModel()); } else setOntModel((OntModel)null); } @Override protected Node classify(OntResource root) { return new SubjectNode( root ); } public interface RootElementNode {} public interface TypeNode {} public class SubjectNode extends ModelNode { private OntResource subject; public SubjectNode(OntResource root) { subject = root; } @Override protected void populate() { Collection related = refactory.findRelatedProfiles(subject, subClasses, false); for (Iterator it = related.iterator(); it.hasNext();) { OntResource clss = (OntResource) it.next(); add( new NestedNode( new ProfileClass(clss, refactory.getNamespace()))); } } @Override public OntResource getSubject() { return subject; } @Override public boolean getErrorIndicator() { return false; } } public class NestedNode extends ModelNode { protected ProfileClass profile; public NestedNode(ProfileClass profile) { this.profile = profile; } @Override protected void populate() { Iterator it = subClasses? profile.getSubClasses(): profile.getSuperClasses(); while (it.hasNext()) { OntResource clss = (OntResource) it.next(); add( new NestedNode( new ProfileClass(clss, profile.getNamespace()))); } } @Override public Class getIconClass() { return profile.hasStereotype(UML.concrete)? RootElementNode.class: TypeNode.class; } @Override public OntResource getSubject() { return profile.getSubject(); } @Override public OntResource getBase() { return profile.getBaseClass(); } @Override public boolean getErrorIndicator() { return false; } } }