Changeset 2656


Ignore:
Timestamp:
04/23/07 13:01:13 (13 years ago)
Author:
melissa
Message:

Fixed several bugs and added a few new features to the template format.

Location:
trunk/loci/ome/notebook
Files:
7 edited

Legend:

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

    r2649 r2656  
    2828import java.awt.event.*; 
    2929import java.io.*; 
    30 import java.util.Vector; 
     30import java.util.*; 
    3131import javax.swing.*; 
    3232import javax.swing.border.LineBorder; 
     
    234234      int numColumns = tabs[i].getColumns(); 
    235235      if (numColumns < 2) numColumns = 2; 
     236      else numColumns += 2;  
    236237      for (int j=0; j<numRows; j++) { 
    237238        rowString += "pref:grow,"; 
     
    239240      for (int j=0; j<numColumns; j++) { 
    240241        colString += "pref:grow,"; 
    241       }  
    242       panel.setLayout(new FormLayout(colString, rowString)); 
     242      } 
     243      FormLayout l = new FormLayout(colString, rowString); 
     244      panel.setLayout(l); 
    243245 
    244246      scroll.getViewport().add(panel); 
    245247    
    246       int rowNumber = 1; 
     248      int[] rowNumber = new int[l.getColumnCount()]; 
     249      Arrays.fill(rowNumber, 1); 
    247250 
    248251      CellConstraints cc = new CellConstraints(); 
     
    260263     
    261264          panel.add(new JLabel(group.getName() + " #" + (r + 1)),  
    262             cc.xyw(paddingColumns, rowNumber, 2)); 
     265            cc.xyw(paddingColumns, rowNumber[paddingColumns - 1], 2)); 
    263266          if (currentTemplate.editTemplateFields()) { 
    264267            JButton add = new JButton("+"); 
    265268            add.setActionCommand("cloneGroup" + i + "-" + j); 
    266269            add.addActionListener(this); 
    267             panel.add(add, cc.xy(1, rowNumber)); 
     270            panel.add(add, cc.xy(1, rowNumber[0])); 
     271            rowNumber[0]++;  
    268272           
    269273            JButton remove = new JButton("-"); 
    270274            remove.setActionCommand("removeGroup" + i + "-" + j); 
    271275            remove.addActionListener(this); 
    272             panel.add(remove, cc.xy(2, rowNumber)); 
     276            panel.add(remove, cc.xy(2, rowNumber[1])); 
     277            rowNumber[1]++;  
    273278          }  
    274  
    275           rowNumber++; 
    276279 
    277280          for (int k=0; k<group.getNumFields(); k++) { 
     
    282285                field.getRow() + 1)); 
    283286              panel.add(field.getComponent(),  
    284                 cc.xy(field.getColumn() + paddingColumns + 1,  
    285                 field.getRow() + 1)); 
     287                cc.xywh(field.getColumn() + paddingColumns + 1,  
     288                field.getRow() + 1, field.getWidth(), field.getHeight())); 
     289              rowNumber[field.getColumn() + paddingColumns - 1]++;  
     290              rowNumber[field.getColumn() + paddingColumns]++;  
    286291            }  
    287292            else { 
    288293              panel.add(new JLabel(field.getName()),  
    289                 cc.xy(paddingColumns + 1, rowNumber)); 
    290               panel.add(field.getComponent(),  
    291                 cc.xy(paddingColumns + 2, rowNumber)); 
    292               rowNumber++;  
     294                cc.xy(paddingColumns + 1, rowNumber[paddingColumns])); 
     295              rowNumber[paddingColumns]++; 
     296              panel.add(field.getComponent(), cc.xywh(paddingColumns + 2,  
     297                rowNumber[paddingColumns + 1], field.getWidth(),  
     298                field.getHeight())); 
     299              rowNumber[paddingColumns + 1]++;  
    293300            } 
     301            rowNumber[paddingColumns - 1]++;  
    294302          }  
    295303        }  
     
    304312      for (int j=0; j<fields.size(); j++) { 
    305313        TemplateField f = tabs[i].getField(j);  
    306         if (f.getRow() != -1) {  
    307           panel.add(new JLabel(f.getName()),  
    308             cc.xyw(f.getColumn(), f.getRow(), paddingColumns + 1)); 
    309           panel.add(f.getComponent(),  
    310             cc.xyw(f.getColumn() + 1, f.getRow(), 2)); 
     314        if (f.getRow() != -1 || f.getColumn() != -1) {  
     315          int column = f.getColumn() == -1 ? 1 : f.getColumn(); 
     316          int row = f.getRow() == -1 ? rowNumber[column - 1] : f.getRow(); 
     317          int width = f.getWidth(); 
     318          int height = f.getHeight(); 
     319          
     320          panel.add(new JLabel(f.getName()), cc.xyw(column, row, 1)); 
     321          panel.add(f.getComponent(), cc.xywh(column + 1, row, width, height)); 
     322          rowNumber[column - 1]++;  
    311323        }  
    312324        else { 
    313325          panel.add(new JLabel(f.getName()),  
    314             cc.xyw(1, rowNumber, paddingColumns + 1)); 
    315           panel.add(f.getComponent(), cc.xyw(paddingColumns + 1, rowNumber, 2)); 
    316           rowNumber++;  
     326            cc.xyw(1, rowNumber[0], paddingColumns + 1)); 
     327          rowNumber[0]++;  
     328          panel.add(f.getComponent(), cc.xywh(paddingColumns + 1,  
     329            rowNumber[paddingColumns], f.getWidth(), f.getHeight())); 
     330          rowNumber[paddingColumns]++;  
    317331        } 
    318332      } 
     
    375389      // check if the user wants to save the current metadata first  
    376390 
    377       JOptionPane.showConfirmDialog(this, "Save current metadata?", "",  
     391      int s = JOptionPane.showConfirmDialog(this, "Save current metadata?", "",  
    378392        JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE);  
    379       actionPerformed(new ActionEvent(this, -1, "save")); 
    380       loadTemplate(templateName);  
     393        
     394      if (s == JOptionPane.YES_OPTION) { 
     395        actionPerformed(new ActionEvent(this, -1, "save")); 
     396      }  
     397      loadTemplate(currentTemplate);  
    381398    } 
    382399    else if (cmd.equals("open")) { 
    383400      progress.setString("Opening file...");  
    384       loadTemplate(templateName);  
    385401 
    386402      try { 
     
    566582    }  
    567583    progress.setString("Populating fields...");  
     584    currentTemplate.initializeFields(currentRoot);  
    568585    currentTemplate.populateFields(currentRoot);  
    569586    loadTemplate(currentTemplate);  
  • trunk/loci/ome/notebook/Template.java

    r2649 r2656  
    356356  } 
    357357 
     358  /** Determine number of repetitions for each repeatable field. */ 
     359  public void initializeFields(OMENode root) { 
     360    for (int i=0; i<tabs.length; i++) { 
     361      int fields = tabs[i].getNumFields();  
     362      for (int j=0; j<fields; j++) { 
     363        if (tabs[i].getField(j).isRepeated()) { 
     364          String map = tabs[i].getField(j).getMap(); 
     365          if (map.indexOf("-") != -1) map = map.substring(0, map.indexOf("-")); 
     366           
     367          try { 
     368            int nodeCount = getNodeCount(root, map); 
     369            for (int k=1; k<nodeCount; k++) { 
     370              TemplateField f = tabs[i].getField(j).copy(); 
     371              f.setMap(map + "-" + k); 
     372              tabs[i].addField(f);  
     373            } 
     374          } 
     375          catch (Exception e) { 
     376            e.printStackTrace(); 
     377          } 
     378        } 
     379      } 
     380     
     381      for (int j=0; j<tabs[i].getNumGroups(); j++) { 
     382        TemplateGroup g = tabs[i].getGroup(j); 
     383        fields = g.getNumFields();  
     384        for (int k=0; k<fields; k++) { 
     385          TemplateField f = g.getField(0, k).copy(); 
     386          if (f.isRepeated()) {  
     387            String map = f.getMap(); 
     388            if (map.indexOf("-") != -1) { 
     389              map = map.substring(0, map.indexOf("-")); 
     390            } 
     391 
     392            try { 
     393              for (int m=1; m<getNodeCount(root, map); m++) { 
     394                f.setMap(map + "-" + k); 
     395                g.addField(f); 
     396              } 
     397            } 
     398            catch (Exception e) { 
     399              e.printStackTrace();   
     400            } 
     401          }  
     402        } 
     403      }  
     404     
     405    } 
     406  } 
     407 
    358408  /** Change the value of an option. */ 
    359409  public void changeValue(String key, String value) { 
     
    451501  private void populateField(OMENode root, TemplateField t) throws Exception { 
    452502    OMEXMLNode node = findNode(root, t.getMap(), false);  
    453      
     503    
    454504    if (node == null) { 
    455505      // unmapped field 
     
    477527      map = map.substring(0, map.indexOf("-")); 
    478528    }  
     529 
     530    if (node instanceof AttributeNode) { 
     531      setComponentValue(t, t.getComponent(), node.getAttribute(map));   
     532      return;  
     533    } 
    479534 
    480535    String methodName1 = "get" + map; 
     
    564619  } 
    565620 
     621  /** Retrieve the number of nodes corresponding to this map. */ 
     622  private int getNodeCount(OMENode root, String map) throws Exception { 
     623    if (map == null || map.length() == 0 || root == null) return 0; 
     624    map = map.substring(0, map.lastIndexOf(":")); 
     625    map = map.substring(map.lastIndexOf(":") + 1); 
     626    if (map.indexOf("-") != -1) map = map.substring(0, map.indexOf("-")); 
     627    return DOMUtil.findElementList(map, root.getOMEDocument(true)).size();  
     628  } 
     629 
    566630  /**  
    567631   * Find the OME-XML node corresponding to the given map string.  
     
    584648 
    585649    int ndx = 0; 
    586     if (map.indexOf("-") != -1) { 
     650    if (map.indexOf("-") != -1 && map.indexOf("OriginalMetadata") == -1) { 
    587651      ndx = Integer.parseInt(map.substring(map.indexOf("-") + 1)); 
    588652      map = map.substring(0, map.indexOf("-")); 
     
    610674 
    611675    OMEXMLNode node = (OMEXMLNode) nodes.get(ndx < nodes.size() ? ndx : 0); 
    612      
     676    
     677    if (map.indexOf("OriginalMetadata") != -1 && map.indexOf("-") != -1) { 
     678      ndx = Integer.parseInt(map.substring(map.indexOf("-") + 1)); 
     679      map = map.substring(0, map.indexOf("-")); 
     680    } 
     681 
    613682    while (map.indexOf(":") != -1) { 
    614683      String type = map.substring(0, map.indexOf(":")); 
     
    632701            Vector list = (Vector) methods[j].invoke(node, new Object[0]); 
    633702 
     703            int count = -1; 
    634704            for (int k=0; k<list.size(); k++) { 
    635705              String className = list.get(k).getClass().getName(); 
     
    637707              className = className.substring(idx + 1); 
    638708 
    639               if (className.equals(type + "Node")) { 
    640                 node = (OMEXMLNode) list.get(k); 
    641                 break;  
     709              if (className.equals(type + "Node") ||  
     710                (className.equals("AttributeNode") &&  
     711                type.equals("OriginalMetadata")))  
     712              { 
     713                count++;  
     714                if (count == ndx) {  
     715                  node = (OMEXMLNode) list.get(k); 
     716                  if (type.equals("OriginalMetadata")) return node;  
     717                  break;  
     718                }  
    642719              } 
    643720            } 
    644721          } 
    645722          else node = (OMEXMLNode) methods[j].invoke(node, new Object[0]);  
    646          
     723        
    647724          // check if we found a matching node; if not, create one 
    648725          if (node == null ||  
    649726            !node.getClass().getName().endsWith(type + "Node"))  
    650727          { 
    651             Class target; 
     728            Class target = null; 
    652729 
    653730            try { 
     
    655732            } 
    656733            catch (ClassNotFoundException e) { 
    657               target =  
    658                 Class.forName("org.openmicroscopy.xml.st." + type + "Node"); 
     734              try {  
     735                target =  
     736                  Class.forName("org.openmicroscopy.xml.st." + type + "Node"); 
     737              } 
     738              catch (ClassNotFoundException cfe) { 
     739                cfe.printStackTrace();      
     740              } 
    659741            } 
    660742             
  • trunk/loci/ome/notebook/TemplateField.java

    r2649 r2656  
    5353  private int row = -1, column = -1; 
    5454 
     55  /** Width and height of the component (in terms of grid cells). */ 
     56  private int width = 1, height = 1; 
     57 
     58  /** Flag indicating that this field is repeated indefinitely. */ 
     59  private boolean repeated = false; 
     60 
    5561  // -- Constructors -- 
    5662 
     
    7581        else if (key.startsWith("type")) type = value;  
    7682        else if (key.startsWith("map")) omecaMap = value;  
     83        else if (key.startsWith("repeated")) { 
     84          repeated = new Boolean(value).booleanValue();  
     85        }  
    7786        else if (key.startsWith("grid")) { 
    7887          row = Integer.parseInt(value.substring(0, value.indexOf(","))); 
    7988          column = Integer.parseInt(value.substring(value.indexOf(",") + 1)); 
    8089        } 
     90        else if (key.startsWith("span")) { 
     91          width = Integer.parseInt(value.substring(0, value.indexOf(","))); 
     92          height = Integer.parseInt(value.substring(value.indexOf(",") + 1)); 
     93        }         
    8194        else if (key.startsWith("values")) { 
    8295          StringTokenizer e = new StringTokenizer(value, "\", "); 
     
    106119     
    107120    if (type.equals("var")) { 
    108       JTextArea text = new JTextArea((String) defaultValue);  
     121      JTextArea text = null; 
     122      if (width != 1 || height != 1) { 
     123        text = new JTextArea((String) defaultValue, width, height);  
     124      } 
     125      else text = new JTextArea((String) defaultValue); 
    109126      component = new JScrollPane(); 
    110127      ((JScrollPane) component).getViewport().add(text); 
     
    134151    rtn.setName(getName()); 
    135152    rtn.setMap(getMap()); 
    136     rtn.setRow(getRow()); 
    137153    rtn.setColumn(getColumn()); 
     154    rtn.setWidth(getWidth()); 
     155    rtn.setHeight(getHeight()); 
     156    rtn.setRepeated(isRepeated()); 
    138157 
    139158    // copy the component 
    140159    JComponent comp = null; 
    141160    if (type.equals("var")) { 
    142       JTextArea text = new JTextArea((String) defaultValue);  
     161      JTextArea text = null; 
     162      if (width != 1 || height != 1) { 
     163        text = new JTextArea((String) defaultValue, width, height);  
     164      } 
     165      else text = new JTextArea((String) defaultValue); 
    143166      comp = new JScrollPane(); 
    144167      ((JScrollPane) comp).getViewport().add(text); 
     
    192215  public void setColumn(int column) { this.column = column; } 
    193216 
     217  public int getWidth() { return width; } 
     218 
     219  public void setWidth(int width) { this.width = width; } 
     220 
     221  public int getHeight() { return height; } 
     222 
     223  public void setHeight(int height) { this.height = height; } 
     224 
     225  public boolean isRepeated() { return repeated; } 
     226 
     227  public void setRepeated(boolean repeated) { this.repeated = repeated; } 
    194228} 
  • trunk/loci/ome/notebook/TemplateTab.java

    r2649 r2656  
    5252  // -- TemplateTab API methods -- 
    5353 
    54   public int getRows() { return rows; } 
     54  public int getRows() {  
     55    if (rows == 0) { 
     56      for (int i=0; i<fields.size(); i++) { 
     57        rows += ((TemplateField) fields.get(i)).getHeight(); 
     58      }  
     59     
     60      for (int i=0; i<groups.size(); i++) { 
     61        TemplateGroup g = (TemplateGroup) groups.get(i); 
     62        for (int k=0; k<g.getRepetitions(); k++) {  
     63          for (int j=0; j<g.getNumFields(); j++) { 
     64            rows += g.getField(0, j).getHeight(); 
     65          } 
     66          rows++;  
     67        }  
     68      } 
     69    } 
     70     
     71    return rows;  
     72  } 
    5573 
    5674  public void setRows(int rows) { this.rows = rows; } 
  • trunk/loci/ome/notebook/editor/TemplateEditor.java

    r2649 r2656  
    264264      TemplateField f = tab.getField(i);  
    265265      panel.add(new JLabel(f.getName()), cc.xy(1, i + 1)); 
    266       panel.add(f.getComponent(), cc.xy(2, i + 1));     
     266      panel.add(f.getComponent(), cc.xywh(2, i + 1, f.getWidth(),  
     267        f.getHeight()));     
    267268    } 
    268269    tabPanels.add(panel);  
     
    545546        JPanel pane = (JPanel) tabPanels.get(currentTab); 
    546547        pane.add(new JLabel(name), cc.xy(col*2 - 1, row)); 
    547         pane.add((JComponent) COMPONENTS[ndx].newInstance(), cc.xy(col*2, row)); 
     548        pane.add((JComponent) COMPONENTS[ndx].newInstance(),  
     549          cc.xywh(col*2, row, fp.getWidth(), fp.getHeight())); 
    548550        tabPanels.setElementAt(pane, currentTab); 
    549551        pack();  
     
    558560      field.setRow(row); 
    559561      field.setColumn(col); 
     562      field.setWidth(fp.getWidth()); 
     563      field.setHeight(fp.getHeight()); 
    560564      field.setType(COMPONENT_TYPES[ndx]); 
    561565      field.setMap(fp.getMap());  
     
    650654    private JTextField name; 
    651655    private JSpinner row, col; 
     656    private JSpinner width, height;  
    652657    private JComboBox omexml; 
    653658    private JComboBox group;  
     
    665670      FormLayout layout = 
    666671        new FormLayout("2dlu, pref:grow, 2dlu, pref:grow, 2dlu", 
    667         "pref:grow, pref:grow, pref:grow, pref:grow, pref:grow, pref:grow"); 
     672        "pref:grow, pref:grow, pref:grow, pref:grow, pref:grow, pref:grow," + 
     673        "pref:grow, pref:grow"); 
    668674      JPanel pane = new JPanel(layout); 
    669675      CellConstraints cc = new CellConstraints(); 
     
    689695       
    690696      if (type == TemplateEditor.FIELD) { 
    691         pane.add(new JLabel("OME-XML mapping:"), cc.xy(2, 5));  
    692         pane.add(new JLabel("Group:"), cc.xy(2, 4)); 
     697        width = new JSpinner(new SpinnerNumberModel(1, 1, rowMax, 1)); 
     698        height = new JSpinner(new SpinnerNumberModel(1, 1, colMax, 1)); 
     699        pane.add(new JLabel("Width:"), cc.xy(2, 4)); 
     700        pane.add(new JLabel("Height:"), cc.xy(2, 5)); 
     701        pane.add(width, cc.xy(4, 4)); 
     702        pane.add(height, cc.xy(4, 5)); 
     703 
     704        pane.add(new JLabel("OME-XML mapping:"), cc.xy(2, 6));  
     705        pane.add(new JLabel("Group:"), cc.xy(2, 5)); 
    693706        group = new JComboBox(groups); 
    694         pane.add(group, cc.xy(4, 4)); 
     707        pane.add(group, cc.xy(4, 5)); 
    695708 
    696709        omexml = new JComboBox(omexmlMaps.keySet().toArray()); 
    697         pane.add(omexml, cc.xy(4, 5));  
     710        pane.add(omexml, cc.xy(4, 6));  
    698711      }  
    699712      
     
    708721      ok.setActionCommand("ok"); 
    709722      ok.addActionListener(this); 
    710       pane.add(ok, cc.xy(2, 6));  
     723      pane.add(ok, cc.xy(2, 7));  
    711724 
    712725      JButton cancel = new JButton("Cancel"); 
    713726      cancel.setActionCommand("cancel"); 
    714727      cancel.addActionListener(this); 
    715       pane.add(cancel, cc.xy(4, 6)); 
     728      pane.add(cancel, cc.xy(4, 7)); 
    716729 
    717730      setContentPane(pane);   
     
    727740 
    728741    public int getColumn() { return ((Integer) col.getValue()).intValue(); } 
     742 
     743    public int getWidth() { return ((Integer) width.getValue()).intValue(); } 
     744 
     745    public int getHeight() { return ((Integer) height.getValue()).intValue(); } 
    729746 
    730747    public String getName() { return name.getText(); } 
  • trunk/loci/ome/notebook/editor/mapping.txt

    r2649 r2656  
    11"Image name" "Image:Name" 
     2"Image creation date" "Image:CreationDate" 
    23"Image description" "Image:Description" 
     4"Pixel width (in microns)" "Image:CustomAttributes:Dimensions:PixelSizeX" 
     5"Pixel height (in microns)" "Image:CustomAttributes:Dimensions:PixelSizeY" 
     6"Pixel depth (Z)" "Image:CustomAttributes:Dimensions:PixelSizeZ" 
     7"Pixel depth (C)" "Image:CustomAttributes:Dimensions:PixelSizeC" 
     8"Pixel depth (T)" "Image:CustomAttributes:Dimensions:PixelSizeT" 
    39"Image width" "Image:Pixels:SizeX" 
    410"Image height" "Image:Pixels:SizeY" 
     
    612"Number of timepoints" "Image:Pixels:SizeT" 
    713"Number of slices" "Image:Pixels:SizeZ" 
     14"Pixel type" "Image:Pixels:PixelType" 
     15"Big endian" "Image:Pixels:BigEndian" 
     16"Dimension order" "Image:Pixels:DimensionOrder" 
     17"Stage label name" "Image:StageLabel:Name" 
     18"Stage label X coordinate" "Image:StageLabel:X" 
     19"Stage label Y coordinate" "Image:StageLabel:Y" 
     20"Stage label Z coordinate" "Image:StageLabel:Z" 
     21"Experimenter's first name" "CustomAttributes:Experimenter:FirstName" 
     22"Experimenter's last name" "CustomAttributes:Experimenter:LastName" 
     23"Experimenter's email address" "CustomAttributes:Experimenter:Email" 
     24"Experimenter's institution" "CustomAttributes:Experimenter:Institution" 
  • trunk/loci/ome/notebook/templates/viewer.template

    r2649 r2656  
    111111    name "Email" 
    112112    type "var" 
     113    span "1,3"  
    113114    map "CustomAttributes:Experimenter:Email" 
    114115  } 
     
    116117 
    117118tab { 
    118   name "Extra Information" 
     119  name "Metadata hashtable" 
    119120 
    120   # this is grouped, unmapped information  
     121  grid "1,2" 
    121122 
    122   group { 
    123     name "Extra (un-mapped) data" 
    124     count "1" 
     123  field { 
     124    name "Field name" 
     125    map "Image:CustomAttributes:OriginalMetadata:name" 
     126    repeated "true"  
     127    type "var"  
     128    grid "1,1"  
     129  } 
    125130 
    126     field { 
    127       name "Uses color tables" 
    128       type "enum" 
    129       values {"yes", "no"} 
    130       default "no" 
    131     } 
    132  
    133     field { 
    134       name "Notes" 
    135       type "var" 
    136     } 
    137  
     131  field { 
     132    name "Field value" 
     133    map "Image:CustomAttributes:OriginalMetadata:value" 
     134    repeated "true" 
     135    type "var" 
     136    grid "1,3"  
    138137  } 
    139138 
Note: See TracChangeset for help on using the changeset viewer.