@Override
 public void addInstance(GKInstance instance) {
   SchemaClass cls = instance.getSchemClass();
   if (!cls.isa(ReactomeJavaConstants.PhysicalEntity) || cls.isa(ReactomeJavaConstants.Complex))
     return; // Only display non-complex PE in this class.
   DefaultMutableTreeNode clsNode = getClassNode(cls);
   DefaultMutableTreeNode instanceNode = new DefaultMutableTreeNode(instance);
   insertInstanceNodeAlphabetically(clsNode, instanceNode);
 }
 /**
  * This method is used to dump all human pathway diagrams into a specified directory.
  *
  * @param dir
  * @throws Exception
  */
 public void dumpHumanPathwayDiagrams(File dir) throws Exception {
   Collection<?> diagrams = adaptor.fetchInstancesByClass(ReactomeJavaConstants.PathwayDiagram);
   SchemaClass cls = adaptor.fetchSchema().getClassByName(ReactomeJavaConstants.PathwayDiagram);
   SchemaAttribute att = cls.getAttribute(ReactomeJavaConstants.representedPathway);
   adaptor.loadInstanceAttributeValues(diagrams, att);
   // Group all human pathways
   for (Iterator<?> it = diagrams.iterator(); it.hasNext(); ) {
     GKInstance diagram = (GKInstance) it.next();
     GKInstance pathway =
         (GKInstance) diagram.getAttributeValue(ReactomeJavaConstants.representedPathway);
     GKInstance species = (GKInstance) pathway.getAttributeValue(ReactomeJavaConstants.species);
     if (species == null) continue;
     if (species.getDBID().equals(48887L)) {
       String fileName = getFileName(pathway);
       File file = new File(dir, fileName);
       convertReactomeToGPML(pathway, file.getAbsolutePath());
     }
   }
 }
 /**
  * A helper method to create a TreeNode and insert it under the root for the specified SchemaClass
  * object.
  *
  * @param cls
  * @return
  */
 private DefaultMutableTreeNode createClassNode(SchemaClass cls) {
   SchemaClass displayedCls = getDisplayedPESubclass(cls);
   DefaultMutableTreeNode clsNode = new DefaultMutableTreeNode(displayedCls);
   // Need to insert to the root
   DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
   DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
   // Find where it should be inserted
   int index = 0;
   if (root.getChildCount() > 0) {
     for (int i = 0; i < root.getChildCount(); i++) {
       DefaultMutableTreeNode node = (DefaultMutableTreeNode) root.getChildAt(i);
       SchemaClass nodeCls = (SchemaClass) node.getUserObject();
       if (nodeCls.getName().compareTo(displayedCls.getName()) > 0) {
         index = i;
         break;
       }
     }
   }
   model.insertNodeInto(clsNode, root, index);
   return clsNode;
 }
 private SchemaClass getDisplayedPESubclass(SchemaClass cls) {
   SchemaClass displayedCls = cls;
   // Only the first level of PE is displayed. Need to map it to one of
   // these subclasses
   XMLFileAdaptor fileAdaptor = PersistenceManager.getManager().getActiveFileAdaptor();
   GKSchemaClass pe =
       (GKSchemaClass)
           fileAdaptor.getSchema().getClassByName(ReactomeJavaConstants.PhysicalEntity);
   for (Iterator it = pe.getSubClasses().iterator(); it.hasNext(); ) {
     GKSchemaClass sub = (GKSchemaClass) it.next();
     if (cls.isa(sub)) {
       displayedCls = sub;
       break;
     }
   }
   return displayedCls;
 }