Changeset 2370


Ignore:
Timestamp:
03/01/07 14:09:01 (13 years ago)
Author:
melissa
Message:

Fixed NPE when trying to open PerkinElmer image files.

Location:
trunk/loci/formats
Files:
2 edited

Legend:

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

    r2369 r2370  
    11651165  } 
    11661166 
     1167  /** Returns true if the given file name is in the used files list. */ 
     1168  public boolean isUsedFile(String id, String file)  
     1169    throws FormatException, IOException 
     1170  { 
     1171    String[] usedFiles = getUsedFiles(id); 
     1172    for (int i=0; i<usedFiles.length; i++) { 
     1173      if (usedFiles[i].equals(file) ||  
     1174        usedFiles[i].equals(new Location(file).getAbsolutePath()))  
     1175      {   
     1176        return true; 
     1177      } 
     1178    } 
     1179    return false;  
     1180  } 
     1181 
    11671182  /** 
    11681183   * Updates min/max values based on the given BufferedImage. 
  • trunk/loci/formats/in/PerkinElmerReader.java

    r2336 r2370  
    7474  /** Determines the number of images in the given PerkinElmer file. */ 
    7575  public int getImageCount(String id) throws FormatException, IOException { 
    76     if (!id.equals(currentId) && !DataTools.samePrefix(id, currentId)) { 
     76    if (!id.equals(currentId) && !isUsedFile(currentId, id)) { 
    7777      initFile(id); 
    7878    } 
     
    8282  /** Checks if the images in the file are RGB. */ 
    8383  public boolean isRGB(String id) throws FormatException, IOException { 
    84     if (!id.equals(currentId) && !DataTools.samePrefix(id, currentId)) { 
     84    if (!id.equals(currentId) && !isUsedFile(currentId, id)) { 
    8585      initFile(id); 
    8686    } 
     
    9494  /** Return true if the data is in little-endian format. */ 
    9595  public boolean isLittleEndian(String id) throws FormatException, IOException { 
    96     if (!id.equals(currentId)) initFile(id); 
     96    if (!id.equals(currentId) && !isUsedFile(currentId, id)) { 
     97      initFile(id); 
     98    } 
    9799    if (isTiff) return tiff[0].isLittleEndian(files[0]); 
    98100    return true; 
     
    108110    throws FormatException, IOException 
    109111  { 
    110     if (!id.equals(currentId) && !DataTools.samePrefix(id, currentId)) { 
     112    if (!id.equals(currentId) && !isUsedFile(currentId, id)) { 
    111113      initFile(id); 
    112114    } 
     
    130132    throws FormatException, IOException 
    131133  { 
    132     if (!id.equals(currentId) && !DataTools.samePrefix(id, currentId)) { 
     134    if (!id.equals(currentId) && !isUsedFile(currentId, id)) { 
    133135      initFile(id); 
    134136    } 
     
    152154  /* @see IFormatReader#getUsedFiles(String) */ 
    153155  public String[] getUsedFiles(String id) throws FormatException, IOException { 
    154     if (!id.equals(currentId)) initFile(id); 
     156    if (!id.equals(currentId) && !isUsedFile(currentId, id)) { 
     157      initFile(id); 
     158    } 
    155159    return (String[]) allFiles.toArray(new String[0]); 
    156160  } 
     
    181185  /** Initializes the given PerkinElmer file. */ 
    182186  protected void initFile(String id) throws FormatException, IOException { 
     187    if (currentId != null &&  
     188      (id.equals(currentId) || isUsedFile(currentId, id)))  
     189    {   
     190      return; 
     191    } 
     192 
    183193    if (debug) debug("PerkinElmerReader.initFile(" + id + ")"); 
     194    // always init on the HTML file - this prevents complications with 
     195    // initializing the image files 
     196    
     197    if (!id.toLowerCase().endsWith(".htm")) { 
     198      Location parent = new Location(id).getAbsoluteFile().getParentFile(); 
     199      String[] ls = parent.list(); 
     200      for (int i=0; i<ls.length; i++) { 
     201        if (ls[i].toLowerCase().endsWith(".htm")) { 
     202          id = new Location(ls[i]).getAbsolutePath(); 
     203          break; 
     204        }  
     205      } 
     206    } 
     207     
    184208    super.initFile(id); 
    185209 
     
    298322          } 
    299323          catch (NumberFormatException f) { 
    300             if (debug) f.printStackTrace(); 
     324            //if (debug) f.printStackTrace(); 
    301325          } 
    302326        } 
     
    601625    } 
    602626    catch (NumberFormatException e) { 
    603       if (debug) e.printStackTrace(); 
     627      //if (debug) e.printStackTrace(); 
    604628    } 
    605629 
Note: See TracChangeset for help on using the changeset viewer.