Author: kono
Date: 2010-10-04 16:19:43 -0700 (Mon, 04 Oct 2010)
New Revision: 22142

Modified:
   
cytoscape/trunk/application/src/main/java/cytoscape/data/readers/CytoscapeSessionReader.java
   
cytoscape/trunk/application/src/main/java/cytoscape/data/writers/CytoscapeSessionWriter.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsBrowser.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
Log:
Bug ID 0002345: "When saving a session in 2.8 all images in the image pool get 
saved to the session" had been fixed.  From this version, session saves images 
used in current session only.

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/data/readers/CytoscapeSessionReader.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/data/readers/CytoscapeSessionReader.java
        2010-10-04 22:36:36 UTC (rev 22141)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/data/readers/CytoscapeSessionReader.java
        2010-10-04 23:19:43 UTC (rev 22142)
@@ -399,6 +399,8 @@
                // Remove all custom graphics from current session
                final CustomGraphicsManager manager = 
Cytoscape.getVisualMappingManager()
                                .getCustomGraphicsManager();
+               
+               // Remove all custom graphics before loading new images.
                manager.removeAll();
 
                // First, restore image-based custom graphics

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/data/writers/CytoscapeSessionWriter.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/data/writers/CytoscapeSessionWriter.java
        2010-10-04 22:36:36 UTC (rev 22141)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/data/writers/CytoscapeSessionWriter.java
        2010-10-04 23:19:43 UTC (rev 22142)
@@ -377,16 +377,27 @@
        }
        
        
+       /**
+        * Create archive of Custom Graphics. 
+        * 
+        * @throws IOException
+        * @throws InterruptedException
+        */
        private void zipCustomGraphics() throws IOException, 
InterruptedException {
+               
                final CustomGraphicsManager pool = 
Cytoscape.getVisualMappingManager().getCustomGraphicsManager();
+               
                // Collect all custom graphics
                final Collection<CyCustomGraphics> customGraphics = 
pool.getAll();
-               
-               // Add metadata file to the session file
-               zos.putNextEntry(new ZipEntry(sessionDir + "images/" + 
CustomGraphicsManager.METADATA_FILE));
-               pool.getMetadata().store(zos, "Image Metadata");
-               
+       
+               final Properties graphicsProps = new Properties();
                for(CyCustomGraphics cg: customGraphics) {
+                       // Save only images used in current session.
+                       if(pool.isUsedInCurrentSession(cg) == false)
+                               continue;
+                       else
+                               
graphicsProps.setProperty(cg.getIdentifier().toString(), cg.toString());
+                       
                        final Image img = cg.getRenderedImage();
                        // For now, save URLImage only.
                        // TODO: how can we handle Dynamic Images?
@@ -396,7 +407,12 @@
                                ImageIO.write(ImageUtil.toBufferedImage(img), 
"PNG", zos);
                        }
                }
+               
+               // Add metadata file to the session file
+               zos.putNextEntry(new ZipEntry(sessionDir + "images/" + 
CustomGraphicsManager.METADATA_FILE));
+               graphicsProps.store(zos, "Image Metadata");
        }
+       
 
        /**
         * Writes a network file to the session zip. 

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
 2010-10-04 22:36:36 UTC (rev 22141)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
 2010-10-04 23:19:43 UTC (rev 22142)
@@ -66,17 +66,22 @@
        public static final String METADATA_FILE = "image_metadata.props";
 
        private File imageHomeDirectory;
+       
+       private final Map<CyCustomGraphics,Boolean> isUsedCustomGraphics;
 
        /**
         * Creates an image pool object and restore existing images from user
         * resource directory.
         */
        public CustomGraphicsManager() {
+               
+               this.isUsedCustomGraphics = new HashMap<CyCustomGraphics, 
Boolean>();
 
                // For loading images in parallel.
                this.imageLoaderService = 
Executors.newFixedThreadPool(NUM_THREADS);
 
                graphicsMap.put(NULL.getIdentifier(), NULL);
+               this.isUsedCustomGraphics.put(NULL, false);
                restoreDefaultVectorImageObjects();
 
                Cytoscape.getPropertyChangeSupport().addPropertyChangeListener(
@@ -164,6 +169,7 @@
                                                ((Taggable) 
cg).getTags().addAll(metatagMap.get(f));
 
                                        graphicsMap.put(cg.getIdentifier(), cg);
+                                       this.isUsedCustomGraphics.put(cg, 
false);
 
                                        try {
                                                final URL source = new 
URL(fMap.get(f));
@@ -205,6 +211,7 @@
                                Object obj = cls.newInstance();
                                if (obj instanceof CyCustomGraphics) {
                                        graphicsMap.put( ((CyCustomGraphics) 
obj).getIdentifier(), (CyCustomGraphics) obj);
+                                       
this.isUsedCustomGraphics.put((CyCustomGraphics) obj, false);
                                }
                        } catch (InstantiationException e) {
                                throw new RuntimeException(e);
@@ -235,6 +242,7 @@
                        sourceMap.put(source, graphics.getIdentifier());
 
                graphicsMap.put(graphics.getIdentifier(), graphics);
+               this.isUsedCustomGraphics.put(graphics, false);
        }
 
        /**
@@ -245,8 +253,10 @@
         */
        public void removeGraphics(final Long id) {
                final CyCustomGraphics cg = graphicsMap.get(id);
-               if (cg != null && cg != NULL)
+               if (cg != null && cg != NULL) {
                        graphicsMap.remove(id);
+                       this.isUsedCustomGraphics.remove(cg);
+               }
        }
 
        /**
@@ -292,6 +302,7 @@
        public void removeAll() {
                this.graphicsMap.clear();
                this.sourceMap.clear();
+               this.isUsedCustomGraphics.clear();
 
                // Null Graphics should not be removed.
                this.graphicsMap.put(NULL.getIdentifier(), NULL);
@@ -347,4 +358,23 @@
        public SortedSet<Long> getIDSet() {
                return new TreeSet<Long>(graphicsMap.keySet());
        }
+       
+       public Boolean isUsedInCurrentSession(final CyCustomGraphics graphics) {
+               if(graphics == null)
+                       throw new NullPointerException("CyCustomGraphics cannot 
be null.");
+               if(this.isUsedCustomGraphics.containsKey(graphics) ==false)
+                       throw new IllegalArgumentException("No such 
CyCustomGraphics: " + graphics.getDisplayName());
+
+               return isUsedCustomGraphics.get(graphics);
+       }
+       
+       public void setUsedInCurrentSession(final CyCustomGraphics graphics, 
final Boolean isUsed) {
+               if(isUsed == null || graphics == null)
+                       throw new NullPointerException("Parameters cannot be 
null.");
+               
+               if(this.isUsedCustomGraphics.containsKey(graphics) == false)
+                       throw new IllegalArgumentException("No such custom 
graphics object: " + graphics.getDisplayName());
+               
+               this.isUsedCustomGraphics.put(graphics, isUsed);
+       }
 }

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsBrowser.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsBrowser.java
      2010-10-04 22:36:36 UTC (rev 22141)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsBrowser.java
      2010-10-04 23:19:43 UTC (rev 22142)
@@ -19,7 +19,6 @@
 import org.jdesktop.swingx.JXList;
 
 import cytoscape.Cytoscape;
-import cytoscape.render.stateful.CustomGraphic;
 import cytoscape.visual.customgraphic.CustomGraphicsManager;
 import cytoscape.visual.customgraphic.CyCustomGraphics;
 import cytoscape.visual.customgraphic.NullCustomGraphics;
@@ -129,7 +128,9 @@
                        //dumpDataFlavors(trans);
                        boolean gotData = false;
                        try {
+                               
                                if 
(trans.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+                                       
                                        final List<File> fileList = 
(List<File>) trans
                                                        
.getTransferData(DataFlavor.javaFileListFlavor);
 

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
   2010-10-04 22:36:36 UTC (rev 22141)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
   2010-10-04 23:19:43 UTC (rev 22142)
@@ -216,6 +216,9 @@
                        }
                }
                this.currentMap.put(dv, targets);
+               
+               // Flag this as used Custom Graphics
+               
Cytoscape.getVisualMappingManager().getCustomGraphicsManager().setUsedInCurrentSession(graphics,
 true);
        }
 
        private CustomGraphic syncSize(CyCustomGraphics graphics,

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to