Changeset 1207


Ignore:
Timestamp:
08/01/06 15:46:20 (14 years ago)
Author:
chris
Message:

MetadataNotebook:
1) Added "New..." menu item

ClickableList:
1) Added cool icons
2) Fixed bug in which item is selected when
removing/adding items

MetadataPane:
1) Now supports semantic type defs in the file
2) Added cool icons
3) Finished the new handling of what happens when the
element found in the template is not found in the file.
Now it waits to be told to create a blank table before
it creates XML elements to correspond to the template.
4) Fixed bug in handling of changing the Tabs menu
when tables are blank and haven't been created
5) New method makeNode() uses reflect api to create
unknown named nodes with ease and in a general manner
6) Fixed bug in TablePanel's initialization of
isTopLevel. Now it handles null values appropriately.

ClickableTable:
1) Switched around menu items
2) Streamlined code to use MetadataPane.makeNode()
which saves some lines, adds clarity.
3) Resolved conflict with Curtis' changes

NotePanel:
1) Added cool icons

TemplateParser:
1) Added method getRoot() to get the template document
easier.

Icons:
1) Added cool icons to signify whether there is
metadata present or not.

Location:
trunk/loci/ome/notebook
Files:
5 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/ome/notebook/ClickableList.java

    r1203 r1207  
    2323import org.w3c.dom.Node; 
    2424import org.w3c.dom.NodeList; 
     25import org.w3c.dom.Document; 
    2526 
    2627public class ClickableList extends JList 
     
    7071          if ( ((String) getSelectedValue()) != null && text != null) { 
    7172            Element currentCA = DOMUtil.getChildElement("CustomAttributes", tableP.tPanel.oNode.getDOMElement()); 
    72             Vector childList = DOMUtil.getChildElements(tableP.tPanel.el.getAttribute("XMLName") + 
     73            Vector childList = DOMUtil.getChildElements(tableP.el.getAttribute("XMLName") + 
    7374              "Annotation", currentCA); 
    7475            Element childEle = null; 
     
    111112                caNode = new CustomAttributesNode(cloneEle); 
    112113              } 
    113          
    114               AttributeNode newNode = new AttributeNode(caNode, 
    115                 tableP.tPanel.el.getAttribute("XMLName") + "Annotation"); 
     114               
     115              String newXMLName = tableP.el.getAttribute("XMLName") + "Annotation"; 
     116 
     117                                Element omeE = tableP.tPanel.ome.getDOMElement(); 
     118                                NodeList omeChildren = omeE.getChildNodes(); 
     119                                Element childE = null; 
     120                                for(int i = 0;i < omeChildren.getLength();i++) { 
     121                                  Element tempE = (Element) omeChildren.item(i); 
     122                                  if (tempE.getTagName().equals("SemanticTypeDefinitions")) 
     123                                    childE = tempE;  
     124                                } 
     125                                if (childE == null) childE = 
     126                                  DOMUtil.createChild(omeE, "SemanticTypeDefinitions"); 
     127                                 
     128                                Element stdE = childE; 
     129                                Boolean alreadyPresent = false; 
     130                                NodeList stdChildren = childE.getChildNodes();  
     131                                for(int i = 0;i < stdChildren.getLength();i++) { 
     132                                  Element tempE = (Element) stdChildren.item(i); 
     133                                  if (tempE.getTagName().equals("SemanticType") && 
     134                                    tempE.getAttribute("Name").equals(newXMLName) ) 
     135                                      alreadyPresent = true; 
     136                                } 
     137                                 
     138                                if(!alreadyPresent) { 
     139                                  childE = DOMUtil.createChild(stdE, "SemanticType"); 
     140                                  childE.setAttribute("Name", newXMLName); 
     141                                  childE.setAttribute("AppliesTo", tableP.tPanel.name.substring(0,1)); 
     142                                  Element stE = childE; 
     143                                   
     144                                  childE = DOMUtil.createChild(stE, "Element"); 
     145                                  childE.setAttribute("Name", "Name"); 
     146                                  childE.setAttribute("DBLocation", ""); 
     147                                  childE.setAttribute("DataType", "string"); 
     148                                   
     149                                  childE = DOMUtil.createChild(stE, "Element"); 
     150                                  childE.setAttribute("Name", "Value"); 
     151                                  childE.setAttribute("DBLocation", ""); 
     152                                  childE.setAttribute("DataType", "string"); 
     153                                   
     154                                  childE = DOMUtil.createChild(stE, "Element"); 
     155                                  childE.setAttribute("Name", "NoteFor"); 
     156                                  childE.setAttribute("DBLocation", ""); 
     157                                  childE.setAttribute("DataType", "reference"); 
     158                                  childE.setAttribute("RefersTo", tableP.el.getAttribute("XMLName")); 
     159                                } 
     160                                         
     161              AttributeNode newNode = new AttributeNode(caNode, newXMLName); 
    116162              newNode.setAttribute("NoteFor", tableP.id);   
    117163              newNode.setAttribute("Name", newName); 
    118164              myModel.addElement(newName); 
     165              noteP.setNameLabel(true); 
    119166              tableP.setNumNotes(noteP.getNumNotes()); 
    120167              setSelectedIndex(myModel.getSize() -1); 
    121168              ensureIndexIsVisible(getSelectedIndex()); 
    122 /* 
    123               Container anObj = (Container) this; 
    124           while(!(anObj instanceof JScrollPane)) { 
    125             anObj = anObj.getParent(); 
    126           } 
    127         JScrollPane jScr = (JScrollPane) anObj; 
    128         Point loc = new Point(0, jScr.getViewport().getViewSize().height -  
    129           jScr.getViewport().getExtentSize().height); 
    130         jScr.getViewport().setViewPosition(loc); 
    131 */ 
    132169            } 
    133170          } 
     
    136173        int prevIndex = getSelectedIndex(); 
    137174              Element currentCA = DOMUtil.getChildElement("CustomAttributes", tableP.tPanel.oNode.getDOMElement()); 
    138               Vector childList = DOMUtil.getChildElements(tableP.tPanel.el.getAttribute("XMLName") + 
     175              Vector childList = DOMUtil.getChildElements(tableP.el.getAttribute("XMLName") + 
    139176                "Annotation", currentCA); 
    140177              Element childEle = null; 
     
    151188              } 
    152189              else tableP.tPanel.oNode.getDOMElement().removeChild( (Node) currentCA); 
     190               
     191              Document thisDoc = null; 
     192              try { 
     193                thisDoc = tableP.tPanel.ome.getOMEDocument(true); 
     194              } 
     195              catch (Exception exc) { 
     196                exc.printStackTrace(); 
     197              }   
     198              Element foundE = DOMUtil.findElement(tableP.el.getAttribute("XMLName") 
     199                 + "Annotation", thisDoc); 
     200                 
     201              if (foundE == null) { 
     202                      String newXMLName = tableP.el.getAttribute("XMLName") + "Annotation"; 
     203         
     204                                        Element omeE = tableP.tPanel.ome.getDOMElement(); 
     205                                        NodeList omeChildren = omeE.getChildNodes(); 
     206                                        Element childE = null; 
     207                                        for(int i = 0;i < omeChildren.getLength();i++) { 
     208                                          Element tempE = (Element) omeChildren.item(i); 
     209                                          if (tempE.getTagName().equals("SemanticTypeDefinitions")) 
     210                                            childE = tempE;  
     211                                        } 
     212                                        if (childE != null) { 
     213                                                Element stdE = childE; 
     214                                                NodeList stdChildren = childE.getChildNodes(); 
     215                                                Element stE = null;  
     216                                                for(int i = 0;i < stdChildren.getLength();i++) { 
     217                                                  Element tempE = (Element) stdChildren.item(i); 
     218                                                  if (tempE.getTagName().equals("SemanticType") && 
     219                                                    tempE.getAttribute("Name").equals(newXMLName) ) 
     220                                                      stE = tempE; 
     221                                          } 
     222                                          if (stE != null) stdE.removeChild( (Node) stE ); 
     223                              if ( stdChildren != null) { 
     224                                if ( stdChildren.getLength() == 0) { 
     225                                  omeE.removeChild( (Node) stdE); 
     226                                } 
     227                              } 
     228                              else omeE.removeChild( (Node) stdE); 
     229                                        } 
     230                    } 
     231               
    153232              myModel.removeElementAt(getSelectedIndex()); 
     233              if (myModel.size() == 0) { 
     234                noteP.setNameLabel(false); 
     235                noteP.setNotesLabel(false); 
     236              } 
    154237              tableP.setNumNotes(noteP.getNumNotes()); 
    155               if (prevIndex > 0) setSelectedIndex(prevIndex - 1); 
     238              if (myModel.size() == 1) setSelectedIndex(0); 
     239              else { 
     240                      if (prevIndex >= myModel.size() - 1)  
     241                        setSelectedIndex(prevIndex - 1); 
     242                      else setSelectedIndex(prevIndex); 
     243                    } 
    156244              ensureIndexIsVisible(getSelectedIndex()); 
    157245            } 
     
    173261      exc.printStackTrace(); 
    174262    } 
     263    if (myModel.size() != 0 && getSelectedIndex() != -1) { 
     264            if (result.equals("")) { 
     265              noteP.setNotesLabel(false); 
     266            } 
     267            else noteP.setNotesLabel(true); 
     268    } 
    175269    setValue(result); 
    176270  } 
     
    184278      exc.printStackTrace(); 
    185279    } 
     280    if (myModel.size() != 0 && getSelectedIndex() != -1) { 
     281            if (result.equals("")) { 
     282              noteP.setNotesLabel(false); 
     283            } 
     284            else noteP.setNotesLabel(true); 
     285    } 
    186286    setValue(result); 
    187287  } 
     
    195295      exc.printStackTrace(); 
    196296    } 
     297    if (myModel.size() != 0 && getSelectedIndex() != -1) { 
     298            if (result.equals("")) { 
     299              noteP.setNotesLabel(false); 
     300            } 
     301            else noteP.setNotesLabel(true); 
     302    } 
    197303    setValue(result); 
    198304  } 
  • trunk/loci/ome/notebook/ClickableTable.java

    r1203 r1207  
    2525import javax.swing.JPanel; 
    2626import javax.swing.ListSelectionModel; 
     27import javax.swing.JScrollPane; 
    2728import javax.swing.event.ListSelectionListener; 
    2829import javax.swing.event.ListSelectionEvent; 
     
    4142import org.w3c.dom.Element; 
    4243import org.w3c.dom.Node; 
     44import org.w3c.dom.NodeList; 
    4345 
    4446import java.util.Vector; 
     
    107109  //placed under a CustomAttributesNode   
    108110  public static boolean isInCustom(String tagName) { 
    109     if (tagName.equals("Project") || 
    110       tagName.equals("Feature") || 
    111       tagName.equals("CustomAttributes") || 
    112       tagName.equals("Dataset") || 
    113       tagName.equals("Image")) 
    114     {return false;} 
    115     else return true; 
     111    return MetadataPane.isInCustom(tagName); 
    116112  } 
    117113   
     
    186182      JSeparator sep = new JSeparator(); 
    187183      jPop.add(sep); 
     184      jPop.add(remItem); 
     185      JSeparator sep2 = new JSeparator(); 
     186      jPop.add(sep2); 
    188187      jPop.add(addItem); 
    189188      jPop.add(bigRemItem); 
    190       JSeparator sep2 = new JSeparator(); 
    191       jPop.add(sep2); 
    192       jPop.add(remItem); 
    193189      jPop.show(this, e.getX(), e.getY()); 
    194190    } 
     
    228224       
    229225      //set nodetree to reflect a blank attribute here, also set table blank 
    230       tp.oNode.setAttribute(thisAttr.getAttribute("XMLName"), ""); 
     226      tp.oNode.getDOMElement().removeAttribute(thisAttr.getAttribute("XMLName")); 
    231227      getModel().setValueAt("", thisRow, 1); 
    232228    } 
     
    241237        //test if we need to deal with CustomAttributesNodes using the 
    242238        //isInCustom(String tagName) static method 
    243         Element parentEle = null; 
    244         if (!isInCustom(thisTagName)) { 
    245           parentEle = tp.tPanel.ome.getDOMElement(); 
    246         } 
    247         else parentEle = tp.tPanel.ome.getChild("CustomAttributes").getDOMElement(); 
    248         //create a new element of the appropriate type with the correct parent 
    249         Element cloneEle = DOMUtil.createChild(parentEle,thisTagName);       
     239        MetadataPane.makeNode(thisTagName,tp.tPanel.ome); 
    250240 
    251241                                //tell the tablepanel to tell the MetadataPane to redo its GUI based on 
     
    256246      else { 
    257247        //test if we need to deal with CustomAttributesNodes 
    258         if (!isInCustom(thisTagName)) { 
    259           //create a new element of appropriate type with the correct parent 
    260           Element anEle = DOMUtil.createChild(tp.tPanel.oNode.getDOMElement(),  
    261             thisTagName); 
    262         } 
    263         else { 
    264           OMEXMLNode realParent = tp.tPanel.oNode.getChild("CustomAttributes"); 
    265           //create a new element of appropriate type with the correct 
    266           //CustomAttributes parent 
    267           Element anEle = DOMUtil.createChild(realParent.getDOMElement(),  
    268             thisTagName); 
    269         } 
     248        MetadataPane.makeNode(thisTagName,tp.tPanel.oNode); 
    270249         
    271250        //tell the tablepanel to tell the MetadataPane to redo its GUI based on 
     
    292271          parentEle = realParent.getDOMElement(); 
    293272          //remove the node in question from its (CustomAttributes) parent 
    294           parentEle.removeChild((Node) tp.oNode.getDOMElement());             
     273          parentEle.removeChild((Node) tp.oNode.getDOMElement()); 
     274 
     275                NodeList caChildren = parentEle.getChildNodes(); 
     276                      if ( caChildren != null) { 
     277                        if ( caChildren.getLength() == 0) { 
     278                          tp.tPanel.ome.getDOMElement().removeChild( (Node) parentEle); 
     279                        } 
     280                      } 
     281                      else tp.tPanel.oNode.getDOMElement().removeChild( (Node) parentEle);             
    295282        } 
    296283         
     
    310297          Element parentEle = realParent.getDOMElement();  
    311298          parentEle.removeChild((Node) tp.oNode.getDOMElement()); 
     299           
     300          NodeList caChildren = parentEle.getChildNodes(); 
     301                      if ( caChildren != null) { 
     302                        if ( caChildren.getLength() == 0) { 
     303                          tp.tPanel.oNode.getDOMElement().removeChild( (Node) parentEle); 
     304                        } 
     305                      } 
     306                      else tp.tPanel.oNode.getDOMElement().removeChild( (Node) parentEle); 
    312307        } 
    313308         
     
    368363      descArea.setLineWrap(true); 
    369364      descArea.setWrapStyleWord(true); 
    370       contentPanel.add(descArea, BorderLayout.CENTER);       
     365      JScrollPane jScr = new JScrollPane(descArea); 
     366      contentPanel.add(jScr, BorderLayout.CENTER);       
    371367       
    372368      //make the frame the right size and visible 
  • trunk/loci/ome/notebook/MetadataNotebook.java

    r1194 r1207  
    5757    JMenu file = new JMenu("File"); 
    5858    menubar.add(file); 
     59    JMenuItem fileNew = new JMenuItem("New..."); 
     60    file.add(fileNew); 
     61    fileNew.setActionCommand("new"); 
     62    fileNew.addActionListener(this); 
     63    fileNew.setMnemonic('n'); 
     64    fileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, MENU_MASK)); 
    5965    JMenuItem fileOpen = new JMenuItem("Open"); 
    6066    file.add(fileOpen); 
     
    180186  public void actionPerformed(ActionEvent e) { 
    181187    String cmd = e.getActionCommand(); 
     188    if ("new".equals(cmd)) { 
     189      setTitle("OME Metadata Notebook"); 
     190      currentFile = null; 
     191      metadata.setupTabs(); 
     192    } 
    182193    if ("open".equals(cmd)) { 
    183194      chooser.setDialogTitle("Open"); 
  • trunk/loci/ome/notebook/MetadataPane.java

    r1203 r1207  
    2929  // -- Constants -- 
    3030  protected static final String[] TREE_COLUMNS = {"Attribute", "Value"}; 
     31   
     32  public static final ImageIcon DATA_BULLET =  
     33    createImageIcon("Icons/Bullet3.gif", 
     34      "An icon signifying that metadata is present."); 
     35             
     36  public static final ImageIcon NO_DATA_BULLET =  
     37    createImageIcon("Icons/Bullet2.gif", 
     38      "An icon signifying that no metadata is present."); 
    3139 
    3240  // -- Fields -- 
     
    232240      //that displays data for a node 
    233241      TabPanel tPanel = new TabPanel(tabList[i]); 
    234       OMEXMLNode n = null; 
    235       String unknownName = tabList[i].getAttribute("XMLName"); 
    236       CustomAttributesNode caNode = null; 
    237  
    238       try { 
    239         //reflect api gets around large switch statements 
    240         ReflectedUniverse r = new ReflectedUniverse(); 
    241         if (unknownName.equals("Project") || unknownName.equals("Feature") || 
    242           unknownName.equals("CustomAttributes") || 
    243           unknownName.equals("Dataset") || unknownName.equals("Image")) 
    244         { 
    245           r.exec("import org.openmicroscopy.xml." + unknownName + "Node"); 
    246           r.setVar("parent", thisOmeNode); 
    247           r.exec("result = new " + unknownName + "Node(parent)"); 
    248           n = (OMEXMLNode) r.getVar("result"); 
    249         } 
    250         else { 
    251                 Element currentCA = DOMUtil.getChildElement("CustomAttributes", thisOmeNode.getDOMElement()); 
    252                 if (currentCA != null) { 
    253                   caNode = new CustomAttributesNode(currentCA); 
    254                   r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
    255                   r.exec("import org.openmicroscopy.xml.st." + 
    256                     unknownName + "Node"); 
    257                   r.setVar("parent", caNode); 
    258                   r.exec("result = new " + unknownName + "Node(parent)"); 
    259                   n = (OMEXMLNode) r.getVar("result"); 
    260                 } 
    261                 else { 
    262                   Element cloneEle = DOMUtil.createChild(thisOmeNode.getDOMElement(),"CustomAttributes"); 
    263                   caNode = new CustomAttributesNode(cloneEle); 
    264                   r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
    265                   r.exec("import org.openmicroscopy.xml.st." + 
    266                     unknownName + "Node"); 
    267                   r.setVar("parent", caNode); 
    268                   r.exec("result = new " + unknownName + "Node(parent)"); 
    269                   n = (OMEXMLNode) r.getVar("result"); 
    270                 } 
    271         } 
    272       } 
    273       catch (Exception exc) { 
    274         System.out.println(exc.toString()); 
    275       } 
    276       if (caNode != null && n == null) n = new AttributeNode(caNode, unknownName); 
    277                         tPanel.oNode = n; 
    278242 
    279243      //set the field oNode in TabPanel to reflect the structure of the xml 
     
    325289    addItems = new Vector(); 
    326290    internalDefs = new Hashtable(); 
    327      
    328     try { 
    329       Element damnElement = DOMUtil.findElement("LaserCoordinates", ome.getOMEDocument(true)); 
    330       System.out.println(damnElement); 
    331     } 
    332     catch (Exception e) { 
    333       e.printStackTrace(); 
    334     } 
    335291 
    336292                //time to parse internal semantic type defs in file 
     
    393349        inOmeList = ome.getChildren(aName); 
    394350      } 
    395       else inOmeList = ome.getChild("CustomAttributes").getChildren(aName); 
    396       int vSize = inOmeList.size(); 
     351      else { 
     352        if( ome.getChild("CustomAttributes") != null)  
     353          inOmeList = ome.getChild("CustomAttributes").getChildren(aName); 
     354      } 
     355      int vSize = 0; 
     356      if (inOmeList != null) vSize = inOmeList.size(); 
    397357      //check to see if one or more elements with the given tagname 
    398358      //(a.k.a. "XMLName") exist in the file 
     
    421381          thisName = getTreePathName(tPanel.el,tPanel.oNode); 
    422382          if (desc.length() == 0) { 
    423             tabPane.addTab(thisName, null, scrollPane, null); 
    424           } 
    425           else tabPane.addTab(thisName, null, scrollPane, desc); 
     383            tabPane.addTab(thisName, DATA_BULLET, scrollPane, null); 
     384          } 
     385          else tabPane.addTab(thisName, DATA_BULLET, scrollPane, desc); 
    426386          actualTabs.add(tabList[i]); 
    427387          oNodeList.add(tPanel.oNode); 
     
    437397        } 
    438398        TabPanel tPanel = new TabPanel(tabList[i]); 
    439          
    440         OMEXMLNode n = null; 
    441         CustomAttributesNode caNode = null; 
    442  
    443         try { 
    444           ReflectedUniverse r = new ReflectedUniverse(); 
    445           String unknownName = thisName; 
    446           if (unknownName.equals("Project") || 
    447             unknownName.equals("Feature") || 
    448             unknownName.equals("CustomAttributes") || 
    449             unknownName.equals("Dataset") || 
    450             unknownName.equals("Image")) 
    451           { 
    452             r.exec("import org.openmicroscopy.xml." + 
    453               unknownName + "Node"); 
    454             r.setVar("parent", thisOmeNode); 
    455             r.exec("result = new " + unknownName + "Node(parent)"); 
    456             n = (OMEXMLNode) r.getVar("result"); 
    457           } 
    458           else { 
    459             Element currentCA = DOMUtil.getChildElement("CustomAttributes", thisOmeNode.getDOMElement()); 
    460             if (currentCA != null) { 
    461               caNode = new CustomAttributesNode(currentCA); 
    462               r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
    463               r.exec("import org.openmicroscopy.xml.st." + 
    464                 unknownName + "Node"); 
    465               r.setVar("parent", caNode); 
    466               r.exec("result = new " + unknownName + "Node(parent)"); 
    467               n = (OMEXMLNode) r.getVar("result"); 
    468             } 
    469             else { 
    470               Element cloneEle = DOMUtil.createChild(thisOmeNode.getDOMElement(),"CustomAttributes"); 
    471               caNode = new CustomAttributesNode(cloneEle); 
    472               r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
    473               r.exec("import org.openmicroscopy.xml.st." + 
    474                 unknownName + "Node"); 
    475               r.setVar("parent", caNode); 
    476               r.exec("result = new " + unknownName + "Node(parent)"); 
    477               n = (OMEXMLNode) r.getVar("result"); 
    478             } 
    479           } 
    480         } 
    481         catch (Exception exc) { 
    482           System.out.println(exc.toString()); 
    483         } 
    484         if (caNode != null && n == null) n = new AttributeNode(caNode, thisName); 
    485         tPanel.oNode = n; 
    486399         
    487400        renderTab(tPanel); 
     
    493406        String desc = tabList[i].getAttribute("Description"); 
    494407        if (desc.length() == 0) { 
    495           tabPane.addTab(thisName, null, scrollPane, null); 
    496         } 
    497         else tabPane.addTab(thisName, null, scrollPane, desc); 
     408          tabPane.addTab(thisName, NO_DATA_BULLET, scrollPane, null); 
     409        } 
     410        else tabPane.addTab(thisName, NO_DATA_BULLET, scrollPane, desc); 
    498411        actualTabs.add(tabList[i]); 
    499412        oNodeList.add(tPanel.oNode); 
     
    507420      Element e = (Element) actualTabs.get(i); 
    508421      tabNames[i] = getTreePathName(e, (OMEXMLNode) oNodeList.get(i)); 
     422      if (tabNames[i] == null) tabNames[i] = getTreePathName(e); 
    509423    } 
    510424    //change the "Tabs" menu in the original window to reflect the actual tabs 
     
    609523                tp.oNode.getChild("CustomAttributes").getDOMElement()); 
    610524            } 
    611              
    612 //            System.out.println("These elements were found for " + aName + ":" 
    613 //              + v); 
    614  
    615             if (v.size() == 0) { 
    616               //Use reflect api to avoid large switch statement to handle 
    617               //construction of different nodes 
    618               //OMEXMLNode child classes 
     525 
     526            if (v.size() == 0) {          
    619527              OMEXMLNode n = null; 
    620               CustomAttributesNode caNode = null; 
    621               String unknownName = aName; 
    622  
    623               try { 
    624                 ReflectedUniverse r = new ReflectedUniverse(); 
    625                 if (unknownName.equals("Project") || 
    626                   unknownName.equals("Feature") || 
    627                   unknownName.equals("CustomAttributes") || 
    628                   unknownName.equals("Dataset") || 
    629                   unknownName.equals("Image")) 
    630                 { 
    631                   r.exec("import org.openmicroscopy.xml." + 
    632                     unknownName + "Node"); 
    633                   r.setVar("parent", tp.oNode); 
    634                   r.exec("result = new " + unknownName + "Node(parent)"); 
    635                   n = (OMEXMLNode) r.getVar("result"); 
    636                 } 
    637                 else { 
    638  
    639                   Element currentCA = DOMUtil.getChildElement("CustomAttributes", tp.oNode.getDOMElement()); 
    640                   if (currentCA != null) { 
    641                     caNode = new CustomAttributesNode(currentCA); 
    642                     r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
    643                     r.exec("import org.openmicroscopy.xml.st." + 
    644                       unknownName + "Node"); 
    645                     r.setVar("parent", caNode); 
    646                     r.exec("result = new " + unknownName + "Node(parent)"); 
    647                     n = (OMEXMLNode) r.getVar("result"); 
    648                   } 
    649                   else { 
    650                     Element cloneEle = DOMUtil.createChild(tp.oNode.getDOMElement(),"CustomAttributes"); 
    651                     caNode = new CustomAttributesNode(cloneEle); 
    652                     r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
    653                     r.exec("import org.openmicroscopy.xml.st." + 
    654                       unknownName + "Node"); 
    655                     r.setVar("parent", caNode); 
    656                     r.exec("result = new " + unknownName + "Node(parent)"); 
    657                     n = (OMEXMLNode) r.getVar("result"); 
    658                   } 
    659                 } 
    660               } 
    661               catch (Exception exc) { 
    662                 System.out.println(exc.toString()); 
    663               } 
    664               if (caNode != null && n == null) { 
    665                 n = new AttributeNode(caNode, unknownName); 
    666 //                System.out.println("Was not found in file: " + n); 
    667               } 
    668528              TablePanel p = new TablePanel(e, tp, n); 
    669529              iHoldTables.add(p); 
     
    703563                      if (n == null) { 
    704564                        n = new AttributeNode(anEle); 
    705 //                      System.out.println("Was found in file: " + n); 
    706565                      } 
    707566 
     
    771630   
    772631  // -- Static methods -- 
    773  
    774     public static String getTreePathName(Element e) { 
     632   
     633  /** Returns an ImageIcon, or null if the path was invalid. */ 
     634  protected static ImageIcon createImageIcon(String path, 
     635                                           String description) { 
     636    java.net.URL imgURL = MetadataPane.class.getResource(path); 
     637    if (imgURL != null) { 
     638        return new ImageIcon(imgURL, description); 
     639    } else { 
     640        System.err.println("Couldn't find file: " + path); 
     641        return null; 
     642    } 
     643  } 
     644 
     645  public static String getTreePathName(Element e) { 
    775646    String thisName = null; 
    776647    if(e.hasAttribute("Name"))thisName = e.getAttribute("Name"); 
     
    829700      return result; 
    830701    } 
    831     else return "NULL POINTER"; 
     702    else return null; 
     703  } 
     704   
     705  //tests if the given tagname should be  
     706  //placed under a CustomAttributesNode   
     707  public static boolean isInCustom(String tagName) { 
     708    if (tagName.equals("Project") || 
     709      tagName.equals("Feature") || 
     710      tagName.equals("CustomAttributes") || 
     711      tagName.equals("Dataset") || 
     712      tagName.equals("Image")) 
     713    {return false;} 
     714    else return true; 
     715  } 
     716   
     717  //return a new node of type specified by unknownName 
     718  //with the specified parent 
     719  //N.B. The Parent can either be the direct parent or the 
     720  //ancestor that has the CustomAttributesNode that  
     721  //is the real parent 
     722  public static OMEXMLNode makeNode(String unknownName, OMEXMLNode parent) { 
     723    OMEXMLNode n = null;         
     724    CustomAttributesNode caNode = null; 
     725 
     726    try { 
     727      ReflectedUniverse r = new ReflectedUniverse(); 
     728      if (!isInCustom(unknownName)) { 
     729        r.exec("import org.openmicroscopy.xml." + 
     730          unknownName + "Node"); 
     731        r.setVar("parent", parent); 
     732        r.exec("result = new " + unknownName + "Node(parent)"); 
     733        n = (OMEXMLNode) r.getVar("result"); 
     734      } 
     735      else { 
     736        Element currentCA = DOMUtil.getChildElement("CustomAttributes",  
     737          parent.getDOMElement()); 
     738        if (currentCA != null) { 
     739          caNode = new CustomAttributesNode(currentCA); 
     740          r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
     741          r.exec("import org.openmicroscopy.xml.st." + 
     742            unknownName + "Node"); 
     743          r.setVar("parent", caNode); 
     744          r.exec("result = new " + unknownName + "Node(parent)"); 
     745          n = (OMEXMLNode) r.getVar("result"); 
     746        } 
     747        else { 
     748          Element cloneEle = DOMUtil.createChild( 
     749            parent.getDOMElement(),"CustomAttributes"); 
     750          caNode = new CustomAttributesNode(cloneEle); 
     751          r.exec("import org.openmicroscopy.xml.CustomAttributesNode"); 
     752          r.exec("import org.openmicroscopy.xml.st." + 
     753            unknownName + "Node"); 
     754          r.setVar("parent", caNode); 
     755          r.exec("result = new " + unknownName + "Node(parent)"); 
     756          n = (OMEXMLNode) r.getVar("result"); 
     757        } 
     758      } 
     759    }                    
     760    catch (Exception exc) { 
     761      System.out.println(exc.toString()); 
     762    } 
     763    if (caNode != null && n == null) n = new AttributeNode(caNode, unknownName); 
     764    return n; 
    832765  } 
    833766 
     
    962895    public TablePanel(Element e, TabPanel tp, OMEXMLNode on) { 
    963896      isTopLevel = false; 
    964       if(tp.oNode == on) isTopLevel = true; 
     897       
     898      //check if this TablePanel is "top level" 
     899      if ( tp.oNode == null ) { 
     900                                Vector foundEles = DOMUtil.getChildElements("OMEElement", tParse.getRoot()); 
     901                                 
     902                                for (int i = 0;i < foundEles.size();i++) { 
     903                                  Element thisNode = (Element) foundEles.get(i); 
     904                                  if (thisNode == e) isTopLevel = true; 
     905                                } 
     906      }       
     907      else if(tp.oNode != null && tp.oNode == on) isTopLevel = true; 
     908 
    965909      el = e; 
    966910      oNode = on; 
     
    970914      refTable = null; 
    971915      JComboBox comboBox = null; 
    972       name = getTreePathName(e,on); 
    973       String thisName = getTreePathName(e, on); 
     916      if (on != null) name = getTreePathName(e,on); 
     917      else name = getTreePathName(e); 
     918      String thisName = name; 
    974919      panelList.add(this); 
    975920 
     
    1012957      PanelBuilder builder = new PanelBuilder(layout); 
    1013958      CellConstraints cc = new CellConstraints(); 
     959       
     960      JLabel tableName = null; 
     961      if(oNode == null) tableName = new JLabel(thisName, NO_DATA_BULLET, JLabel.LEFT); 
     962      else tableName = new JLabel(thisName, DATA_BULLET, JLabel.LEFT); 
     963      Font thisFont = tableName.getFont(); 
     964      thisFont = new Font(thisFont.getFontName(), 
     965      Font.BOLD,thisFont.getSize()); 
     966      tableName.setFont(thisFont); 
    1014967 
    1015968      if (attrList.size() != 0) { 
     
    1024977 
    1025978        setLayout(new GridLayout(0,1)); 
    1026         JLabel tableName = new JLabel(thisName); 
    1027979 
    1028980        newTable = new ClickableTable(myTableModel, this); 
     
    1038990        noteButton.addActionListener(this); 
    1039991        noteButton.setActionCommand("getNotes"); 
     992        JButton addButton = new JButton("Make New"); 
     993        addButton.setPreferredSize(new Dimension(85,15)); 
     994        addButton.addActionListener(this); 
     995        addButton.setActionCommand("Make"); 
     996        if ( !isTopLevel && tPanel.oNode == null) addButton.setEnabled(false);         
    1040997         
    1041998                                builder.add(tableName, cc.xy(1,1)); 
    1042999                                builder.add(noteButton, cc.xy(3,1, "left,center")); 
     1000                                builder.add(addButton, cc.xyw(3,1, 2, "right,center")); 
    10431001                                builder.add(tHead, cc.xyw(1,3,4)); 
    10441002                                builder.add(newTable, cc.xyw(1,4,4)); 
     1003                                 
     1004                          if (oNode == null) { 
     1005          tHead.setVisible(false); 
     1006          noteButton.setVisible(false); 
     1007          newTable.setVisible(false); 
     1008        } 
    10451009 
    10461010        // update OME-XML attributes table 
     
    11461110 
    11471111        if(attrList.size() == 0) { 
    1148           JLabel tableName = new JLabel(thisName); 
    11491112          JTableHeader tHead = refTable.getTableHeader(); 
    11501113          tHead.setResizingAllowed(false); 
     
    11541117          noteButton.addActionListener(this); 
    11551118          noteButton.setActionCommand("getNotes"); 
     1119          JButton addButton = new JButton("Make New"); 
     1120          addButton.setPreferredSize(new Dimension(85,15)); 
     1121          addButton.addActionListener(this); 
     1122          addButton.setActionCommand("Make"); 
     1123          if (!isTopLevel && tPanel.oNode == null) addButton.setEnabled(false); 
    11561124         
    11571125                                builder.add(tableName, cc.xy(1,1)); 
    11581126                                builder.add(noteButton, cc.xy(3,1, "left,center")); 
     1127                                builder.add(addButton, cc.xyw(3,1,2, "right,center")); 
    11591128                                  builder.add(tHead, cc.xyw(1,3,3)); 
    11601129          builder.add(refTable, cc.xyw(1,4,3)); 
    11611130          builder.add(buttonPanel, cc.xy(4,4)); 
     1131          if (oNode == null) { 
     1132            tHead.setVisible(false); 
     1133            noteButton.setVisible(false); 
     1134            refTable.setVisible(false); 
     1135            buttonPanel.setVisible(false); 
     1136          } 
    11621137        } 
    11631138        else { 
    11641139                                        builder.add(refTable, cc.xyw(1,5,3)); 
    11651140          builder.add(buttonPanel, cc.xy(4,5, "center,fill")); 
     1141          if (oNode == null) { 
     1142            refTable.setVisible(false); 
     1143            buttonPanel.setVisible(false); 
     1144          } 
    11661145        }       
    11671146      } 
     
    12531232        noteP.revalidate(); 
    12541233      } 
     1234            else if (e.getActionCommand().equals("Make")) { 
     1235              if (oNode == null) { 
     1236                if(isTopLevel) { 
     1237                  tPanel.oNode = makeNode(tPanel.el.getAttribute("XMLName"), thisOmeNode); 
     1238                  oNode = tPanel.oNode; 
     1239                } 
     1240                      else { 
     1241                        if(tPanel.oNode != null) oNode =  
     1242                          makeNode(el.getAttribute("XMLName"), tPanel.oNode); 
     1243                      } 
     1244                      callReRender();          
     1245              } 
     1246              else { 
     1247                      //get the tagname of the element associated with this tablepanel 
     1248                      String thisTagName = oNode.getDOMElement().getTagName(); 
     1249                       
     1250                      //test if the tablepanel in question is actually a tab, e.g. the only 
     1251                      //ancestor nodes are CustomAttributesNode and/or OMENode 
     1252                      if (isTopLevel) {         
     1253                        //test if we need to deal with CustomAttributesNodes using the 
     1254                        //isInCustom(String tagName) static method 
     1255                        Element parentEle = null; 
     1256                        if (!isInCustom(thisTagName)) { 
     1257                          parentEle = tPanel.ome.getDOMElement(); 
     1258                        } 
     1259                        else parentEle = tPanel.ome.getChild("CustomAttributes").getDOMElement(); 
     1260                        //create a new element of the appropriate type with the correct parent 
     1261                        Element cloneEle = DOMUtil.createChild(parentEle,thisTagName);       
     1262                 
     1263                                                //tell the tablepanel to tell the MetadataPane to redo its GUI based on 
     1264                                                //the new node tree structure            
     1265                        callReRender(); 
     1266                      } 
     1267                      //if tablepanel doesn't represent a "top-level" element 
     1268                      else { 
     1269                        //test if we need to deal with CustomAttributesNodes 
     1270                        if (!isInCustom(thisTagName)) { 
     1271                          //create a new element of appropriate type with the correct parent 
     1272                          Element anEle = DOMUtil.createChild(tPanel.oNode.getDOMElement(),  
     1273                            thisTagName); 
     1274                        } 
     1275                        else { 
     1276                          OMEXMLNode realParent = tPanel.oNode.getChild("CustomAttributes"); 
     1277                          //create a new element of appropriate type with the correct 
     1278                          //CustomAttributes parent 
     1279                          Element anEle = DOMUtil.createChild(realParent.getDOMElement(),  
     1280                            thisTagName); 
     1281                        } 
     1282                         
     1283                        //tell the tablepanel to tell the MetadataPane to redo its GUI based on 
     1284                                                //the new node tree structure     
     1285                        callReRender(); 
     1286                      } 
     1287                    } 
     1288            } 
    12551289    } 
    12561290 
     
    12641298        String data = (String) model.getValueAt(row, column); 
    12651299        String attr = (String) model.getValueAt(row,0); 
    1266         if ( data == null ) data = ""; 
    1267         if ( oNode != null ) { 
     1300        if ( oNode != null && data != null && data != "") { 
    12681301          if (attr.endsWith("CharData") ) { 
    12691302            DOMUtil.setCharacterData(data, oNode.getDOMElement()); 
    12701303          } 
    1271           else oNode.setAttribute(attr, data); 
     1304          else { 
     1305            oNode.setAttribute(attr, data); 
     1306          } 
    12721307        } 
    12731308      } 
  • trunk/loci/ome/notebook/NotePanel.java

    r1203 r1207  
    1414  implements ListSelectionListener { 
    1515 
     16  public static final ImageIcon NOTES_BULLET = 
     17    MetadataPane.createImageIcon("Icons/Bullet1.gif", 
     18      "An icon signifying that notes are present."); 
     19       
     20  public static final ImageIcon NO_NOTES_BULLET = 
     21    MetadataPane.createImageIcon("Icons/Bullet4.gif", 
     22      "An icon signifying that no notes are present."); 
     23 
    1624  MetadataPane.TablePanel tableP; 
    1725  public ClickableList noteList; 
    1826  public JTextArea textArea; 
     27  public JLabel nameLabel,noteLabel; 
    1928         
    2029        public NotePanel(MetadataPane.TablePanel tp) { 
     
    5564    CellConstraints cc = new CellConstraints(); 
    5665     
    57     JLabel nameLabel = new JLabel("Name"); 
    58     JLabel noteLabel = new JLabel("Notes"); 
     66    if (thisModel.size() == 0) 
     67      nameLabel = new JLabel("Name", NO_NOTES_BULLET, JLabel.LEFT); 
     68    else nameLabel = new JLabel("Name", NOTES_BULLET, JLabel.LEFT); 
     69    noteLabel = new JLabel("Notes", NO_NOTES_BULLET, JLabel.LEFT); 
    5970     
    6071    builder.add(nameLabel, cc.xy(1,1, "center,center")); 
     
    7081         
    7182        public Vector getNoteElements() { 
    72           Vector results = new Vector(); 
    73           CustomAttributesNode caNode = null; 
    74     Element currentCA = DOMUtil.getChildElement("CustomAttributes", tableP.tPanel.oNode.getDOMElement()); 
    75     if (currentCA != null) caNode = new CustomAttributesNode(currentCA); 
    76      
    77     if (caNode != null) {  
    78           Vector eleList = DOMUtil.getChildElements(tableP.tPanel.name + "Annotation", 
    79               caNode.getDOMElement()); 
    80             if (eleList != null && eleList.size() != 0) { 
    81                 for (int i = 0;i<eleList.size();i++) { 
    82                   Element anEle = (Element) eleList.get(i); 
    83                   if ( anEle.getAttribute("NoteFor").equals(tableP.oNode.getAttribute("ID")) ) { 
    84                     results.add(anEle); 
    85                   } 
    86                 } 
    87                 return results; 
    88             } 
    89             else return null; 
    90           } 
    91           else return null; 
     83          if(tableP.tPanel.oNode != null && tableP.oNode != null) { 
     84                  Vector results = new Vector(); 
     85                  CustomAttributesNode caNode = null; 
     86            Element currentCA = DOMUtil.getChildElement("CustomAttributes", tableP.tPanel.oNode.getDOMElement()); 
     87            if (currentCA != null) caNode = new CustomAttributesNode(currentCA); 
     88             
     89            if (caNode != null) {  
     90                  Vector eleList = DOMUtil.getChildElements(tableP.el.getAttribute("XMLName") + "Annotation", 
     91                      caNode.getDOMElement()); 
     92                    if (eleList != null && eleList.size() != 0) { 
     93                        for (int i = 0;i<eleList.size();i++) { 
     94                          Element anEle = (Element) eleList.get(i); 
     95                          if ( anEle.getAttribute("NoteFor").equals(tableP.oNode.getAttribute("ID")) ) { 
     96                            results.add(anEle); 
     97                          } 
     98                        } 
     99                        return results; 
     100                    } 
     101                    else return null; 
     102                  } 
     103                  else return null; 
     104                } 
     105                else return null; 
    92106        } 
    93107         
     
    96110          if (thisVector == null) return 0; 
    97111          else return thisVector.size(); 
     112        } 
     113         
     114        public void setNameLabel(boolean hasElements) { 
     115          if (hasElements) nameLabel.setIcon(NOTES_BULLET); 
     116          else nameLabel.setIcon(NO_NOTES_BULLET); 
     117        } 
     118         
     119        public void setNotesLabel(boolean hasElements) { 
     120          if (hasElements) noteLabel.setIcon(NOTES_BULLET); 
     121          else noteLabel.setIcon(NO_NOTES_BULLET); 
    98122        } 
    99123         
     
    112136              textArea.setText(childEle.getAttribute("Value")); 
    113137          } 
     138          else textArea.setText(""); 
    114139        } 
    115140} 
  • trunk/loci/ome/notebook/TemplateParser.java

    r1194 r1207  
    8686      tabList[i] = (Element) v.elementAt(i); 
    8787    } 
     88  } 
     89   
     90  public Element getRoot() { 
     91    return root; 
    8892  } 
    8993 
Note: See TracChangeset for help on using the changeset viewer.