Changeset 2775


Ignore:
Timestamp:
05/10/07 11:01:46 (13 years ago)
Author:
melissa
Message:

Improved XML parsing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/LIFReader.java

    r2701 r2775  
    2828import java.io.*; 
    2929import java.util.*; 
     30import javax.xml.parsers.*; 
    3031import loci.formats.*; 
     32import org.xml.sax.Attributes; 
     33import org.xml.sax.SAXException; 
     34import org.xml.sax.helpers.DefaultHandler; 
    3135 
    3236/** 
     
    3640 */ 
    3741public class LIFReader extends FormatReader { 
     42 
     43  // -- Constants -- 
     44 
     45  /** Factory for generating SAX parsers. */ 
     46  public static final SAXParserFactory SAX_FACTORY = 
     47    SAXParserFactory.newInstance(); 
    3848 
    3949  // -- Fields -- 
     
    192202  /** Parses a string of XML and puts the values in a Hashtable. */ 
    193203  private void initMetadata(String xml) throws FormatException, IOException { 
     204    // parse raw key/value pairs - adapted from FlexReader 
     205   
     206    LIFHandler handler = new LIFHandler(); 
     207   
     208    // strip out invalid characters 
     209    for (int i=0; i<xml.length(); i++) { 
     210      if (Character.isISOControl(xml.charAt(i))) { 
     211        xml = xml.replace(xml.charAt(i), ' '); 
     212      } 
     213    } 
     214 
     215    try { 
     216      SAXParser parser = SAX_FACTORY.newSAXParser(); 
     217      parser.parse(new ByteArrayInputStream(xml.getBytes()), handler); 
     218    } 
     219    catch (ParserConfigurationException exc) { 
     220      throw new FormatException(exc); 
     221    }  
     222    catch (SAXException exc) { 
     223      throw new FormatException(exc); 
     224    } 
     225     
    194226    Vector elements = new Vector(); 
    195227    seriesNames = new Vector(); 
     
    236268      // if the element contains a key/value pair, parse it and put it in 
    237269      // the metadata hashtable 
    238  
    239       String tmpToken = token; 
    240       if (token.indexOf("=") != -1) { 
    241         int idx = token.indexOf("Identifier") + 12; 
    242         if (idx == 11) idx = token.indexOf("Description") + 13; 
    243  
    244         key = token.substring(idx, token.indexOf("\"", idx + 1)); 
    245         idx = token.indexOf("Variant") + 9; 
    246         value = token.substring(idx, token.indexOf("\"", idx + 1)); 
    247         if (key.indexOf("=") == -1) addMeta(prefix + " - " + key, value); 
    248       } 
    249       token = tmpToken; 
    250270 
    251271      if (token.startsWith("ScannerSettingRecord")) { 
     
    498518  } 
    499519 
     520  // -- Helper class -- 
     521 
     522  class LIFHandler extends DefaultHandler { 
     523    private String series; 
     524    private int count = 0; 
     525 
     526    public void startElement(String uri, String localName, String qName,  
     527      Attributes attributes)  
     528    { 
     529      if (qName.equals("Element")) { 
     530        series = attributes.getValue("Name");  
     531      } 
     532      else if (qName.equals("Experiment")) { 
     533        for (int i=0; i<attributes.getLength(); i++) { 
     534          addMeta(attributes.getQName(i), attributes.getValue(i)); 
     535        } 
     536      } 
     537      else if (qName.equals("ChannelDescription")) { 
     538        String prefix = series + " - Channel " + count + " - "; 
     539        addMeta(prefix + "Min", attributes.getValue("Min")); 
     540        addMeta(prefix + "Max", attributes.getValue("Max")); 
     541        addMeta(prefix + "Resolution", attributes.getValue("Resolution")); 
     542        addMeta(prefix + "LUTName", attributes.getValue("LUTName")); 
     543        addMeta(prefix + "IsLUTInverted", attributes.getValue("IsLUTInverted")); 
     544        count++;  
     545      } 
     546      else if (qName.equals("DimensionDescription")) { 
     547        String prefix = series + " - Dimension " + count + " - "; 
     548        addMeta(prefix + "NumberOfElements",  
     549          attributes.getValue("NumberOfElements")); 
     550        addMeta(prefix + "Length", attributes.getValue("Length")); 
     551        addMeta(prefix + "Origin", attributes.getValue("Origin")); 
     552        addMeta(prefix + "DimID", attributes.getValue("DimID")); 
     553      } 
     554      else if (qName.equals("ScannerSettingRecord")) { 
     555        String key = attributes.getValue("Identifier") + " - " + 
     556          attributes.getValue("Description"); 
     557        addMeta(series + " - " + key, attributes.getValue("Variant")); 
     558      } 
     559      else if (qName.equals("FilterSettingRecord")) { 
     560        String key = attributes.getValue("ObjectName") + " - " + 
     561          attributes.getValue("Description") + " - " +  
     562          attributes.getValue("Attribute"); 
     563        addMeta(series + " - " + key, attributes.getValue("Variant"));   
     564      } 
     565      else if (qName.equals("ATLConfocalSettingDefinition")) { 
     566        for (int i=0; i<attributes.getLength(); i++) { 
     567          addMeta(series + " - " + attributes.getQName(i),  
     568            attributes.getValue(i)); 
     569        } 
     570      } 
     571      else if (qName.equals("Wheel")) { 
     572        String prefix = series + " - Wheel " + count + " - "; 
     573        addMeta(prefix + "Qualifier", attributes.getValue("Qualifier")); 
     574        addMeta(prefix + "FilterIndex", attributes.getValue("FilterIndex")); 
     575        addMeta(prefix + "FilterSpectrumPos",  
     576          attributes.getValue("FilterSpectrumPos")); 
     577        addMeta(prefix + "IsSpectrumTurnMode",  
     578          attributes.getValue("IsSpectrumTurnMode")); 
     579        addMeta(prefix + "IndexChanged", attributes.getValue("IndexChanged")); 
     580        addMeta(prefix + "SpectrumChanged",  
     581          attributes.getValue("SpectrumChanged")); 
     582        count++;  
     583      } 
     584      else if (qName.equals("WheelName")) { 
     585        String prefix = series + " - Wheel " + (count - 1) + " - WheelName "; 
     586        int ndx = 0; 
     587        while (getMeta(prefix + ndx) != null) ndx++; 
     588 
     589        addMeta(prefix + ndx, attributes.getValue("FilterName")); 
     590      } 
     591      else if (qName.equals("MultiBand")) { 
     592        String prefix = series + " - MultiBand Channel " +  
     593          attributes.getValue("Channel") + " - ";  
     594        addMeta(prefix + "LeftWorld", attributes.getValue("LeftWorld"));  
     595        addMeta(prefix + "RightWorld", attributes.getValue("RightWorld"));  
     596        addMeta(prefix + "DyeName", attributes.getValue("DyeName"));  
     597      } 
     598      else if (qName.equals("LaserLineSetting")) { 
     599        String prefix = series + " - LaserLine " +  
     600          attributes.getValue("LaserLine") + " - ";  
     601        addMeta(prefix + "IntensityDev", attributes.getValue("IntensityDev"));  
     602        addMeta(prefix + "IntensityLowDev",  
     603          attributes.getValue("IntensityLowDev"));  
     604        addMeta(prefix + "AOBSIntensityDev",  
     605          attributes.getValue("AOBSIntensityDev"));  
     606        addMeta(prefix + "AOBSIntensityLowDev",  
     607          attributes.getValue("AOBSIntensityLowDev"));  
     608        addMeta(prefix + "EnableDoubleMode",  
     609          attributes.getValue("EnableDoubleMode"));  
     610        addMeta(prefix + "LineIndex", attributes.getValue("LineIndex"));  
     611        addMeta(prefix + "Qualifier", attributes.getValue("Qualifier"));  
     612        addMeta(prefix + "SequenceIndex",  
     613          attributes.getValue("SequenceIndex"));  
     614      } 
     615      else if (qName.equals("Detector")) { 
     616        String prefix = series + " - Detector Channel " +  
     617          attributes.getValue("Channel") + " - "; 
     618        addMeta(prefix + "IsActive", attributes.getValue("IsActive")); 
     619        addMeta(prefix + "IsReferenceUnitActivatedForCorrection",  
     620          attributes.getValue("IsReferenceUnitActivatedForCorrection")); 
     621        addMeta(prefix + "Gain", attributes.getValue("Gain")); 
     622        addMeta(prefix + "Offset", attributes.getValue("Offset")); 
     623      } 
     624      else if (qName.equals("Laser")) { 
     625        String prefix = series + " Laser " + attributes.getValue("LaserName") + 
     626          " - "; 
     627        addMeta(prefix + "CanDoLinearOutputPower",  
     628          attributes.getValue("CanDoLinearOutputPower")); 
     629        addMeta(prefix + "OutputPower", attributes.getValue("OutputPower")); 
     630        addMeta(prefix + "Wavelength", attributes.getValue("Wavelength")); 
     631      } 
     632      else if (qName.equals("TimeStamp")) { 
     633        String prefix = series + " - TimeStamp " + count + " - "; 
     634        addMeta(prefix + "HighInteger", attributes.getValue("HighInteger")); 
     635        addMeta(prefix + "LowInteger", attributes.getValue("LowInteger")); 
     636        count++;  
     637      } 
     638      else if (qName.equals("ChannelScalingInfo")) { 
     639        String prefix = series + " - ChannelScalingInfo " + count + " - "; 
     640        addMeta(prefix + "WhiteValue", attributes.getValue("WhiteValue")); 
     641        addMeta(prefix + "BlackValue", attributes.getValue("BlackValue")); 
     642        addMeta(prefix + "GammaValue", attributes.getValue("GammaValue")); 
     643        addMeta(prefix + "Automatic", attributes.getValue("Automatic")); 
     644      } 
     645      else if (qName.equals("RelTimeStamp")) { 
     646        addMeta(series + " RelTimeStamp " + attributes.getValue("Frame"),  
     647          attributes.getValue("Time"));  
     648      } 
     649      else count = 0;  
     650    } 
     651  } 
     652 
    500653} 
Note: See TracChangeset for help on using the changeset viewer.