Changeset 2956


Ignore:
Timestamp:
07/10/07 12:27:30 (13 years ago)
Author:
melissa
Message:

Improved population logic.

Location:
trunk/loci/ome/notes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/ome/notes/TemplateTools.java

    r2780 r2956  
    4343      CustomAttributesNode ca = root.getCustomAttributes(); 
    4444 
    45       if (ca != null) { 
     45      if (ca != null && map != null) { 
    4646        Vector elements = DOMUtil.getChildElements("NotesField",  
    4747          ca.getDOMElement()); 
    48         int ndx = Integer.parseInt(map.substring(map.lastIndexOf("-") + 1)); 
     48        int ndx = 0; 
     49        if (map.indexOf("-") != -1) { 
     50          ndx = Integer.parseInt(map.substring(map.lastIndexOf("-") + 1)); 
     51        } 
     52        if (ndx >= elements.size()) return null; 
    4953        Element el = (Element) elements.get(ndx); 
    5054        return DOMUtil.getAttribute(value ? "value" : "name", el); 
     
    98102    throws Exception 
    99103  { 
    100     if (map == null || map.length() == 0) return null; 
    101  
    102     // the 'map' string is a colon-separated list of nodes from the root 
    103     // to the field we want to read 
    104     //  
    105     // example: if we want to read the 'PixelType' value of a Pixels node, 
    106     // the value of 'map' would be 'Image:Pixels:PixelType' 
    107    
    108     String st = map.substring(0, map.indexOf(":")); 
    109     map = map.substring(map.indexOf(":") + 1); 
    110  
    111     int ndx = 0; 
    112     if (map.indexOf("-") != -1 && map.indexOf("OriginalMetadata") == -1) { 
    113       ndx = Integer.parseInt(map.substring(map.indexOf("-") + 1)); 
    114       map = map.substring(0, map.indexOf("-")); 
    115     } 
    116   
    117     Class stClass = null; 
    118  
    119     try { 
    120       stClass = Class.forName("org.openmicroscopy.xml." + st + "Node"); 
    121     } 
    122     catch (ClassNotFoundException c) { 
    123       stClass = Class.forName("org.openmicroscopy.xml.st." + st + "Node"); 
     104    if (map == null) return null;  
     105    int elementCount = 0; 
     106    int last = map.indexOf(":"); 
     107    while (last != -1) { 
     108      elementCount++; 
     109      last = map.indexOf(":", last + 1); 
    124110    } 
    125111 
    126     Vector nodes = OMEXMLNode.createNodes(stClass,  
    127       DOMUtil.getChildElements(st, root.getDOMElement()));  
    128  
    129     if (nodes.size() == 0 && create) { 
    130       Class param = stClass.getName().startsWith("org.openmicroscopy.xml.st.") ? 
    131         CustomAttributesNode.class : root.getClass(); 
    132       Constructor con = stClass.getConstructor(new Class[] {param}); 
    133       nodes.add((OMEXMLNode) con.newInstance(new Object[] {root})); 
    134     } 
    135     else if (nodes.size() == 0) return null; 
    136  
    137     OMEXMLNode node = (OMEXMLNode) nodes.get(ndx < nodes.size() ? ndx : 0); 
    138  
    139     if (map.indexOf("OriginalMetadata") != -1 && map.indexOf("-") != -1) { 
    140       ndx = Integer.parseInt(map.substring(map.indexOf("-") + 1)); 
    141       map = map.substring(0, map.indexOf("-")); 
     112    String[] elements = new String[elementCount]; 
     113    for (int i=0; i<elementCount; i++) { 
     114      elements[i] = map.substring(0, map.indexOf(":")); 
     115      map = map.substring(map.indexOf(":") + 1); 
    142116    } 
    143117 
    144     while (map.indexOf(":") != -1) { 
    145       String type = map.substring(0, map.indexOf(":")); 
    146       map = map.substring(map.indexOf(":") + 1); 
     118    OMEXMLNode node = root; 
     119    for (int i=0; i<elementCount; i++) { 
     120      Vector nodeList = DOMUtil.getChildElements(elements[i],  
     121        node.getDOMElement()); 
     122      if ((nodeList == null || nodeList.size() == 0) && create) { 
     123        // TODO : create the node 
     124        return null;  
     125      } 
     126      else if (nodeList == null || nodeList.size() == 0) return null; 
    147127 
    148       String methodName1 = "get" + type; 
    149       String methodName2 = "getDefault" + type; 
    150  
    151       if (node instanceof CustomAttributesNode) { 
    152         methodName2 = "getCAList"; 
     128      int idx = 0; 
     129      if (i == 0 && map.indexOf("-") != -1) { 
     130        idx = Integer.parseInt(map.substring(map.indexOf("-") + 1)); 
    153131      } 
    154  
    155       // find the next node in the list 
    156  
    157       Method[] methods = node.getClass().getMethods(); 
    158  
    159       for (int j=0; j<methods.length; j++) { 
    160         String name = methods[j].getName(); 
    161         if (name.equals(methodName1) || name.equals(methodName2)) { 
    162           if (node instanceof CustomAttributesNode) { 
    163             Vector list = (Vector) methods[j].invoke(node, new Object[0]); 
    164  
    165             int count = -1; 
    166             for (int k=0; k<list.size(); k++) { 
    167               String className = list.get(k).getClass().getName(); 
    168               int idx = className.lastIndexOf("."); 
    169               className = className.substring(idx + 1); 
    170  
    171               if (className.equals(type + "Node") || 
    172                 (className.equals("AttributeNode") && 
    173                 type.equals("OriginalMetadata"))) 
    174               { 
    175                 count++; 
    176                 if (count == ndx) { 
    177                   node = (OMEXMLNode) list.get(k); 
    178                   if (type.equals("OriginalMetadata")) return node; 
    179                   break; 
    180                 } 
    181               } 
    182             } 
    183           } 
    184           else node = (OMEXMLNode) methods[j].invoke(node, new Object[0]); 
    185  
    186           // check if we found a matching node; if not, create one 
    187  
    188           if (node == null || 
    189             !node.getClass().getName().endsWith(type + "Node")) 
    190           { 
    191             Class target = null; 
    192  
    193             try { 
    194               target = Class.forName("org.openmicroscopy.xml." + type + "Node"); 
    195             } 
    196             catch (ClassNotFoundException e) { 
    197               try { 
    198                 target = 
    199                   Class.forName("org.openmicroscopy.xml.st." + type + "Node"); 
    200               } 
    201               catch (ClassNotFoundException cfe) { 
    202                 cfe.printStackTrace(); 
    203               } 
    204             } 
    205                                                                                              Class param = 
    206               target.getName().startsWith("org.openmicroscopy.xml.st.") ? 
    207               CustomAttributesNode.class : node.getClass(); 
    208             Constructor con = target.getConstructor(new Class[] {param}); 
    209  
    210             if (node == null) { 
    211               node = (OMEXMLNode) nodes.get(ndx < nodes.size() ? ndx : 0); 
    212               node = (OMEXMLNode) param.getConstructor(new Class[] 
    213                 {node.getClass()}).newInstance(new Object[] {node}); 
    214             } 
    215  
    216             node = (OMEXMLNode) con.newInstance(new Object[] {node}); 
    217           } 
    218           break; 
    219         } 
    220       } 
     132      node = OMEXMLNode.createNode((Element) nodeList.get(idx));  
    221133    } 
    222     return node; 
     134    
     135    return node;  
    223136  } 
    224137 
  • trunk/loci/ome/notes/templates/viewer.template

    r2780 r2956  
    3939      name "Width" 
    4040      type "int" 
    41       valueMap "Image:Pixels:SizeX" 
     41      valueMap "Image:CustomAttributes:Pixels:SizeX" 
    4242    } 
    4343   
     
    4545      name "Height" 
    4646      type "int" 
    47       valueMap "Image:Pixels:SizeY" 
     47      valueMap "Image:CustomAttributes:Pixels:SizeY" 
    4848    } 
    4949  
     
    5151      name "Number of slices" 
    5252      type "int" 
    53       valueMap "Image:Pixels:SizeZ" 
     53      valueMap "Image:CustomAttributes:Pixels:SizeZ" 
    5454    } 
    5555 
     
    5757      name "Number of channels" 
    5858      type "int" 
    59       valueMap "Image:Pixels:SizeC" 
     59      valueMap "Image:CustomAttributes:Pixels:SizeC" 
    6060    } 
    6161 
     
    6363      name "Number of timepoints" 
    6464      type "int" 
    65       valueMap "Image:Pixels:SizeT" 
     65      valueMap "Image:CustomAttributes:Pixels:SizeT" 
    6666    } 
    6767   
     
    7070      type "bool" 
    7171      default "false" 
    72       valueMap "Image:Pixels:BigEndian" 
     72      valueMap "Image:CustomAttributes:Pixels:BigEndian" 
    7373    } 
    7474 
     
    7676      name "Pixel Type" 
    7777      type "var" 
    78       valueMap "Image:Pixels:PixelType" 
     78      valueMap "Image:CustomAttributes:Pixels:PixelType" 
    7979    } 
    8080   
Note: See TracChangeset for help on using the changeset viewer.