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.