Author: kono
Date: 2012-02-27 15:23:29 -0800 (Mon, 27 Feb 2012)
New Revision: 28379
Removed:
core3/impl/trunk/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/impl/
Modified:
core3/impl/trunk/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
Log:
refs #700 Custom Graphics will be saved in a session file. Need to implement
restore event handler.
Modified:
core3/impl/trunk/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
2012-02-27 21:52:57 UTC (rev 28378)
+++
core3/impl/trunk/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
2012-02-27 23:23:29 UTC (rev 28379)
@@ -1,10 +1,11 @@
package org.cytoscape.ding.customgraphicsmgr.internal;
-
import java.io.File;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.SortedSet;
@@ -18,14 +19,20 @@
import org.cytoscape.ding.customgraphics.CyCustomGraphics;
import org.cytoscape.ding.customgraphics.NullCustomGraphics;
import org.cytoscape.property.CyProperty;
+import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
+import org.cytoscape.session.events.SessionAboutToBeSavedListener;
import org.cytoscape.work.swing.DialogTaskManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+public final class CustomGraphicsManagerImpl implements CustomGraphicsManager,
CyShutdownListener,
+ SessionAboutToBeSavedListener {
-public final class CustomGraphicsManagerImpl implements CustomGraphicsManager,
CyShutdownListener {
private static final Logger logger =
LoggerFactory.getLogger(CustomGraphicsManagerImpl.class);
+
private static final String IMAGE_DIR_NAME = "images3";
+ private static final String APP_NAME =
"org.cytoscape.ding.customgraphicsmgr";
+ private static final String SESSION_IMAGE_DIR_NAME = "custom_graphics";
protected final Map<Long, CyCustomGraphics> graphicsMap = new
ConcurrentHashMap<Long, CyCustomGraphics>();
@@ -36,15 +43,16 @@
private static final CyCustomGraphics NULL =
NullCustomGraphics.getNullObject();
private final File imageHomeDirectory;
- protected final Map<CyCustomGraphics,Boolean> isUsedCustomGraphics;
+ protected final Map<CyCustomGraphics, Boolean> isUsedCustomGraphics;
private final DialogTaskManager taskManager;
/**
* Creates an image pool object and restore existing images from user
* resource directory.
*/
- public CustomGraphicsManagerImpl(final CyProperty<Properties>
properties, final DialogTaskManager taskManager, final
CyApplicationConfiguration config) {
-
+ public CustomGraphicsManagerImpl(final CyProperty<Properties>
properties, final DialogTaskManager taskManager,
+ final CyApplicationConfiguration config) {
+
this.taskManager = taskManager;
this.isUsedCustomGraphics = new HashMap<CyCustomGraphics,
Boolean>();
@@ -64,16 +72,12 @@
this.isUsedCustomGraphics.put(NULL, false);
final RestoreImageTaskFactory taskFactory = new
RestoreImageTaskFactory(imageHomeDirectory, this);
-
taskManager.execute(taskFactory);
}
-
-
-
/**
* Add a custom graphics to current session.
- *
+ *
* @param hash
* : Hasn code of image object
* @param graphics
@@ -81,10 +85,10 @@
* @param source
* : Source URL of graphics (if exists. Can be null)
*/
- @Override public void addCustomGraphics(final CyCustomGraphics
graphics, final URL source) {
+ @Override
+ public void addCustomGraphics(final CyCustomGraphics graphics, final
URL source) {
if (graphics == null)
- throw new IllegalArgumentException(
- "Custom Graphics and its ID should not
be null.");
+ throw new IllegalArgumentException("Custom Graphics and
its ID should not be null.");
// Souce URL is an optional field.
if (source != null)
@@ -96,11 +100,12 @@
/**
* Remove graphics from current session (memory).
- *
+ *
* @param id
* : ID of graphics (hash code)
*/
- @Override public void removeCustomGraphics(final Long id) {
+ @Override
+ public void removeCustomGraphics(final Long id) {
final CyCustomGraphics cg = graphicsMap.get(id);
if (cg != null && cg != NULL) {
graphicsMap.remove(id);
@@ -110,25 +115,27 @@
/**
* Get a Custom Graphics by integer ID.
- *
+ *
* @param hash
* Hash code of Custom Graphics object
- *
+ *
* @return Custom Graphics if exists. Otherwise, null.
- *
+ *
*/
- @Override public CyCustomGraphics getCustomGraphicsByID(Long id) {
+ @Override
+ public CyCustomGraphics getCustomGraphicsByID(Long id) {
return graphicsMap.get(id);
}
/**
* Get Custom Graphics by source URL. Images without source cannot be
* retreved by this method.
- *
+ *
* @param sourceURL
* @return
*/
- @Override public CyCustomGraphics getCustomGraphicsBySourceURL(final
URL sourceURL) {
+ @Override
+ public CyCustomGraphics getCustomGraphicsBySourceURL(final URL
sourceURL) {
final Long id = sourceMap.get(sourceURL);
if (id != null)
return graphicsMap.get(id);
@@ -138,17 +145,19 @@
/**
* Get a collection of all Custom Graphics in current session.
- *
+ *
* @return
*/
- @Override public Collection<CyCustomGraphics> getAllCustomGraphics() {
+ @Override
+ public Collection<CyCustomGraphics> getAllCustomGraphics() {
return graphicsMap.values();
}
/**
* Remove all custom graphics from memory.
*/
- @Override public void removeAllCustomGraphics() {
+ @Override
+ public void removeAllCustomGraphics() {
this.graphicsMap.clear();
this.sourceMap.clear();
this.isUsedCustomGraphics.clear();
@@ -160,10 +169,11 @@
/**
* Convert current list of custom graphics into Property object.
- *
+ *
* @return
*/
- @Override public Properties getMetadata() {
+ @Override
+ public Properties getMetadata() {
// Null graphics object should not be in this property.
graphicsMap.remove(NULL.getIdentifier());
@@ -173,29 +183,30 @@
// This means all CyCustomGraphics implementations should have
a special
// toString method.
for (final CyCustomGraphics graphics : graphicsMap.values())
- props.setProperty(graphics.getIdentifier().toString(),
- graphics.toString());
+ props.setProperty(graphics.getIdentifier().toString(),
graphics.toString());
graphicsMap.put(NULL.getIdentifier(), NULL);
return props;
}
-
- @Override public SortedSet<Long> getIDSet() {
+ @Override
+ public SortedSet<Long> getIDSet() {
return new TreeSet<Long>(graphicsMap.keySet());
}
- @Override public boolean isUsedInCurrentSession(final CyCustomGraphics
graphics) {
- if(graphics == null ||
this.isUsedCustomGraphics.containsKey(graphics) == false)
+ @Override
+ public boolean isUsedInCurrentSession(final CyCustomGraphics graphics) {
+ if (graphics == null ||
this.isUsedCustomGraphics.containsKey(graphics) == false)
return false;
return isUsedCustomGraphics.get(graphics);
}
- @Override public void setUsedInCurrentSession(final CyCustomGraphics
graphics, final Boolean isUsed) {
- if(isUsed == null || graphics == null)
+ @Override
+ public void setUsedInCurrentSession(final CyCustomGraphics graphics,
final Boolean isUsed) {
+ if (isUsed == null || graphics == null)
return;
- if(this.isUsedCustomGraphics.containsKey(graphics) == false){
+ if (this.isUsedCustomGraphics.containsKey(graphics) == false) {
// Just ignore.
return;
}
@@ -213,13 +224,38 @@
try {
- //FIXME how this section can wait until everything is
done?
+ // FIXME how this section can wait until everything is
done?
taskManager.execute(factory);
} catch (Exception e1) {
logger.error("Could not save images to disk.", e1);
}
logger.info("========== Image saving process finished
=============");
+ }
+
+ /**
+ * Prepare files to be saved in the session.
+ */
+ @Override
+ public void handleEvent(final SessionAboutToBeSavedEvent e) {
+ // Create Task
+ final PersistImageTaskFactory factory = new
PersistImageTaskFactory(imageHomeDirectory, this);
+ try {
+ taskManager.execute(factory);
+ } catch (Exception ex) {
+ logger.error("Could not save images to .", ex);
+ }
+ // Add it to the apps list
+ final List<File> fileList = new ArrayList<File>();
+ final String[] fileArray = imageHomeDirectory.list();
+ for(final String file: fileArray)
+ fileList.add(new File(imageHomeDirectory, file));
+
+ try {
+ e.addAppFiles(APP_NAME, fileList);
+ } catch (Exception ex) {
+ logger.error("Error adding " + SESSION_IMAGE_DIR_NAME +
" file to be saved in the session.", ex);
+ }
}
}
--
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.