Author: kono
Date: 2010-12-17 16:35:49 -0800 (Fri, 17 Dec 2010)
New Revision: 23236

Added:
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsRange.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/CustomGraphicsIcon.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
Modified:
   
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/CustomGraphicsManagerImpl.java
   
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/PersistImageTask.java
   
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTask.java
   
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTaskFactory.java
   
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/ui/CustomGraphicsCellRenderer.java
   
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
   
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
   core3/ding-presentation-impl/trunk/pom.xml
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphics.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/VisualPropertyIconFactory.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DVisualLexicon.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/AbstractDCustomGraphics.java
   
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
   
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
   
core3/ding-presentation-impl/trunk/src/test/java/org/cytoscape/view/DVisualLexiconTest.java
   
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/EditorManagerImpl.java
   
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/valueeditor/DiscreteValueEditor.java
   
core3/vizmap-gui-impl/trunk/src/main/resources/META-INF/spring/bundle-context-vizmapper.xml
Log:
Custom Graphics is partially working.  Need to fix persistence, restore, and 
editors.

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/CustomGraphicsManagerImpl.java
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/CustomGraphicsManagerImpl.java
    2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/CustomGraphicsManagerImpl.java
    2010-12-18 00:35:49 UTC (rev 23236)
@@ -17,7 +17,6 @@
 import org.cytoscape.ding.customgraphics.NullCustomGraphics;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.work.TaskManager;
-import org.cytoscape.work.TaskMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,16 +25,9 @@
 
        private static final Logger logger = 
LoggerFactory.getLogger(CustomGraphicsManagerImpl.class);
 
-//     private static final int TIMEOUT = 1000;
-//     private static final int NUM_THREADS = 8;
 
-       private static final String IMAGE_DIR_NAME = "images";
-//
-//     // For image I/O, PNG is used as bitmap image format.
-//     private static final String IMAGE_EXT = "png";
+       private static final String IMAGE_DIR_NAME = "images3";
 
-//     private final ExecutorService imageLoaderService;
-
        protected final Map<Long, CyCustomGraphics> graphicsMap = new 
ConcurrentHashMap<Long, CyCustomGraphics>();
 
        // URL to hash code map. For images associated with URL.
@@ -45,8 +37,6 @@
        private static final CyCustomGraphics NULL = NullCustomGraphics
                        .getNullObject();
 
-       
-
        private final File imageHomeDirectory;
        
        protected final Map<CyCustomGraphics,Boolean> isUsedCustomGraphics;
@@ -71,14 +61,19 @@
                if(props == null)
                        throw new NullPointerException("Property is missing.");
                
-               final String configDirectory = 
props.getProperty(CyProperty.DEFAULT_CONFIG_DIR);
+               String configDirectory = 
props.getProperty(CyProperty.DEFAULT_CONFIG_DIR);
+               if(configDirectory == null || configDirectory.trim().length() 
== 0)
+                       configDirectory = System.getProperty("user.home");
                
-               this.imageHomeDirectory = new File(configDirectory, 
IMAGE_DIR_NAME);
+               final File configFileLocation = new File(configDirectory, 
CyProperty.DEFAULT_CONFIG_DIR);
+               this.imageHomeDirectory = new File(configFileLocation, 
IMAGE_DIR_NAME);
+               
+               logger.debug("\n!!!!!!!!!!!!!!!!! Cytoscape image directory: " 
+ imageHomeDirectory.toString());
 
                graphicsMap.put(NULL.getIdentifier(), NULL);
                this.isUsedCustomGraphics.put(NULL, false);
                
-               final RestoreImageTaskFactory taskFactory = new 
RestoreImageTaskFactory(props, this);
+               final RestoreImageTaskFactory taskFactory = new 
RestoreImageTaskFactory(imageHomeDirectory, this);
                
                taskManager.execute(taskFactory);
                

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/PersistImageTask.java
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/PersistImageTask.java
     2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/PersistImageTask.java
     2010-12-18 00:35:49 UTC (rev 23236)
@@ -24,17 +24,17 @@
 
 public class PersistImageTask implements Task {
 
-       private static final Logger logger = 
LoggerFactory.getLogger(PersistImageTask.class);
+       private static final Logger logger = LoggerFactory
+                       .getLogger(PersistImageTask.class);
 
        private final File location;
        private final CustomGraphicsManager manager;
 
        private static final int TIMEOUT = 1000;
        private static final int NUM_THREADS = 4;
-       
+
        private static final String METADATA_FILE = "image_metadata.props";
 
-
        /**
         * Constructor.<br>
         * 
@@ -54,8 +54,10 @@
 
                // Remove all existing files
                final File[] files = location.listFiles();
-               for (File old : files)
-                       old.delete();
+               if (files != null) {
+                       for (File old : files)
+                               old.delete();
+               }
 
                final long startTime = System.currentTimeMillis();
 
@@ -82,8 +84,14 @@
 
                }
 
-               exService.shutdown();
-               exService.awaitTermination(TIMEOUT, TimeUnit.SECONDS);
+               try {
+                       exService.shutdown();
+                       exService.awaitTermination(TIMEOUT, TimeUnit.SECONDS);
+               } catch (InterruptedException e) {
+                       
+                       e.printStackTrace();
+                       throw e;
+               }
 
                try {
                        manager.getMetadata().store(
@@ -119,6 +127,8 @@
 
                public String call() throws Exception {
 
+                       logger.debug("  Saving Image: " + fileName);
+                       
                        if (!fileName.endsWith(".png"))
                                fileName += ".png";
                        File file = new File(imageHome, fileName);

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTask.java
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTask.java
     2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTask.java
     2010-12-18 00:35:49 UTC (rev 23236)
@@ -48,7 +48,6 @@
 
        private File imageHomeDirectory;
        
-       private static final String IMAGE_DIR_NAME = "images";
 
        // For image I/O, PNG is used as bitmap image format.
        private static final String IMAGE_EXT = "png";
@@ -58,14 +57,13 @@
                        GradientRoundRectangleLayer.class, 
GradientOvalLayer.class };
        
        
-       RestoreImageTask(final Properties props, final 
CustomGraphicsManagerImpl manager) {
+       RestoreImageTask(final File imageLocaiton, final 
CustomGraphicsManagerImpl manager) {
                this.manager = manager;
                
                // For loading images in parallel.
                this.imageLoaderService = 
Executors.newFixedThreadPool(NUM_THREADS);
                
-               final String configDirectory = 
props.getProperty(CyProperty.DEFAULT_CONFIG_DIR);
-               this.imageHomeDirectory = new File(configDirectory, 
IMAGE_DIR_NAME);
+               this.imageHomeDirectory = imageLocaiton;
        }
        
        private void restoreDefaultVectorImageObjects() {

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTaskFactory.java
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTaskFactory.java
      2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/RestoreImageTaskFactory.java
      2010-12-18 00:35:49 UTC (rev 23236)
@@ -1,24 +1,24 @@
 package org.cytoscape.ding.impl.customgraphics;
 
-import java.util.Properties;
+import java.io.File;
 
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskIterator;
 
 public class RestoreImageTaskFactory implements TaskFactory {
        
-       private final Properties props;
+       private final File imageLocation;
        private final CustomGraphicsManagerImpl manager;
        
-       RestoreImageTaskFactory(final Properties props, final 
CustomGraphicsManagerImpl manager) {
+       RestoreImageTaskFactory(final File imageLocation, final 
CustomGraphicsManagerImpl manager) {
                this.manager = manager;
-               this.props = props;
+               this.imageLocation = imageLocation;
        }
 
        @Override
        public TaskIterator getTaskIterator() {
                
-               return new TaskIterator(new RestoreImageTask(props, manager));
+               return new TaskIterator(new RestoreImageTask(imageLocation, 
manager));
        }
 
 }

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/ui/CustomGraphicsCellRenderer.java
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/ui/CustomGraphicsCellRenderer.java
        2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/ui/CustomGraphicsCellRenderer.java
        2010-12-18 00:35:49 UTC (rev 23236)
@@ -20,8 +20,6 @@
 
 /**
  * Cell renderer for Custom Graphics Browser.
- * 
- * @author kono
  *
  */
 public class CustomGraphicsCellRenderer extends JPanel implements

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
     2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
     2010-12-18 00:35:49 UTC (rev 23236)
@@ -12,6 +12,11 @@
                
        <osgi:reference id="cyApplicationManagerServiceRef" 
interface="org.cytoscape.session.CyApplicationManager" />
        
+       
+       <!-- Export Custom Graphics Manager as a service.  Other bundles should 
access CG through this sevice. -->
+       <osgi:service id="customGraphicsManagerService" 
ref="customGraphicsManager"
+               auto-export="interfaces" />
+       
        <osgi:service id="customGraphicsManagerActionService" 
ref="customGraphicsManagerAction"
                interface="org.cytoscape.application.swing.CyAction" />
 </beans>
\ No newline at end of file

Modified: 
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
--- 
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
  2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-customgraphics-manager-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
  2010-12-18 00:35:49 UTC (rev 23236)
@@ -4,14 +4,14 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>
        
 
-       <bean id="customGraphicsManager2"
+       <bean id="customGraphicsManager"
                
class="org.cytoscape.ding.impl.customgraphics.CustomGraphicsManagerImpl">
                <constructor-arg ref="coreCyPropertyServiceRef" />
                <constructor-arg ref="guiTaskManagerServiceRef" />
        </bean>
        
        <bean id="customGraphicsManagerAction" 
class="org.cytoscape.ding.impl.customgraphics.action.CustomGraphicsManagerAction">
-               <constructor-arg ref="customGraphicsManager2" />
+               <constructor-arg ref="customGraphicsManager" />
                <constructor-arg ref="cyApplicationManagerServiceRef" />
        </bean>
 </beans>
\ No newline at end of file

Modified: core3/ding-presentation-impl/trunk/pom.xml
===================================================================
--- core3/ding-presentation-impl/trunk/pom.xml  2010-12-17 23:06:30 UTC (rev 
23235)
+++ core3/ding-presentation-impl/trunk/pom.xml  2010-12-18 00:35:49 UTC (rev 
23236)
@@ -171,6 +171,12 @@
                        <scope>test</scope>
                </dependency>
                <dependency>
+                       <groupId>org.mockito</groupId>
+                       <artifactId>mockito-all</artifactId>
+                       <version>1.8.1</version>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
                        <groupId>org.cytoscape</groupId>
                        <artifactId>presentation-api</artifactId>
                        <version>3.0.0-alpha2-SNAPSHOT</version>

Added: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsRange.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsRange.java
                         (rev 0)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsRange.java
 2010-12-18 00:35:49 UTC (rev 23236)
@@ -0,0 +1,33 @@
+package org.cytoscape.ding.customgraphics;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.cytoscape.view.model.DiscreteRange;
+
+public class CustomGraphicsRange implements DiscreteRange<CyCustomGraphics>  {
+
+       private CustomGraphicsManager manager;
+       
+       
+       public void setManager(final CustomGraphicsManager manager) {
+               this.manager = manager;
+       }
+       
+       @Override
+       public Class<CyCustomGraphics> getType() {
+               return CyCustomGraphics.class;
+       }
+
+       @Override
+       public boolean isDiscrete() {
+               return true;
+       }
+
+       @Override
+       public Set<CyCustomGraphics> values() {
+               
+               return new 
HashSet<CyCustomGraphics>(manager.getAllCustomGraphics());
+       }
+
+}

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphics.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphics.java
  2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphics.java
  2010-12-18 00:35:49 UTC (rev 23236)
@@ -1,6 +1,13 @@
 package org.cytoscape.ding.customgraphics;
 
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+
 import org.cytoscape.ding.impl.customgraphics.AbstractDCustomGraphics;
+import org.cytoscape.ding.impl.customgraphics.bitmap.URLImageCustomGraphics;
 
 /**
  * Null object for Custom Graphics. This is used to reset custom graphics on
@@ -10,6 +17,18 @@
  * 
  */
 public class NullCustomGraphics extends AbstractDCustomGraphics {
+       
+       private static final String DEF_IMAGE_FILE = 
"images/stock_dialog-warning-32.png";
+       private static BufferedImage DEF_IMAGE;
+       
+       static  {
+               try {
+                       DEF_IMAGE =ImageIO.read(URLImageCustomGraphics.class
+                                       
.getClassLoader().getResource(DEF_IMAGE_FILE));
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+       }
 
        static final CyCustomGraphics NULL = new NullCustomGraphics();
 
@@ -26,4 +45,9 @@
        public String toString() {
                return this.getClass().getCanonicalName();
        }
+
+       @Override
+       public Image getRenderedImage() {
+               return DEF_IMAGE;
+       }
 }

Added: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/CustomGraphicsIcon.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/CustomGraphicsIcon.java
                            (rev 0)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/CustomGraphicsIcon.java
    2010-12-18 00:35:49 UTC (rev 23236)
@@ -0,0 +1,16 @@
+package org.cytoscape.ding.icon;
+
+import org.cytoscape.ding.customgraphics.CyCustomGraphics;
+
+public class CustomGraphicsIcon extends VisualPropertyIcon<CyCustomGraphics> {
+
+       private static final long serialVersionUID = -216647303312376087L;
+       
+       
+       public CustomGraphicsIcon(CyCustomGraphics value, int width, int height,
+                       String name) {
+               super(value, width, height, name);
+               
+               this.setImage(value.getRenderedImage());
+       }
+}

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/VisualPropertyIconFactory.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/VisualPropertyIconFactory.java
     2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/icon/VisualPropertyIconFactory.java
     2010-12-18 00:35:49 UTC (rev 23236)
@@ -6,6 +6,7 @@
 
 import org.cytoscape.ding.LineStyle;
 import org.cytoscape.ding.NodeShape;
+import org.cytoscape.ding.customgraphics.CyCustomGraphics;
 import org.cytoscape.view.model.VisualProperty;
 
 
@@ -29,6 +30,8 @@
                        icon = new NodeIcon(((NodeShape) value).getShape(), w, 
h, ((NodeShape) value).getShapeName());
                } else if(value instanceof LineStyle) {
                        icon = new LineTypeIcon(((LineStyle) 
value).getStroke(5), w, h, ((LineStyle) value).name());
+               } else if(value instanceof CyCustomGraphics) {
+                       icon = new CustomGraphicsIcon(((CyCustomGraphics) 
value), w, h, ((CyCustomGraphics) value).getDisplayName());
                } else {
                        icon = new TextIcon(value, w, h, value.toString());
                }

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
     2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
     2010-12-18 00:35:49 UTC (rev 23236)
@@ -46,6 +46,7 @@
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.imageio.ImageIO;
 
@@ -56,6 +57,10 @@
 import org.cytoscape.ding.NodeShape;
 import org.cytoscape.ding.NodeView;
 import org.cytoscape.ding.ObjectPosition;
+import org.cytoscape.ding.customgraphics.CyCustomGraphics;
+import org.cytoscape.ding.customgraphics.Layer;
+import org.cytoscape.ding.customgraphics.NullCustomGraphics;
+import org.cytoscape.ding.impl.visualproperty.CustomGraphicsVisualProperty;
 import org.cytoscape.graph.render.immed.GraphGraphics;
 import org.cytoscape.graph.render.stateful.CustomGraphic;
 import org.cytoscape.model.CyEdge;
@@ -154,6 +159,9 @@
 
        // View Model for this presentation.
        private final View<CyNode> nodeViewModel;
+       
+       // Custom Graphics layers.
+       private final Set<CustomGraphic> targets;
 
        /*
         * @param inx the RootGraph index of node (a negative number).
@@ -162,6 +170,7 @@
                if (view == null)
                        throw new NullPointerException("view must never be 
null!");
 
+               targets = new HashSet<CustomGraphic>();
                graphView = view;
                m_inx = inx;
                nodeViewModel = nv;
@@ -1562,7 +1571,59 @@
                        setJustify(op.getJustify().getConversionConstant());
                        setLabelOffsetX(op.getOffsetX());
                        setLabelOffsetY(op.getOffsetY());
+               } else if(vp instanceof CustomGraphicsVisualProperty) {
+                       final CyCustomGraphics cg = (CyCustomGraphics) value;
+                       applyCustomGraphics(cg);
                }
        }
+       
+       
+       private void applyCustomGraphics(final CyCustomGraphics customGraphics) 
{
 
+               // Remove current layers associated with this Custom Graphics
+               if (targets.size() != 0) {
+                       for (CustomGraphic cg : targets)
+                               removeCustomGraphic(cg);
+
+                       targets.clear();
+               }
+
+               // For these cases, remove current layers.
+               if (customGraphics == null
+                               || customGraphics instanceof CyCustomGraphics 
== false
+                               || customGraphics instanceof 
NullCustomGraphics) {
+                       return;
+               }
+               
+               final List<Layer> layers = (List<Layer>) 
customGraphics.getLayers();
+
+               // No need to update
+               if (layers == null || layers.size() == 0)
+                       return;
+
+               //FIXME: size dependency
+               // Check dependency. Sync size or not.
+//             boolean sync = false;
+//             if (dep != null) {
+//                     sync = dep.check(NODE_CUSTOM_GRAPHICS_SIZE_SYNC);
+//             }
+
+               for (Layer layer : layers) {
+                       // Assume it's a Ding layer
+                       final CustomGraphic cg = (CustomGraphic) 
layer.getLayerObject();
+//                     if (sync) {
+//                             final CustomGraphic resized = 
syncSize(graphics, cg, dv, dep);
+//                             dv.addCustomGraphic(resized);
+//                             targets.add(resized);
+//                     } else {
+                               addCustomGraphic(cg);
+                               targets.add(cg);
+//                     }
+               }
+               //this.currentMap.put(dv, targets);
+               
+               // Flag this as used Custom Graphics
+               
//Cytoscape.getVisualMappingManager().getCustomGraphicsManager().setUsedInCurrentSession(graphics,
 true);
+       }
+
 }

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DVisualLexicon.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DVisualLexicon.java
        2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DVisualLexicon.java
        2010-12-18 00:35:49 UTC (rev 23236)
@@ -42,7 +42,12 @@
 import org.cytoscape.ding.ArrowShape;
 import org.cytoscape.ding.NodeShape;
 import org.cytoscape.ding.ObjectPosition;
+import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
+import org.cytoscape.ding.customgraphics.CustomGraphicsRange;
+import org.cytoscape.ding.customgraphics.CyCustomGraphics;
+import org.cytoscape.ding.customgraphics.NullCustomGraphics;
 import org.cytoscape.ding.impl.visualproperty.ArrowShapeTwoDVisualProperty;
+import org.cytoscape.ding.impl.visualproperty.CustomGraphicsVisualProperty;
 import org.cytoscape.ding.impl.visualproperty.FontTwoDVisualProperty;
 import org.cytoscape.ding.impl.visualproperty.IntegerTwoDVisualProperty;
 import org.cytoscape.ding.impl.visualproperty.NodeShapeTwoDVisualProperty;
@@ -106,6 +111,10 @@
                        200, "NODE_TRANSPARENCY", "Node Transparency", 
CyNode.class);
        
        
+       private static final CustomGraphicsRange CG_RANGE = new 
CustomGraphicsRange();
+       public static final VisualProperty<CyCustomGraphics> 
NODE_CUSTOMGRAPHICS_1 = new CustomGraphicsVisualProperty(
+                       NullCustomGraphics.getNullObject(), CG_RANGE, 
"NODE_CUSTOMGRAPHICS_1", "Node Custom Graphics 1", CyNode.class);
+       
 
        
        // Edge VPs
@@ -149,8 +158,10 @@
                        "Edge Label Position", CyEdge.class);
        
 
-       public DVisualLexicon() {
+       public DVisualLexicon(final CustomGraphicsManager manager) {
                super(DING_ROOT);
+               
+               CG_RANGE.setManager(manager);
                        
                addVisualProperty(NETWORK_NODE_SELECTION, NETWORK);
                addVisualProperty(NETWORK_EDGE_SELECTION, NETWORK);
@@ -170,6 +181,8 @@
                addVisualProperty(NODE_BORDER_STROKE, NODE);
                addVisualProperty(NODE_TRANSPARENCY, NODE);
                
+               addVisualProperty(NODE_CUSTOMGRAPHICS_1, NODE_PAINT);
+               
                addVisualProperty(EDGE_SELECTED_PAINT, EDGE_PAINT);
                addVisualProperty(EDGE_STROKE, EDGE);
                addVisualProperty(EDGE_SOURCE_ARROW_SELECTED_PAINT, EDGE_PAINT);

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/AbstractDCustomGraphics.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/AbstractDCustomGraphics.java
        2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/customgraphics/AbstractDCustomGraphics.java
        2010-12-18 00:35:49 UTC (rev 23236)
@@ -99,9 +99,7 @@
                this.displayName = displayName;
        }
 
-       public Image getRenderedImage() {
-               return null;
-       }
+       @Override abstract public Image getRenderedImage();
 
 
        public Collection<String> getTags() {

Added: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
                           (rev 0)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
   2010-12-18 00:35:49 UTC (rev 23236)
@@ -0,0 +1,30 @@
+package org.cytoscape.ding.impl.visualproperty;
+
+import org.cytoscape.ding.customgraphics.CustomGraphicsRange;
+import org.cytoscape.ding.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.model.AbstractVisualProperty;
+
+public class CustomGraphicsVisualProperty extends
+               AbstractVisualProperty<CyCustomGraphics> {
+
+
+       public CustomGraphicsVisualProperty(final CyCustomGraphics 
defaultValue, final CustomGraphicsRange customGraphicsRange,
+                       String id, String displayName, Class<?> 
targetObjectDataType) {
+               super(defaultValue, customGraphicsRange, id, displayName,
+                               targetObjectDataType);
+       }
+       
+
+       @Override
+       public String toSerializableString(CyCustomGraphics value) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public CyCustomGraphics parseSerializableString(String value) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+}

Modified: 
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
       2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
       2010-12-18 00:35:49 UTC (rev 23236)
@@ -6,6 +6,10 @@
        default-lazy-init="false">
 
 
+       <osgi:reference id="customGraphicsManagerServiceRef"
+               
interface="org.cytoscape.ding.customgraphics.CustomGraphicsManager">
+       </osgi:reference>
+
        <osgi:reference id="renderingEngineManagerServiceRef"
                
interface="org.cytoscape.view.presentation.RenderingEngineManager">
        </osgi:reference>

Modified: 
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
    2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
    2010-12-18 00:35:49 UTC (rev 23236)
@@ -22,6 +22,7 @@
        <context:annotation-config />
 
        <bean id="dVisualLexicon" 
class="org.cytoscape.ding.impl.DVisualLexicon">
+               <constructor-arg ref="customGraphicsManagerServiceRef" />
        </bean>
 
        <bean id="dingRenderingEngineFactory" 
class="org.cytoscape.ding.impl.DingRenderingEngineFactory">

Modified: 
core3/ding-presentation-impl/trunk/src/test/java/org/cytoscape/view/DVisualLexiconTest.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/test/java/org/cytoscape/view/DVisualLexiconTest.java
 2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/ding-presentation-impl/trunk/src/test/java/org/cytoscape/view/DVisualLexiconTest.java
 2010-12-18 00:35:49 UTC (rev 23236)
@@ -2,8 +2,11 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
 
+import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
 import org.cytoscape.ding.impl.DVisualLexicon;
+import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.NullDataType;
 import org.cytoscape.view.model.VisualLexicon;
 import org.cytoscape.view.model.VisualProperty;
@@ -18,7 +21,8 @@
 
        @Before
        public void setUp() throws Exception {
-               dLexicon = new DVisualLexicon();
+               final CustomGraphicsManager manager = 
mock(CustomGraphicsManager.class);
+               dLexicon = new DVisualLexicon(manager);
        }
 
        @After
@@ -35,7 +39,7 @@
 
                assertEquals(1, 
dLexicon.getVisualLexiconNode(root).getChildren().size());
                
-               assertEquals(60, dLexicon.getAllVisualProperties().size());
+               assertEquals(61, dLexicon.getAllVisualProperties().size());
        }
 
        @Test

Modified: 
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/EditorManagerImpl.java
===================================================================
--- 
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/EditorManagerImpl.java
      2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/EditorManagerImpl.java
      2010-12-18 00:35:49 UTC (rev 23236)
@@ -50,6 +50,7 @@
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.session.CyApplicationManager;
 import org.cytoscape.view.model.DiscreteRange;
 import org.cytoscape.view.model.Range;
 import org.cytoscape.view.model.VisualLexicon;
@@ -86,11 +87,16 @@
 
        private final PropertyEditor mappingTypeEditor;
        
+       private final CyApplicationManager appManager;
+       
 
        /**
         * Creates a new EditorFactory object.
         */
-       public EditorManagerImpl(final AttributeSetManager attrManager, final 
VisualMappingManager vmm) {
+       public EditorManagerImpl(final CyApplicationManager appManager, final 
AttributeSetManager attrManager, final VisualMappingManager vmm) {
+               
+               this.appManager = appManager;
+               
                editors = new HashMap<Class<?>, VisualPropertyEditor<?>>();
 
                comboBoxEditors = new HashMap<String, PropertyEditor>();
@@ -350,10 +356,9 @@
                                this.addVisualPropertyEditor(vpEditor, null);
                                
                                if(this.getValueEditor(range.getType()) == 
null) {
-                                       ValueEditor<?> valEditor = new 
DiscreteValueEditor(range.getType(), values);
+                                       ValueEditor<?> valEditor = new 
DiscreteValueEditor(appManager, range.getType(), (DiscreteRange) range, vp);
                                        this.addValueEditor(valEditor, null);
                                }
-                               
                        }
                }
        }

Modified: 
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/valueeditor/DiscreteValueEditor.java
===================================================================
--- 
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/valueeditor/DiscreteValueEditor.java
        2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/vizmap-gui-impl/trunk/src/main/java/org/cytoscape/view/vizmap/gui/internal/editor/valueeditor/DiscreteValueEditor.java
        2010-12-18 00:35:49 UTC (rev 23236)
@@ -39,8 +39,8 @@
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 import javax.swing.DefaultListModel;
@@ -54,6 +54,11 @@
 import javax.swing.ListSelectionModel;
 import javax.swing.SwingConstants;
 
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.session.CyApplicationManager;
+import org.cytoscape.view.model.DiscreteRange;
+import org.cytoscape.view.model.VisualProperty;
+import org.cytoscape.view.presentation.RenderingEngine;
 import org.cytoscape.view.vizmap.gui.editor.ValueEditor;
 import org.jdesktop.swingx.border.DropShadowBorder;
 
@@ -66,32 +71,62 @@
  * <li>etc.</li>
  * </ul>
  * 
- * @author kono
  */
 public class DiscreteValueEditor<T> extends JDialog implements ValueEditor<T> {
        
        private final static long serialVersionUID = 1202339876950593L;
+       
+       private static final int ICON_SIZE = 32;
 
-       private final Class<T> type;
-       private final Set<T> values;
+       private final Class<T> type;    
+       private final DiscreteRange<T> range;
+       private final VisualProperty<T> vp;
        
-//     private Map<T, Icon> valueMap;
+       private final CyApplicationManager appManager;
+       
+       
+       private Map<T, Icon> iconMap;
 //     
 //     private List<T> orderedKeyList;
 //     private T defaultValue;
        private boolean canceled = false;
 
-       public DiscreteValueEditor(Class<T> type, Set<T> values) {
+       public DiscreteValueEditor(final CyApplicationManager appManager, final 
Class<T> type, final DiscreteRange<T> dRange, final VisualProperty<T> vp) {
                super();
-               this.values = values;
+               
+               if(dRange == null)
+                       throw new NullPointerException("Range object is null.");
+               
+               this.range = dRange;            
                this.type = type;
+               this.appManager = appManager;
+               this.vp = vp;
                
+               this.iconMap = new HashMap<T, Icon>();
+               
                this.setModal(true);
                this.setTitle("Select a value");
 
                initComponents();
                setListItems();
+               
        }
+       
+       /**
+        * Use current renderer to create icons.
+        * @param values
+        */
+       private void renderIcons(final Set<T> values) {
+               final RenderingEngine<CyNetwork> engine = 
appManager.getCurrentRenderingEngine();
+               
+               // CCurrent engine is not ready yet.
+               if(engine == null)
+                       return;
+               
+               iconMap.clear();
+               for(T value: values)
+                       iconMap.put(value, engine.createIcon(vp, value, 
ICON_SIZE, ICON_SIZE));
+       }
 
 
        /**
@@ -211,17 +246,16 @@
 
        
        private void setListItems() {
-               final List<Icon> icons = new ArrayList<Icon>();
-               //orderedKeyList = new ArrayList<T>();
 
+               final Set<T> values = range.values();
+               renderIcons(values);
                
                model = new DefaultListModel();
                iconList.setModel(model);
 
-               Icon icon;
 
                for (final T key : values) {
-                       //icon = valueMap.get(key);
+                       //Icon icon = iconMap.get(key);
 
                        //icons.add(icon);
                        //orderedKeyList.add(key);
@@ -249,26 +283,29 @@
                                int index, boolean isSelected, boolean 
cellHasFocus) {
                        // Get icon for the target value
                        
-                       //TODO: fix icon
-                       //final Icon icon = valueMap.get(value);
+                       final Icon icon = iconMap.get(value);
 
                        setText(value.toString());
-                       // icon.setLeftPadding(15);
-                       //setIcon(icon);
+                       //icon.setLeftPadding(15);
+                       setIcon(icon);
                        setFont(isSelected ? SELECTED_FONT : NORMAL_FONT);
 
                        this.setVerticalTextPosition(SwingConstants.CENTER);
                        this.setVerticalAlignment(SwingConstants.CENTER);
-                       this.setIconTextGap(35);
+                       this.setIconTextGap(45);
 
                        setBackground(isSelected ? SELECTED_COLOR : 
list.getBackground());
                        setForeground(isSelected ? SELECTED_FONT_COLOR : list
                                        .getForeground());
                        
-                       this.setHorizontalTextPosition(CENTER);
-                       setPreferredSize(new Dimension(100, 40));
-//                     setPreferredSize(new Dimension(icon.getIconWidth(), icon
-//                                     .getIconHeight() + 20));
+                       this.setHorizontalTextPosition(LEFT);
+                       this.setHorizontalAlignment(LEFT);
+                               
+                       if(icon != null)
+                               setPreferredSize(new 
Dimension(icon.getIconWidth(), icon.getIconHeight() + 20));
+                       else
+                               setPreferredSize(new Dimension(100, 60));
+                       
                        this.setBorder(new DropShadowBorder());
 
                        return this;
@@ -277,6 +314,7 @@
 
        @Override
        public <S extends T> T showEditor(Component parent, S initialValue) {
+               setListItems();
                setLocationRelativeTo(parent);
                setVisible(true);
                return getValue();

Modified: 
core3/vizmap-gui-impl/trunk/src/main/resources/META-INF/spring/bundle-context-vizmapper.xml
===================================================================
--- 
core3/vizmap-gui-impl/trunk/src/main/resources/META-INF/spring/bundle-context-vizmapper.xml
 2010-12-17 23:06:30 UTC (rev 23235)
+++ 
core3/vizmap-gui-impl/trunk/src/main/resources/META-INF/spring/bundle-context-vizmapper.xml
 2010-12-18 00:35:49 UTC (rev 23236)
@@ -66,6 +66,7 @@
                
class="org.cytoscape.view.vizmap.gui.internal.editor.EditorManagerImpl">
                <constructor-arg ref="attributeSetManager" />
                <constructor-arg ref="vmmServiceRef" />
+               <constructor-arg ref="cyApplicationManagerServiceRef" />
        </bean>
 
 

-- 
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