Changeset 3422


Ignore:
Timestamp:
11/28/07 18:28:12 (12 years ago)
Author:
curtis
Message:

Both 2007-06 and 2003 (FC) metadata implementations now compile,
though the list of method signatures is not yet comprehensive.

Location:
trunk/loci/formats/auto
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/auto/MetadataAutogen.java

    r3406 r3422  
    314314    for (int i=0; i<psize; i++) { 
    315315      Param pi = (Param) node.params.get(i); 
     316      String piName = stripPrefix(pi.name); 
    316317      if (i > 0) lt.newline(); 
    317318 
     
    325326        for (int j=0; j<isize; j++) { 
    326327          Param pj = (Param) indices.get(j); 
    327           lt.add("   * @param " + toVarName(pj.name) + " "); 
     328          String pjName = stripPrefix(pj.name); 
     329          lt.add("   * @param " + toVarName(pjName) + " "); 
    328330          lt.addTokens(pj.doc + ".", "   *   "); 
    329331          lt.newline(); 
     
    334336      else { 
    335337        String lead = "@see loci.formats.MetadataRetrieve#get" + 
    336           node.name + pi.name + "("; 
     338          node.name + piName + "("; 
    337339        StringBuffer sb = new StringBuffer(); 
    338340        for (int j=0; j<isize; j++) { 
     
    360362      lt.add("  "); 
    361363      if (version != null) lt.add("public "); 
    362       lt.add(pi.type + " get" + node.name + pi.name + "("); 
     364      lt.add(pi.type + " get" + node.name + piName + "("); 
    363365      for (int j=0; j<isize; j++) { 
    364366        // parameters 
     
    382384        if (noSupport || mappedName.equals("-")) { 
    383385          Hashtable vars = (Hashtable) versions.get(version); 
    384           lt.add("    // NB: " + (noSupport ? node.name : pi.name) + 
     386          lt.add("    // NB: " + (noSupport ? node.name : piName) + 
    385387            " unsupported for schema version " + vars.get("version")); 
    386388          lt.newline(); 
     
    389391        } 
    390392        else { 
    391           String varName = toVarName(last); 
    392           lt.add("    " + last + "Node " + varName + " = get" + last + "("); 
     393          String prefix = getPrefix(mappedName); 
     394          mappedName = stripPrefix(mappedName); 
     395          String lastVar = toVarName(last); 
     396          lt.add("    " + last + "Node " + lastVar + " = get" + last + "("); 
    393397          for (int j=0; j<isize; j++) { 
    394398            Param pj = (Param) indices.get(j); 
     
    397401          lt.add(" false);", "      "); 
    398402          lt.newline(); 
    399           String ante = "    return " + varName + " == null ? null :"; 
     403          String ante = "    return " + lastVar + " == null ? null :"; 
    400404 
    401405          boolean convert = false; 
     
    404408            convert = true; 
    405409          } 
    406           String cons = varName + "." + 
    407             (pi.type.equals("Boolean") ? "is" : "get") + mappedName + "()"; 
     410          String cons = lastVar + "." + prefix + mappedName + "()"; 
    408411          if (convert) { 
    409412            cons = toVarName(node.name) + 
     
    468471        Param p = (Param) 
    469472          (i < psize ? node.params.get(i) : indices.get(i - psize)); 
    470         lt.add("   * @param " + toVarName(p.name) + " "); 
     473        String pName = stripPrefix(p.name); 
     474        lt.add("   * @param " + toVarName(pName) + " "); 
    471475        lt.addTokens(p.doc + ".", "   *   "); 
    472476        lt.newline(); 
     
    528532      } 
    529533      else { 
    530         String varName = toVarName(last); 
    531         lt.add("    " + last + "Node " + varName + 
     534        String lastVar = toVarName(last); 
     535        lt.add("    " + last + "Node " + lastVar + 
    532536          " = get" + last + "("); 
    533537        for (int i=0; i<isize; i++) { 
     
    547551          } 
    548552          else { 
    549             String ante = "    if (" + toVarName(p.name) + " != null) "; 
     553            String prefix = getPrefix(mappedName); 
     554            mappedName = stripPrefix(mappedName); 
     555            String varName = toVarName(stripPrefix(p.name)); 
     556            String ante = "    if (" + varName + " != null) "; 
    550557            boolean convert = false; 
    551558            if (mappedName.endsWith("%")) { 
     
    553560              convert = true; 
    554561            } 
    555             String cons = toVarName(p.name); 
     562            String cons = varName; 
    556563            if (convert) { 
    557564              cons = toVarName(node.name) + 
    558565                mappedName + "From" + p.type + "(" + cons + ")"; 
    559566            } 
    560             cons = varName + ".set" + mappedName + "(" + cons + ");"; 
     567            cons = lastVar + ".set" + mappedName + "(" + cons + ");"; 
    561568            if (ante.length() + cons.length() <= 80) { 
    562569              lt.add(ante + cons); 
     
    649656    String pVar = "ome", pToken = "OME"; 
    650657    String endElement = null, endVar = null; 
     658    int multiCount = 0; 
    651659    StringTokenizer st = new StringTokenizer(path, "/"); 
    652660    while (st.hasMoreTokens()) { 
     
    672680      if (token.equals("CA")) token = "CustomAttributes"; 
    673681      if (multi) { 
    674         lt.add("    ndx = i2i(" + var + "Index);"); 
     682        Param indexParam = (Param) indices.get(multiCount++); 
     683        lt.add("    ndx = i2i(" + toVarName(indexParam.name) + ");"); 
    675684        lt.newline(); 
    676685        if (ca) { 
     
    768777    for (int i=0; i<c.length; i++) { 
    769778      if (c[i] >= 'A' && c[i] <= 'Z') c[i] += 'a' - 'A'; 
    770       else break; 
     779      else { 
     780        if (i > 1) c[i - 1] += 'A' - 'a'; // keep last character capitalized 
     781        break; 
     782      } 
    771783    } 
    772784    return new String(c); 
     785  } 
     786 
     787  /** Strips off any lower case prefix from the given attribute name. */ 
     788  private static String stripPrefix(String attr) { 
     789    char[] c = attr.toCharArray(); 
     790    int i = 0; 
     791    while (i < c.length && c[i] >= 'a' && c[i] <= 'z') i++; 
     792    return i > 0 ? attr.substring(i) : attr; 
     793  } 
     794 
     795  /** Gets any lower case prefix from the given attribute name. */ 
     796  private static String getPrefix(String attr) { 
     797    char[] c = attr.toCharArray(); 
     798    int i = 0; 
     799    while (i < c.length && c[i] >= 'a' && c[i] <= 'z') i++; 
     800    return i > 0 ? attr.substring(0, i) : "get"; 
    773801  } 
    774802 
     
    784812          Param p = new Param(); 
    785813          t = t.substring(t.startsWith("@") ? 1 : 0, t.length() - 1); 
    786           p.name = toVarName(t) + "Index"; 
     814          p.name = t + "Index"; 
    787815          p.type = "Integer"; 
    788816          p.doc = "index of the " + t; 
     
    870898      if (doType) sb.append(type); 
    871899      if (doType && doName) sb.append(" "); 
    872       if (doName) sb.append(toVarName(name)); 
     900      if (doName) sb.append(toVarName(stripPrefix(name))); 
    873901      sb.append(last ? end : ","); 
    874902      return sb.toString(); 
  • trunk/loci/formats/auto/MetadataAutogenNodes.txt

    r3406 r3422  
    2525#    parameter to allow differentiation between them. 
    2626# 2) Elements beginning with at (@) are not direct children of the previous 
    27 #    element, but instead reference the parent indirectly somehow. 
     27#    element, but instead reference the parent via an ID reference. 
    2828# 3) Elements beginning with at-bang (@!) also use a parent reference but 
    2929#    the API is slightly different -- e.g., for a LightSource accessing its 
    3030#    child Laser, the method is lightSource.getLaserListByLightSource() rather 
    3131#    than lightSource.getLaserList(). 
    32 # 4) Overridden attributes ending in percent (%) mark a type conflict that 
    33 #    must be resolved by calling type conversion methods from the  
     32# 4) Overridden attributes ending in percent (%) indicate a type conflict 
     33#    that must be resolved by calling type conversion methods from the  
    3434#    OMEXMLMetadata superclass. 
     35# 5) Attributes starting with small case indicate a method prefix other than 
     36#    "get" -- e.g., "isTunable" overrides default "getTunable" method name. 
    3537 
    3638[Image] 
     
    8587Default: Image+/Pixels+ 
    86882003FC: Image+/CA/Dimensions 
    87 Float PhysicalSizeX  size of an individual pixel's X axis in microns 
     89Float PhysicalSizeX    size of an individual pixel's X axis in microns 
    8890*2003FC: PixelSizeX 
    89 Float PhysicalSizeY  size of an individual pixel's Y axis in microns 
     91Float PhysicalSizeY    size of an individual pixel's Y axis in microns 
    9092*2003FC: PixelSizeY 
    91 Float PhysicalSizeZ  size of an individual pixel's Z axis in microns 
     93Float PhysicalSizeZ    size of an individual pixel's Z axis in microns 
    9294*2003FC: PixelSizeZ 
    93 Float TimeIncrement  distance between adjacent time points in seconds 
     95Float TimeIncrement    distance between adjacent time points in seconds 
    9496*2003FC: PixelSizeT 
    95 Integer WaveStart    starting wavelength in nanometers 
     97Integer WaveStart      starting wavelength in nanometers 
    9698*2003FC: - 
    9799Integer WaveIncrement  distance between adjacent wavelengths in nanometers 
     
    101103a 5D bounding box region of interest and a set of display options in the metadata store with a particular index 
    102104- 
    103 Default: Image+/ROI 
    104 2003FC: Image+/CA/DisplayROI 
    105 Integer X0             the starting X coordinate 
    106 Integer Y0             the starting Y coordinate 
    107 Integer Z0             the starting Z coordinate 
    108 Integer T0             the starting timepoint 
    109 Integer X1             the ending X coordinate 
    110 Integer Y1             the ending Y coordinate 
    111 Integer Z1             the ending Z coordinate 
    112 Integer T1             the ending timepoint 
     105Default: Image+/DisplayOptions/ROI+ 
     1062003FC: Image+/CA/DisplayROI+ 
     107Integer X0  the starting X coordinate 
     108Integer Y0  the starting Y coordinate 
     109Integer Z0  the starting Z coordinate 
     110Integer T0  the starting timepoint 
     111Integer X1  the ending X coordinate 
     112Integer Y1  the ending Y coordinate 
     113Integer Z1  the ending Z coordinate 
     114Integer T1  the ending timepoint 
    113115#CTR TODO - complexify 
    114116#Object DisplayOptions  the display options to attach to this region of interest 
     
    126128String PixelType       the pixel type 
    127129#CTR TODO - why not working? 
    128 #Boolean BigEndian      if the pixels set is big endian or not 
     130#Boolean isBigEndian    if the pixels set is big endian or not 
    129131String DimensionOrder  the dimension order of the pixels set 
    130132 
     
    258260Default: Image+/DisplayOptions 
    2592612003FC: Image+/CA/DisplayOptions 
    260 Float Zoom              CTR TODO 
    261 Boolean RedChannelOn    CTR TODO 
    262 Boolean GreenChannelOn  CTR TODO 
    263 Boolean BlueChannelOn   CTR TODO 
    264 Boolean DisplayRGB      CTR TODO 
    265 String ColorMap         CTR TODO 
    266 Integer ZStart          CTR TODO 
    267 Integer ZStop           CTR TODO 
    268 Integer TStart          CTR TODO 
    269 Integer TStop           CTR TODO 
     262Float Zoom                CTR TODO 
     263#TODO need to split this into separate blocks for each of R, G, B & maybe gray 
     264#Boolean isRedChannelOn    CTR TODO 
     265#Boolean isGreenChannelOn  CTR TODO 
     266#Boolean isBlueChannelOn   CTR TODO 
     267#Boolean isDisplayRGB      CTR TODO 
     268#String ColorMap           CTR TODO 
     269#Integer ZStart            CTR TODO 
     270#Integer ZStop             CTR TODO 
     271#Integer TStart            CTR TODO 
     272#Integer TStop             CTR TODO 
    270273 
    271274[LightSource] 
     
    283286Default: Instrument+/LightSource+/Laser 
    2842872003FC: CA/Instrument+/@LightSource+/@!Laser 
    285 String Type               CTR TODO 
    286 String Medium             CTR TODO 
    287 Integer Wavelength        CTR TODO 
    288 Boolean FrequencyDoubled  CTR TODO 
    289 Boolean Tunable           CTR TODO 
    290 String Pulse              CTR TODO 
    291 Float Power               CTR TODO 
     288String Type                      CTR TODO 
     289String LaserMedium               CTR TODO 
     290*2003FC: Medium 
     291Integer Wavelength               CTR TODO 
     292Integer FrequencyMultiplication  CTR TODO 
     293*2003FC: isFrequencyDoubled% 
     294Boolean Tuneable                 CTR TODO 
     295*2003FC: isTunable 
     296String Pulse                     CTR TODO 
     297Float Power                      CTR TODO 
     298*200706: - 
    292299 
    293300[Filament] 
     
    325332Default: Instrument+/Objective+ 
    3263332003FC: CA/Instrument+/@Objective+ 
    327 String Manufacturer  CTR TODO 
    328 String Model         CTR TODO 
    329 String SerialNumber  CTR TODO 
    330 Float LensNA         CTR TODO 
    331 Float Magnification  CTR TODO 
     334String Manufacturer            CTR TODO 
     335String Model                   CTR TODO 
     336String SerialNumber            CTR TODO 
     337Float LensNA                   CTR TODO 
     338Integer NominalMagnification   CTR TODO 
     339*2003FC: - 
     340Float CalibratedMagnification  CTR TODO 
     341*2003FC: Magnification 
    332342 
    333343#TODO figure out how to reconcile the two filter models 
     
    381391*200706: - 
    382392Boolean OpticalAxisAveraged  CTR TODO 
    383 *2003FC: OpticalAxisAverage 
     393*2003FC: isOpticalAxisAverage 
    384394 
    385395[-] 
Note: See TracChangeset for help on using the changeset viewer.