/* * 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.cimtoole.views; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbenchPage; import com.hp.hpl.jena.vocabulary.RDFS; import au.com.langdale.cimtoole.actions.JumpAction.Jumpable; import au.com.langdale.cimtoole.wizards.SearchWizard.Searchable; import au.com.langdale.jena.JenaTreeModelBase; import au.com.langdale.jena.JenaTreeProvider; import au.com.langdale.jena.UMLTreeModel; import au.com.langdale.jena.JenaTreeModelBase.ModelNode; import au.com.langdale.jena.TreeModelBase.Node; import au.com.langdale.kena.OntModel; import au.com.langdale.kena.OntResource; import au.com.langdale.kena.Property; import au.com.langdale.kena.Resource; import au.com.langdale.kena.ResourceFactory; import au.com.langdale.xmi.UML; /** * View the merged information model: CIM plus extensions. */ public class ProjectModelView extends ProjectModelFollower implements Searchable, Jumpable { private TreeViewer treeViewer; private UMLTreeModel tree; @Override public void createPartControl(Composite parent) { treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); JenaTreeProvider.displayJenaTree(treeViewer, getTree()); getSite().setSelectionProvider(treeViewer); treeViewer.addDoubleClickListener(jump); IWorkbenchPage page = getSite().getPage(); listenToSelection(page); } private IDoubleClickListener jump = new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { ITreeSelection selection = (ITreeSelection) event.getSelection(); Node node = (Node) selection.getFirstElement(); jump(node); } }; public OntModel getOntModel() { return tree.getOntModel(); } private JenaTreeModelBase getTree() { if( tree == null ) { tree = new UMLTreeModel(); tree.setRootResource(UML.global_package); } return tree; } @Override public void setFocus() { treeViewer.getControl().setFocus(); } @Override public boolean ignoreNode(ModelNode node) { return node.getModel() == tree; } public Node findNode(Resource target) { Node[] path = tree.findPathTo(target, false); return path != null? path[path.length-1]: null; } public void previewTarget(Resource target) { Node node = findNode(target); if( node != null) previewTarget(node); } public String getDescription() { return "Search the schema for packages, classes or their members by name."; } public void previewTarget(Node node) { treeViewer.setSelection(new TreeSelection(new TreePath(node.getPath(false))), true); } public Property getCriterion() { return ResourceFactory.createProperty(RDFS.label); } public void selectModel(OntModel model) { tree.setOntModel(model); treeViewer.setSelection(treeViewer.getSelection()); } public void jump(Node node) { OntResource subject = node.getSubject(); if( subject != null ) { if( subject.isProperty()) { OntResource inverse = subject.getInverseOf(); if(inverse != null) previewTarget(inverse); else { OntResource range = subject.getRange(); if( range != null ) previewTarget(range); } } else { previewTarget(subject); } } } }