Changeset 4100


Ignore:
Timestamp:
06/05/08 15:48:51 (12 years ago)
Author:
curtis
Message:

Add getOriginalMetadata accessor method for OriginalMetadata CustomAttributes.

Location:
trunk/loci/formats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/MetadataTools.java

    r4048 r4100  
    257257    r.setVar("value", value); 
    258258    try { 
    259       r.exec("omexmlMeta.populateOriginalMetadata(key, value)"); 
    260     } 
    261     catch (ReflectException exc) { 
    262       if (FormatHandler.debug) LogTools.trace(exc); 
    263     } 
     259      r.exec("omexmlMeta.setOriginalMetadata(key, value)"); 
     260    } 
     261    catch (ReflectException exc) { 
     262      if (FormatHandler.debug) LogTools.trace(exc); 
     263    } 
     264  } 
     265 
     266  /** 
     267   * Gets the value for the specified OriginalMetadata key 
     268   * from the given OME-XML metadata object. 
     269   * Does nothing unless the given object is an OME-XML metadata object. 
     270   * @param omexmlMeta An object of type 
     271   *   {@link loci.formats.ome.OMEXMLMetadata}. 
     272   * @param key Metadata key whose value is needed. 
     273   * @return Metadata value corresponding to the specified key. 
     274   */ 
     275  public static String getOriginalMetadata(Object omexmlMeta, String key) { 
     276    ReflectedUniverse r = new ReflectedUniverse(); 
     277    r.setVar("omexmlMeta", omexmlMeta); 
     278    r.setVar("key", key); 
     279    try { 
     280      return (String) r.exec("omexmlMeta.getOriginalMetadata(key)"); 
     281    } 
     282    catch (ReflectException exc) { 
     283      if (FormatHandler.debug) LogTools.trace(exc); 
     284    } 
     285    return null; 
    264286  } 
    265287 
  • trunk/loci/formats/ome/OMEXMLMetadata.java

    r4064 r4100  
    2828import ome.xml.DOMUtil; 
    2929import ome.xml.OMEXMLNode; 
    30 import org.w3c.dom.Element; 
     30import org.w3c.dom.*; 
    3131 
    3232/** 
     
    4646{ 
    4747 
     48  // -- Constants -- 
     49 
     50  /** Custom attribute for storing original metadata key/value pairs. */ 
     51  private static final String ORIGINAL_METADATA = "OriginalMetadata"; 
     52 
    4853  // -- Fields -- 
    4954 
     
    7176 
    7277  /** Adds the key/value pair as a new OriginalMetadata node. */ 
    73   public void populateOriginalMetadata(String key, String value) { 
     78  public void setOriginalMetadata(String key, String value) { 
    7479    if (imageCA == null) { 
    7580      Element ome = root.getDOMElement(); 
     
    8489      } 
    8590    } 
    86     final String originalMetadata = "OriginalMetadata"; 
    8791    if (!omCreated) { 
    8892      Element std = DOMUtil.createChild(root.getDOMElement(), 
     
    9195        "http://www.openmicroscopy.org/XMLschemas/STD/RC2/STD.xsd", std); 
    9296      Element st = DOMUtil.createChild(std, "SemanticType"); 
    93       DOMUtil.setAttribute("Name", originalMetadata, st); 
     97      DOMUtil.setAttribute("Name", ORIGINAL_METADATA, st); 
    9498      DOMUtil.setAttribute("AppliesTo", "I", st); 
    9599 
     
    106110      omCreated = true; 
    107111    } 
    108     Element om = DOMUtil.createChild(imageCA, originalMetadata); 
    109     DOMUtil.setAttribute("ID", root.makeID(originalMetadata), om); 
     112    Element om = DOMUtil.createChild(imageCA, ORIGINAL_METADATA); 
     113    DOMUtil.setAttribute("ID", root.makeID(ORIGINAL_METADATA), om); 
    110114    DOMUtil.setAttribute("Name", key, om); 
    111115    DOMUtil.setAttribute("Value", value, om); 
     116  } 
     117 
     118  /** Gets the OriginalMetadata value corresponding to the given key. */ 
     119  public String getOriginalMetadataValue(String key) { 
     120    if (imageCA == null) { 
     121      Element ome = root.getDOMElement(); 
     122      Element image = DOMUtil.getChildElement("Image", ome); 
     123      if (image == null) return null; 
     124      imageCA = DOMUtil.getChildElement("CustomAttributes", image); 
     125      if (imageCA == null) return null; 
     126    } 
     127    NodeList list = imageCA.getChildNodes(); 
     128    int size = list.getLength(); 
     129    for (int i=0; i<size; i++) { 
     130      Node node = list.item(i); 
     131      if (!(node instanceof Element)) continue; 
     132      String nodeName = node.getNodeName(); 
     133      if (!nodeName.equals(ORIGINAL_METADATA)) { 
     134        // not an OriginalMetadata element 
     135        continue; 
     136      } 
     137      NamedNodeMap attrs = node.getAttributes(); 
     138      int len = attrs.getLength(); 
     139      String value = null; 
     140      for (int j=0; j<len; j++) { 
     141        Attr attr = (Attr) attrs.item(i); 
     142        if (attr == null) continue; 
     143        String attrName = attr.getName(); 
     144        if ("Name".equals(attrName)) { 
     145          String name = attr.getValue(); 
     146          if (!key.equals(name)) { 
     147            // wrong OriginalMetadata element 
     148            value = null; 
     149            break; 
     150          } 
     151        } 
     152        else if ("Value".equals(attrName)) { 
     153          value = attr.getValue(); 
     154        } 
     155      } 
     156      if (value != null) return value; 
     157    } 
     158    return null; 
    112159  } 
    113160 
Note: See TracChangeset for help on using the changeset viewer.