Changeset 6674


Ignore:
Timestamp:
07/08/10 15:22:58 (9 years ago)
Author:
melissa
Message:

Fixed how Images are removed from a MetadataStore when exporting one series from a multi-series dataset.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2/components/loci-plugins/src/loci/plugins/out/Exporter.java

    r6663 r6674  
    4545import java.io.File; 
    4646import java.io.IOException; 
     47import java.util.ArrayList; 
     48import java.util.List; 
    4749 
    4850import javax.swing.JFileChooser; 
     
    6971import loci.plugins.util.WindowTools; 
    7072 
     73import ome.xml.model.OME; 
    7174import ome.xml.model.enums.DimensionOrder; 
    7275import ome.xml.model.enums.EnumerationException; 
     
    239242        // the original dataset had multiple series 
    240243        // we need to modify the IMetadata to represent the correct series 
     244 
     245        ArrayList<Integer> matchingSeries = new ArrayList<Integer>(); 
    241246        for (int series=0; series<store.getImageCount(); series++) { 
    242247          String type = store.getPixelsType(series).toString(); 
     
    244249          if (pixelType == ptype) { 
    245250            String imageName = store.getImageName(series); 
    246             if (title.indexOf(imageName) != -1) { 
    247               // found the correct series 
    248  
    249               int start = 0, end = 0; 
    250               StringBuffer newXML = new StringBuffer(); 
    251  
    252               for (int i=0; i<store.getImageCount(); i++) { 
    253                 start = xml.indexOf("<Image", i == 0 ? 0 : end); 
    254                 String prefix = xml.substring(end, start); 
    255                 end = xml.indexOf("</Image>", start) + 9; 
    256  
    257                 newXML.append(prefix); 
    258                 if (i == series) { 
    259                   newXML.append(xml.substring(start, end)); 
     251            if (title.indexOf(imageName) >= 0) { 
     252              matchingSeries.add(series); 
     253            } 
     254          } 
     255        } 
     256 
     257        int series = 0; 
     258        if (matchingSeries.size() > 1) { 
     259          for (int i=0; i<matchingSeries.size(); i++) { 
     260            int index = matchingSeries.get(i); 
     261            String name = store.getImageName(index); 
     262            boolean valid = true; 
     263            for (int j=0; j<matchingSeries.size(); j++) { 
     264              if (i != j) { 
     265                String compName = store.getImageName(matchingSeries.get(j)); 
     266                if (compName.indexOf(name) >= 0) { 
     267                  valid = false; 
     268                  break; 
    260269                } 
    261270              } 
    262               newXML.append(xml.substring(end)); 
    263  
    264               try { 
    265                 store = service.createOMEXMLMetadata(newXML.toString()); 
    266               } 
    267               catch (ServiceException se) { } 
    268  
     271            } 
     272            if (valid) { 
     273              series = index; 
    269274              break; 
    270275            } 
    271276          } 
    272277        } 
     278        else if (matchingSeries.size() == 1) series = matchingSeries.get(0); 
     279 
     280        OME root = (OME) store.getRoot(); 
     281        ome.xml.model.Image exportImage = root.getImage(series); 
     282        List<ome.xml.model.Image> allImages = root.copyImageList(); 
     283        for (ome.xml.model.Image img : allImages) { 
     284          if (!img.equals(exportImage)) { 
     285            root.removeImage(img); 
     286          } 
     287        } 
     288        store.setRoot(root); 
    273289      } 
    274290 
  • trunk/components/loci-plugins/src/loci/plugins/out/Exporter.java

    r6588 r6674  
    4545import java.io.File; 
    4646import java.io.IOException; 
     47import java.util.ArrayList; 
     48import java.util.List; 
    4749 
    4850import javax.swing.JFileChooser; 
     
    6971import loci.plugins.util.WindowTools; 
    7072 
     73import ome.xml.model.OME; 
    7174import ome.xml.model.enums.DimensionOrder; 
    7275import ome.xml.model.enums.EnumerationException; 
     
    239242        // the original dataset had multiple series 
    240243        // we need to modify the IMetadata to represent the correct series 
     244 
     245        ArrayList<Integer> matchingSeries = new ArrayList<Integer>(); 
    241246        for (int series=0; series<store.getImageCount(); series++) { 
    242247          String type = store.getPixelsType(series).toString(); 
     
    244249          if (pixelType == ptype) { 
    245250            String imageName = store.getImageName(series); 
    246             if (title.indexOf(imageName) != -1) { 
    247               // found the correct series 
    248  
    249               int start = 0, end = 0; 
    250               StringBuffer newXML = new StringBuffer(); 
    251  
    252               for (int i=0; i<store.getImageCount(); i++) { 
    253                 start = xml.indexOf("<Image", i == 0 ? 0 : end); 
    254                 String prefix = xml.substring(end, start); 
    255                 end = xml.indexOf("</Image>", start) + 9; 
    256  
    257                 newXML.append(prefix); 
    258                 if (i == series) { 
    259                   newXML.append(xml.substring(start, end)); 
     251            if (title.indexOf(imageName) >= 0) { 
     252              matchingSeries.add(series); 
     253            } 
     254          } 
     255        } 
     256 
     257        int series = 0; 
     258        if (matchingSeries.size() > 1) { 
     259          for (int i=0; i<matchingSeries.size(); i++) { 
     260            int index = matchingSeries.get(i); 
     261            String name = store.getImageName(index); 
     262            boolean valid = true; 
     263            for (int j=0; j<matchingSeries.size(); j++) { 
     264              if (i != j) { 
     265                String compName = store.getImageName(matchingSeries.get(j)); 
     266                if (compName.indexOf(name) >= 0) { 
     267                  valid = false; 
     268                  break; 
    260269                } 
    261270              } 
    262               newXML.append(xml.substring(end)); 
    263  
    264               try { 
    265                 store = service.createOMEXMLMetadata(newXML.toString()); 
    266               } 
    267               catch (ServiceException se) { } 
    268  
     271            } 
     272            if (valid) { 
     273              series = index; 
    269274              break; 
    270275            } 
    271276          } 
    272277        } 
     278        else if (matchingSeries.size() == 1) series = matchingSeries.get(0); 
     279 
     280        OME root = (OME) store.getRoot(); 
     281        ome.xml.model.Image exportImage = root.getImage(series); 
     282        List<ome.xml.model.Image> allImages = root.copyImageList(); 
     283        for (ome.xml.model.Image img : allImages) { 
     284          if (!img.equals(exportImage)) { 
     285            root.removeImage(img); 
     286          } 
     287        } 
     288        store.setRoot(root); 
    273289      } 
    274290 
Note: See TracChangeset for help on using the changeset viewer.