Author: scooter
Date: 2012-09-14 14:19:33 -0700 (Fri, 14 Sep 2012)
New Revision: 30371

Modified:
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/AbstractDCustomGraphics.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphicsFactory.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphics.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphicsFactory.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientOvalFactory.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientRoundRectangleFactory.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
   
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
Log:
Moved handling of the class prefix into common routines and also restructured 
the CustomGraphicsTranslator
so that it can now handle multiple different types of strings (based on a 
prefix).


Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/AbstractDCustomGraphics.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/AbstractDCustomGraphics.java
      2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/AbstractDCustomGraphics.java
      2012-09-14 21:19:33 UTC (rev 30371)
@@ -117,8 +117,7 @@
                        name = displayName.replace(",", "___");
                }
 
-               return this.getClass().getCanonicalName() + DELIMITER + 
this.getIdentifier()
-                               + DELIMITER + name + DELIMITER + tagStr;
+               return this.getIdentifier() + DELIMITER + name + DELIMITER + 
tagStr;
        }
        
        public void setFitRatio(float fitRatio) {

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
     2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
     2012-09-14 21:19:33 UTC (rev 30371)
@@ -1,12 +1,15 @@
 package org.cytoscape.ding.customgraphics;
 
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URL;
+import java.net.URLConnection;
 
 import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
-import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
 import org.cytoscape.ding.customgraphics.NullCustomGraphics;
 import org.cytoscape.ding.customgraphics.bitmap.URLImageCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
 import org.cytoscape.view.vizmap.mappings.ValueTranslator;
 
 public class CustomGraphicsTranslator implements ValueTranslator<String, 
CyCustomGraphics>{
@@ -20,7 +23,18 @@
        
        @Override
        public CyCustomGraphics translate(String inputValue) {
-               return parse(inputValue);
+               // Start by assuming this is a URL
+               CyCustomGraphics cg = translateURL(inputValue);
+               if (cg != null) return cg;
+
+               // Nope, so hand it to each factory that has a matching prefix
+               for (CyCustomGraphicsFactory factory: 
cgManager.getAllCustomGraphicsFactories()) {
+                       if (factory.getPrefix() != null && 
inputValue.startsWith(factory.getPrefix()+":")) {
+                               cg = 
factory.getInstance(inputValue.substring(factory.getPrefix().length()+1));
+                               if (cg != null) return cg;
+                       }
+               }
+               return null;
        }
 
        @Override
@@ -28,6 +42,24 @@
                return CyCustomGraphics.class;
        }
        
+       private CyCustomGraphics translateURL(String inputValue) {
+               try {
+                       final URL url = new URL(inputValue);
+                       URLConnection conn = url.openConnection();
+                       if (conn == null) return null;
+                       String mimeType = conn.getContentType();
+                       for (CyCustomGraphicsFactory factory: 
cgManager.getAllCustomGraphicsFactories()) {
+                               if (factory.supportsMime(mimeType)) {
+                                       CyCustomGraphics cg = 
factory.getInstance(url);
+                                       if (cg != null) return cg;
+                               }
+                       }
+               
+               } catch (MalformedURLException e) {
+               } catch (IOException e) {
+               }
+               return null;
+       }
        
        /**
         * Create a custom graphics from the given URL string.
@@ -43,7 +75,6 @@
 
                // TODO: this needs to be made generic.  If we have a URL, then 
we can
                // hand it to the appropriate factory
-               
                try {
                        final URL url = new URL(value);
                        CyCustomGraphics graphics = 
cgManager.getCustomGraphicsBySourceURL(url);

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphicsFactory.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphicsFactory.java
    2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphicsFactory.java
    2012-09-14 21:19:33 UTC (rev 30371)
@@ -1,10 +1,7 @@
 package org.cytoscape.ding.customgraphics;
 
-import java.io.IOException;
-import java.net.MalformedURLException;
 import java.net.URL;
 
-import org.cytoscape.ding.customgraphics.bitmap.URLImageCustomGraphics;
 import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
 
 import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
@@ -25,17 +22,30 @@
                this.manager = manager;
        }
        
+       @Override
+       public String getPrefix() { return "null"; }
+       
+       @Override
+       public boolean supportsMime(String mimeType) { return false; }
+
        /**
         * Generate Custom Graphics object from a string.
         */
+       @Override
        public CyCustomGraphics parseSerializableString(String entryStr) {
                return new NullCustomGraphics();
        }
 
+       @Override
        public CyCustomGraphics getInstance(String input) {
                return new NullCustomGraphics();
        }
 
+       @Override
+       public CyCustomGraphics getInstance(URL input) {
+               return new NullCustomGraphics();
+       }
+
        public Class<? extends CyCustomGraphics> getSupportedClass() { return 
TARGET_CLASS; }
 
 }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphics.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphics.java
        2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphics.java
        2012-09-14 21:19:33 UTC (rev 30371)
@@ -167,8 +167,7 @@
                        name = name.replace(",", "___");
                }
 
-               return this.getClass().getCanonicalName() + DELIMITER + 
this.getIdentifier()
-                               + DELIMITER + name + DELIMITER + tagStr;
+               return this.getIdentifier() + DELIMITER + name + DELIMITER + 
tagStr;
        }
 
        @Override

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphicsFactory.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphicsFactory.java
 2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphicsFactory.java
 2012-09-14 21:19:33 UTC (rev 30371)
@@ -24,6 +24,26 @@
        public URLImageCustomGraphicsFactory(final CustomGraphicsManager 
manager) {
                this.manager = manager;
        }
+
+       @Override
+       public String getPrefix() { return "image"; }
+
+       @Override
+       public boolean supportsMime(String mimeType) {
+               if (mimeType.equals("image/bmp"))
+                       return true;
+               if (mimeType.equals("image/x-windows-bmp"))
+                       return true;
+               if (mimeType.equals("image/gif"))
+                       return true;
+               if (mimeType.equals("image/jpeg"))
+                       return true;
+               if (mimeType.equals("image/png"))
+                       return true;
+               if (mimeType.equals("image/vnd.wap.wbmp"))
+                       return true;
+               return false;
+       }
        
        /**
         * Generate Custom Graphics object from a string.
@@ -44,24 +64,28 @@
                        return null;
                }
 
-               final String imageName = entry[1];
-               final String sourceURL = entry[2];
+               final String imageName = entry[0];
+               final String sourceURL = entry[1];
                // Try using the URL first
                if (sourceURL != null) {
                        try {
                                URL url = new URL(sourceURL);
                                CyCustomGraphics cg = 
manager.getCustomGraphicsBySourceURL(url);
-                               cg.setDisplayName(entry[2]);
+                               cg.setDisplayName(entry[1]);
                                return cg;
                        } catch (Exception e) {
                                // This just means that "sourceURL" is 
malformed.  That may be OK.
                        }
                }
                CyCustomGraphics cg = 
manager.getCustomGraphicsByID(Long.parseLong(imageName));
-               cg.setDisplayName(entry[2]);
+               cg.setDisplayName(entry[1]);
                return cg;
        }
 
+       public CyCustomGraphics getInstance(URL url) {
+               return getInstance(url.toString());
+       }
+
        public CyCustomGraphics getInstance(String input) {
                Long id = manager.getNextAvailableID();
                URL url = null;
@@ -85,15 +109,9 @@
 
        private boolean validate(final String entryStr) {
                entry = entryStr.split(",");
-               if (entry == null || entry.length < 3) {
+               if (entry == null || entry.length < 2) {
                        return false;
                }
-
-               // Check class name
-               if (entry[0].trim().equals(
-                               
URLImageCustomGraphics.class.getCanonicalName()) == false) {
-                       return false;
-               }
                return true;
        }
 }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientOvalFactory.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientOvalFactory.java
   2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientOvalFactory.java
   2012-09-14 21:19:33 UTC (rev 30371)
@@ -23,27 +23,27 @@
        public GradientOvalFactory(final CustomGraphicsManager manager) {
                this.manager = manager;
        }
+
+       public String getPrefix() { return "ovalgradient"; }
+       public boolean supportsMime(String mimeType) { return false; }
        
        /**
         * Generate Custom Graphics object from a string.
         */
        public CyCustomGraphics parseSerializableString(String entryStr) {
                String[] entry = entryStr.split(",");
-               if (entry == null || entry.length < 3) {
+               if (entry == null || entry.length < 2) {
                        return null;
                }
-
-               if (entry[0].trim().equals(
-                               GradientOvalLayer.class.getCanonicalName()) == 
false) {
-                       return null;
-               }
-               return new GradientOvalLayer(Long.parseLong(entry[1]));
+               return new GradientOvalLayer(Long.parseLong(entry[0]));
        }
 
        public CyCustomGraphics getInstance(String input) {
                return new GradientOvalLayer(manager.getNextAvailableID());
        }
 
+       public CyCustomGraphics getInstance(URL input) { return null; }
+
        public Class<? extends CyCustomGraphics> getSupportedClass() { return 
TARGET_CLASS; }
 
 }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientRoundRectangleFactory.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientRoundRectangleFactory.java
 2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientRoundRectangleFactory.java
 2012-09-14 21:19:33 UTC (rev 30371)
@@ -23,27 +23,27 @@
        public GradientRoundRectangleFactory(final CustomGraphicsManager 
manager) {
                this.manager = manager;
        }
+
+       public String getPrefix() { return "rectanglegradient"; }
+       public boolean supportsMime(String mimeType) { return false; }
        
        /**
         * Generate Custom Graphics object from a string.
         */
        public CyCustomGraphics parseSerializableString(String entryStr) {
                String[] entry = entryStr.split(",");
-               if (entry == null || entry.length < 3) {
+               if (entry == null || entry.length < 2) {
                        return null;
                }
-
-               if (entry[0].trim().equals(
-                               
GradientRoundRectangleLayer.class.getCanonicalName()) == false) {
-                       return null;
-               }
-               return new 
GradientRoundRectangleLayer(Long.parseLong(entry[1]));
+               return new 
GradientRoundRectangleLayer(Long.parseLong(entry[0]));
        }
 
        public CyCustomGraphics getInstance(String input) {
                return new 
GradientRoundRectangleLayer(manager.getNextAvailableID());
        }
 
+       public CyCustomGraphics getInstance(URL input) { return null; }
+
        public Class<? extends CyCustomGraphics> getSupportedClass() { return 
TARGET_CLASS; }
 
 }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
        2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
        2012-09-14 21:19:33 UTC (rev 30371)
@@ -246,8 +246,10 @@
                // toString() method.
                // This means all CyCustomGraphics implementations should have 
a special
                // toString method.
-               for (final CyCustomGraphics graphics : graphicsMap.values())
-                       props.setProperty(graphics.getIdentifier().toString(), 
graphics.toSerializableString());
+               for (final CyCustomGraphics graphics : graphicsMap.values()) {
+                       props.setProperty(graphics.getIdentifier().toString(), 
+                                         
graphics.getClass().getCanonicalName()+","+graphics.toSerializableString());
+               }
                graphicsMap.put(NULL.getIdentifier(), NULL);
                return props;
        }

Modified: 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
===================================================================
--- 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
    2012-09-14 21:18:15 UTC (rev 30370)
+++ 
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
    2012-09-14 21:19:33 UTC (rev 30371)
@@ -20,7 +20,7 @@
 
        @Override
        public String toSerializableString(final CyCustomGraphics value) {
-               return value.toSerializableString();
+               return 
value.getClass().getCanonicalName()+","+value.toSerializableString();
        }
 
        // Parse the string associated with our visual property.  Note that we 
depend on the first
@@ -45,7 +45,9 @@
                        }
 
                        // System.out.println("Creating new "+parts[0]);
-                       return factory.parseSerializableString(value);
+                       // Skip over the class name
+                       int offset = value.indexOf(",");
+                       return 
factory.parseSerializableString(value.substring(offset+1));
                }
        }
 }

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