Changeset 2308


Ignore:
Timestamp:
02/21/07 15:38:27 (13 years ago)
Author:
chris
Message:

Notebook:
<TiffData/> Elements inserted into Pixels elements now
if tiff. If OME-Tiff, attributes are also stored and later
added. Also support for multiple TiffData Elements under
the same Pixels.

File:
1 edited

Legend:

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

    r2294 r2308  
    150150   
    151151  protected Hashtable tiffDataStore; 
     152   
     153  protected OMEXMLMetadataStore ms; 
    152154 
    153155  // -- Fields - raw panel -- 
     
    376378   
    377379  public void saveTiffFile(File file) throws RuntimeException{ 
    378     if(originalTIFF.equals(file)) saveFile(file); 
     380    if(originalTIFF != null && originalTIFF.equals(file)) saveFile(file); 
    379381    else { 
    380382      String id = currentFile.getPath(); 
     
    437439      String id = currentFile.getPath(); 
    438440      ImageReader read = new ImageReader(); 
    439       OMEXMLMetadataStore ms = new OMEXMLMetadataStore(); 
    440       read.setMetadataStore(ms); 
     441      OMEXMLMetadataStore oms = new OMEXMLMetadataStore(); 
     442      read.setMetadataStore(oms); 
    441443       
    442444      try {  
     
    449451        else exc.printStackTrace(); 
    450452      } 
    451       OMENode ome = (OMENode)ms.getRoot(); 
     453      OMENode ome = (OMENode)oms.getRoot(); 
    452454     
    453455      File companion = new File(currentFile.getPath() + ".ome"); 
     
    475477    DocumentBuilderFactory docFact =  
    476478      DocumentBuilderFactory.newInstance(); 
    477     
    478     Hashtable ifd = new Hashtable(); 
    479     try {  
    480       RandomAccessStream in = new RandomAccessStream(file.getPath()); 
    481       ifd = TiffTools.getFirstIFD(in);   
    482       in.close(); 
    483     } 
    484     catch (IOException exc) { 
    485       exc.printStackTrace(); 
    486     } 
    487      
    488     // extract comment   
    489     Object o = TiffTools.getIFDValue(ifd, TiffTools.IMAGE_DESCRIPTION);   
    490     String comment = null;   
    491     if (o instanceof String) comment = (String) o;   
    492     else if (o instanceof String[]) {   
    493       String[] s = (String[]) o; 
    494       if (s.length > 0) comment = s[0];   
    495     }   
    496     else if (o != null) comment = o.toString(); 
    497      
    498     File tempFile = new File("tiffXML.temp"); 
    499     if (tempFile.exists()) tempFile.delete(); 
    500  
    501     try { 
    502       FileWriter fw = new FileWriter(tempFile); 
    503       fw.write(comment); 
    504       fw.close(); 
    505     } 
    506     catch (IOException exc) { 
    507       exc.printStackTrace(); 
    508     } 
    509      
     479         
    510480    try { 
    511481      DocumentBuilder db = docFact.newDocumentBuilder(); 
    512       doc = db.parse(getClass().getResourceAsStream(tempFile.getPath())); 
     482       
     483      //get TIFF comment without parsing out TiffData Elements 
     484      RandomAccessStream in = new RandomAccessStream(currentFile.getPath()); 
     485      Hashtable ifd = TiffTools.getFirstIFD(in);   
     486      in.close();  // extract comment   
     487      Object o = TiffTools.getIFDValue(ifd, TiffTools.IMAGE_DESCRIPTION);   
     488      String comment = null;   
     489      if (o instanceof String) comment = (String) o;   
     490      else if (o instanceof String[]) {   
     491        String[] s = (String[]) o; 
     492        if (s.length > 0) comment = s[0]; 
     493      }   
     494      else if (o != null) comment = o.toString(); 
     495       
     496      ByteArrayInputStream bis = new ByteArrayInputStream(comment.getBytes()); 
     497      doc = db.parse((java.io.InputStream)bis); 
    513498      pixList = DOMUtil.findElementList("Pixels",doc); 
     499      System.out.println(pixList);//TEMP 
     500       
    514501    } 
    515502    catch (IOException exc) { 
     
    527514      String thisID = DOMUtil.getAttribute("ID", thisEle); 
    528515      Vector dataList = DOMUtil.getChildElements("TiffData",thisEle); 
    529       tiffDataStore.put(thisID,dataList); 
     516      Vector tiffDataAttrs = new Vector();; 
     517      for(int j = 0;j<dataList.size();j++) { 
     518        Element thisData = (Element) dataList.get(j); 
     519        String[] attrNames = DOMUtil.getAttributeNames(thisData); 
     520        String[] attrValues = DOMUtil.getAttributeValues(thisData); 
     521        Hashtable attrs = new Hashtable(); 
     522        for(int k= 0;k<attrNames.length;k++) { 
     523          attrs.put(attrNames[k],attrValues[k]); 
     524        } 
     525        tiffDataAttrs.add(attrs); 
     526      } 
     527 
     528      tiffDataStore.put(thisID,tiffDataAttrs); 
    530529    } 
    531530     
    532     tempFile.delete(); 
     531    System.out.println(tiffDataStore);//TEMP 
    533532  } 
    534533   
    535534  public void addTiffData(String xml, File file) { 
    536     Document doc; 
     535    Document doc = null; 
    537536    Vector pixList = new Vector(); 
    538537    DocumentBuilderFactory docFact =  
    539538      DocumentBuilderFactory.newInstance(); 
    540      
     539           
    541540    try { 
    542541      DocumentBuilder db = docFact.newDocumentBuilder(); 
    543       doc = db.parse(getClass().getResourceAsStream(file.getPath())); 
     542      ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes()); 
     543      doc = db.parse((java.io.InputStream)bis); 
    544544      pixList = DOMUtil.findElementList("Pixels",doc); 
    545545    } 
     
    554554    } 
    555555     
    556     //creating tiff from third party 
    557     if(!file.exists() && !isOMETiff) { 
     556    //creating tiffData from non-OME-Tiff 
     557    if(!isOMETiff) { 
    558558      for(int i = 0;i<pixList.size();i++) { 
     559        System.out.println("Adding third-party tiffdata element");//TEMP 
    559560        Element thisEle = (Element) pixList.get(i); 
    560561        DOMUtil.createChild(thisEle, "TiffData"); 
     562        System.out.println("Not OME-Tiff format detected"); //TEMP 
    561563      } 
    562564    } 
    563565    //creating tiff from OMETiff file 
    564     else { 
     566    else if (isOMETiff) { 
     567      System.out.println("OME-TIFF format detected"); //TEMP 
     568       
    565569      for(int i = 0;i<pixList.size();i++) { 
    566570        Element thisEle = (Element) pixList.get(i); 
    567571        String thisID = DOMUtil.getAttribute("ID", thisEle); 
    568572        Vector dataEles = (Vector) tiffDataStore.get(thisID); 
    569         for(int j = 0;i<dataEles.size();i++) { 
     573        System.out.println(dataEles);//TEMP 
     574        for(int j = 0;j<dataEles.size();j++) { 
    570575          Element thisData = DOMUtil.createChild(thisEle, "TiffData"); 
    571           String[] attrNames = DOMUtil.getAttributeNames(thisData); 
    572           String[] attrValues = DOMUtil.getAttributeValues(thisData); 
    573           for(int k = 0;i<attrNames.length;i++) { 
    574             DOMUtil.setAttribute(attrNames[i],attrValues[i],thisData); 
    575           } 
    576         } 
    577       } 
    578     } 
     576          Hashtable attrs = (Hashtable) dataEles.get(j); 
     577          String[] attrNames = (String[])(attrs.keySet().toArray()); 
     578          for(int k = 0;k<attrNames.length;k++) { 
     579            String value = (String)(attrs.get(attrNames[k])); 
     580            DOMUtil.setAttribute(attrNames[k],value,thisData); 
     581            System.out.println(attrNames[k] + ":" + value); //TEMP 
     582          } 
     583        } 
     584      } 
     585    } 
     586    else System.out.println("FORMAT NOT DETECTED");//TEMP 
     587     
     588    try { //TEMP 
     589      DOMUtil.writeXML(System.out,doc); //TEMP 
     590    } //TEMP 
     591    catch (Exception exc) { //TEMP 
     592      exc.printStackTrace(); //TEMP 
     593    } //TEMP 
    579594  } 
    580595   
     
    643658      byte[] header = new byte[8]; 
    644659      in.readFully(header); 
     660      isOMETiff = false; 
    645661      if (TiffTools.isValidHeader(header)) { 
    646662        // TIFF file 
    647663        originalTIFF = file; 
    648         isOMETiff = checkOMETiff(file); 
    649         storeTiffData(file); 
    650664      } 
    651665      else originalTIFF = null; 
     
    658672      try { 
    659673        reader = new ImageReader(); 
    660         OMEXMLMetadataStore ms = new OMEXMLMetadataStore(); 
     674        ms = new OMEXMLMetadataStore(); 
    661675        ms.createRoot(); 
    662676         
     
    666680        String id = file.getPath(); 
    667681        fileID = id; 
     682        currentFile = file; 
    668683        File companionFile = new File(id + ".ome"); 
    669684        if(companionFile.exists()) { 
     
    705720          Merger merge = new Merger(ome,companionFile,this); 
    706721          ome = merge.getRoot(); 
     722        } 
     723 
     724        //handle if tiff after reader has been constructed 
     725        if(originalTIFF != null) { 
     726          isOMETiff = checkOMETiff(file); 
     727          storeTiffData(file); 
    707728        } 
    708729 
     
    768789      catch (IOException exc) { exc.printStackTrace(); }; 
    769790 
    770       currentFile = file; 
    771791      in.close(); 
    772792      return true; 
Note: See TracChangeset for help on using the changeset viewer.