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.

Reply via email to