Author: clopes
Date: 2012-06-18 14:08:07 -0700 (Mon, 18 Jun 2012)
New Revision: 29604

Added:
   
core3/api/trunk/presentation-api/src/main/resources/cross_browser_color_code.txt
Modified:
   
core3/api/trunk/presentation-api/src/main/java/org/cytoscape/view/presentation/property/PaintVisualProperty.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualLexiconManager.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorTranslator.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorUtil.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/NumberTranslator.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingFactory.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingImpl.java
   
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/StringTranslator.java
Log:
Fixes #1072 (Port passthrough handlers from 2.x): Passthrough mapping now uses 
VisualProperty.parseSerializableString(), rather than the Color or Number 
Translators, to avoid redundancy.
Also added color map (e.g. "white"=>"#ffffff") to 
PaintVisualProperty.parseSerializableString(). 

Modified: 
core3/api/trunk/presentation-api/src/main/java/org/cytoscape/view/presentation/property/PaintVisualProperty.java
===================================================================
--- 
core3/api/trunk/presentation-api/src/main/java/org/cytoscape/view/presentation/property/PaintVisualProperty.java
    2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/api/trunk/presentation-api/src/main/java/org/cytoscape/view/presentation/property/PaintVisualProperty.java
    2012-06-18 21:08:07 UTC (rev 29604)
@@ -37,11 +37,19 @@
 
 import java.awt.Color;
 import java.awt.Paint;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.StringTokenizer;
 
 import org.cytoscape.model.CyIdentifiable;
 import org.cytoscape.view.model.AbstractVisualProperty;
 import org.cytoscape.view.model.Range;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  *  Visual Property for {@link Paint} values.
@@ -51,6 +59,15 @@
  */
 public final class PaintVisualProperty extends AbstractVisualProperty<Paint> { 
 
+       private static final Map<String, String> COLOR_MAP = new 
HashMap<String, String>();
+       private static final String COLOR_CODE_RESOURCE = 
"cross_browser_color_code.txt";
+       
+       private static final Logger logger = 
LoggerFactory.getLogger(PaintVisualProperty.class);
+
+       static {
+               
buildColorCodeTable(PaintVisualProperty.class.getClassLoader().getResource(COLOR_CODE_RESOURCE));
+       }
+
        /**
         * Constructor.
         * @param def The default paint value.
@@ -78,31 +95,37 @@
 
        
        @Override 
-       public Paint parseSerializableString(final String text) {
+       public Paint parseSerializableString(String text) {
                if (text == null) 
-                       throw new IllegalArgumentException("invalid color 
format: null");
+                       return null;
                
+               text = text.trim().toUpperCase();
+               text = COLOR_MAP.containsKey(text) ? COLOR_MAP.get(text) : text;
+               
                // Start by seeing if this is a hex representation
                if (text.startsWith("#")) {
                        try {
                                return Color.decode(text);
                        } catch (NumberFormatException e) {
-                               throw new IllegalArgumentException("invalid hex 
RGB format");   
+                               logger.error("Invalid hex RGB format: " + text, 
e);
+                               return null;
                        }
                }
 
                // could be an RGB color, such as "rgb(255,0,255)"
-               String s = text.replaceAll("(?i)rgb *\\(", 
"").replaceAll("\\)", "");
+               final String s = text.replaceAll("(?i)rgb *\\(", 
"").replaceAll("\\)", "");
                
                // ok, this must be 3 comma separated integers now
-               StringTokenizer strtok = new StringTokenizer(s, ",");
+               final StringTokenizer strtok = new StringTokenizer(s, ",");
 
-               if (strtok.countTokens() != 3) 
-                       throw new IllegalArgumentException("not all RGB 
integers specified");   
+               if (strtok.countTokens() != 3) {
+                       logger.error("Not all RGB integers specified: " + text);
+                       return null;
+               }
 
-               String red = strtok.nextToken().trim();
-               String green = strtok.nextToken().trim();
-               String blue = strtok.nextToken().trim();
+               final String red = strtok.nextToken().trim();
+               final String green = strtok.nextToken().trim();
+               final String blue = strtok.nextToken().trim();
 
                try {
                        int r = Integer.parseInt(red);
@@ -111,7 +134,33 @@
 
                        return new Color(r, g, b);
                } catch (NumberFormatException e) {
-                       throw new IllegalArgumentException("invalid RGB 
format");       
+                       logger.error("Invalid hex RGB format: " + text, e);
+                       return null;
                }
        }
+       
+       private static void buildColorCodeTable(final URL resourceURL) {
+               BufferedReader bufRd = null;
+               String line;
+
+               try {
+                       bufRd = new BufferedReader(new 
InputStreamReader(resourceURL.openStream()));
+                       while ((line = bufRd.readLine()) != null) {
+                               String[] parts = line.split("\\t");
+                               COLOR_MAP.put(parts[0].trim().toUpperCase(), 
parts[1].trim());
+                       }
+               } catch (IOException e) {
+                       e.printStackTrace();
+               } finally {
+                       if (bufRd != null) {
+                               try {
+                                       bufRd.close();
+                               } catch (IOException e) {
+                                       e.printStackTrace();
+                               } finally {
+                                       bufRd = null;
+                               }
+                       }
+               }
+       }
 }

Added: 
core3/api/trunk/presentation-api/src/main/resources/cross_browser_color_code.txt
===================================================================
--- 
core3/api/trunk/presentation-api/src/main/resources/cross_browser_color_code.txt
                            (rev 0)
+++ 
core3/api/trunk/presentation-api/src/main/resources/cross_browser_color_code.txt
    2012-06-18 21:08:07 UTC (rev 29604)
@@ -0,0 +1,140 @@
+AliceBlue      #F0F8FF
+AntiqueWhite   #FAEBD7
+Aqua   #00FFFF
+Aquamarine     #7FFFD4
+Azure  #F0FFFF
+Beige  #F5F5DC
+Bisque         #FFE4C4
+Black  #000000
+BlanchedAlmond         #FFEBCD
+Blue   #0000FF
+BlueViolet     #8A2BE2
+Brown  #A52A2A
+BurlyWood      #DEB887
+CadetBlue      #5F9EA0
+Chartreuse     #7FFF00
+Chocolate      #D2691E
+Coral  #FF7F50
+CornflowerBlue         #6495ED
+Cornsilk       #FFF8DC
+Crimson        #DC143C
+Cyan   #00FFFF
+DarkBlue       #00008B
+DarkCyan       #008B8B
+DarkGoldenRod  #B8860B
+DarkGray       #A9A9A9
+DarkGreen      #006400
+DarkKhaki      #BDB76B
+DarkMagenta    #8B008B
+DarkOliveGreen         #556B2F
+Darkorange     #FF8C00
+DarkOrchid     #9932CC
+DarkRed        #8B0000
+DarkSalmon     #E9967A
+DarkSeaGreen   #8FBC8F
+DarkSlateBlue  #483D8B
+DarkSlateGray  #2F4F4F
+DarkTurquoise  #00CED1
+DarkViolet     #9400D3
+DeepPink       #FF1493
+DeepSkyBlue    #00BFFF
+DimGray        #696969
+DodgerBlue     #1E90FF
+FireBrick      #B22222
+FloralWhite    #FFFAF0
+ForestGreen    #228B22
+Fuchsia        #FF00FF
+Gainsboro      #DCDCDC
+GhostWhite     #F8F8FF
+Gold   #FFD700
+GoldenRod      #DAA520
+Gray   #808080
+Green  #008000
+GreenYellow    #ADFF2F
+HoneyDew       #F0FFF0
+HotPink        #FF69B4
+IndianRed      #CD5C5C
+Indigo         #4B0082
+Ivory  #FFFFF0
+Khaki  #F0E68C
+Lavender       #E6E6FA
+LavenderBlush  #FFF0F5
+LawnGreen      #7CFC00
+LemonChiffon   #FFFACD
+LightBlue      #ADD8E6
+LightCoral     #F08080
+LightCyan      #E0FFFF
+LightGoldenRodYellow   #FAFAD2
+LightGrey      #D3D3D3
+LightGreen     #90EE90
+LightPink      #FFB6C1
+LightSalmon    #FFA07A
+LightSeaGreen  #20B2AA
+LightSkyBlue   #87CEFA
+LightSlateGray         #778899
+LightSteelBlue         #B0C4DE
+LightYellow    #FFFFE0
+Lime   #00FF00
+LimeGreen      #32CD32
+Linen  #FAF0E6
+Magenta        #FF00FF
+Maroon         #800000
+MediumAquaMarine       #66CDAA
+MediumBlue     #0000CD
+MediumOrchid   #BA55D3
+MediumPurple   #9370D8
+MediumSeaGreen         #3CB371
+MediumSlateBlue        #7B68EE
+MediumSpringGreen      #00FA9A
+MediumTurquoise        #48D1CC
+MediumVioletRed        #C71585
+MidnightBlue   #191970
+MintCream      #F5FFFA
+MistyRose      #FFE4E1
+Moccasin       #FFE4B5
+NavajoWhite    #FFDEAD
+Navy   #000080
+OldLace        #FDF5E6
+Olive  #808000
+OliveDrab      #6B8E23
+Orange         #FFA500
+OrangeRed      #FF4500
+Orchid         #DA70D6
+PaleGoldenRod  #EEE8AA
+PaleGreen      #98FB98
+PaleTurquoise  #AFEEEE
+PaleVioletRed  #D87093
+PapayaWhip     #FFEFD5
+PeachPuff      #FFDAB9
+Peru   #CD853F
+Pink   #FFC0CB
+Plum   #DDA0DD
+PowderBlue     #B0E0E6
+Purple         #800080
+Red    #FF0000
+RosyBrown      #BC8F8F
+RoyalBlue      #4169E1
+SaddleBrown    #8B4513
+Salmon         #FA8072
+SandyBrown     #F4A460
+SeaGreen       #2E8B57
+SeaShell       #FFF5EE
+Sienna         #A0522D
+Silver         #C0C0C0
+SkyBlue        #87CEEB
+SlateBlue      #6A5ACD
+SlateGray      #708090
+Snow   #FFFAFA
+SpringGreen    #00FF7F
+SteelBlue      #4682B4
+Tan    #D2B48C
+Teal   #008080
+Thistle        #D8BFD8
+Tomato         #FF6347
+Turquoise      #40E0D0
+Violet         #EE82EE
+Wheat  #F5DEB3
+White  #FFFFFF
+WhiteSmoke     #F5F5F5
+Yellow         #FFFF00
+YellowGreen    #9ACD32
\ No newline at end of file

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualLexiconManager.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualLexiconManager.java
        2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualLexiconManager.java
        2012-06-18 21:08:07 UTC (rev 29604)
@@ -44,17 +44,12 @@
 
        
        public void addRenderingEngineFactory(RenderingEngineFactory<?> 
factory, Map props) {
-               
-               lexiconSet.add(factory.getVisualLexicon());
-               
                final VisualLexicon lexicon = factory.getVisualLexicon();
+               lexiconSet.add(lexicon);
                
-               // Node-related Visual Properties are linked as a children of 
NODE
-               // VP.
+               // Node-related Visual Properties are linked as a children of 
NODE VP.
                
nodeVPs.addAll(lexicon.getAllDescendants(BasicVisualLexicon.NODE));
-
-               // Node-related Visual Properties are linked as a children of 
NODE
-               // VP.
+               // Node-related Visual Properties are linked as a children of 
NODE VP.
                
edgeVPs.addAll(lexicon.getAllDescendants(BasicVisualLexicon.EDGE));
 
                for (VisualProperty<?> vp : lexicon.getAllVisualProperties()) {

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorTranslator.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorTranslator.java
    2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorTranslator.java
    2012-06-18 21:08:07 UTC (rev 29604)
@@ -4,6 +4,7 @@
 
 import org.cytoscape.view.vizmap.mappings.ValueTranslator;
 
+//TODO: DELETE?
 public class ColorTranslator implements ValueTranslator<String, Paint>{
 
        @Override

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorUtil.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorUtil.java
  2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/ColorUtil.java
  2012-06-18 21:08:07 UTC (rev 29604)
@@ -8,7 +8,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-
+// TODO: DELETE?
 public class ColorUtil {
 
        private static final int COLOR_RANGE_MAX = 255;

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/NumberTranslator.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/NumberTranslator.java
   2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/NumberTranslator.java
   2012-06-18 21:08:07 UTC (rev 29604)
@@ -2,6 +2,7 @@
 
 import org.cytoscape.view.vizmap.mappings.ValueTranslator;
 
+//TODO: DELETE?
 public class NumberTranslator<T extends Number> implements 
ValueTranslator<Object, T> {
 
        private final Class<T> translatedValueType;

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingFactory.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingFactory.java
  2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingFactory.java
  2012-06-18 21:08:07 UTC (rev 29604)
@@ -1,6 +1,5 @@
 package org.cytoscape.view.vizmap.internal.mappings;
 
-import java.awt.Paint;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -15,33 +14,26 @@
        private static final Map<Class<?>, ValueTranslator<?, ?>> TRANSLATORS = 
new HashMap<Class<?>, ValueTranslator<?,?>>();
        private static final ValueTranslator<Object, String> DEFAULT_TRANSLATOR 
= new StringTranslator();
        
-       static {
-               
-               TRANSLATORS.put(Paint.class, new ColorTranslator());
-               TRANSLATORS.put(Double.class, new 
NumberTranslator<Double>(Double.class));
-               TRANSLATORS.put(Float.class, new 
NumberTranslator<Float>(Float.class));
-               TRANSLATORS.put(Integer.class, new 
NumberTranslator<Integer>(Integer.class));
-       }
-       
-
        public void addValueTranslator(ValueTranslator<?, ?> translator, Map 
props) {
-               if(translator != null) {
+               if (translator != null)
                        TRANSLATORS.put(translator.getTranslatedValueType(), 
translator);
-                       System.out.println("Got Value trans: " + 
translator.toString());
-               }
        }
+       
        public void removeValueTranslator(ValueTranslator<?, ?> translator, Map 
props) {
        }
        
        @Override
        public <K, V> VisualMappingFunction<K, V> 
createVisualMappingFunction(final String attributeName,
-                       Class<K> attrValueType, VisualProperty<V> vp) {
-               
+                       final Class<K> attrValueType, final VisualProperty<V> 
vp) {
+
                final ValueTranslator<?, ?> translator = 
TRANSLATORS.get(vp.getRange().getType());
-               if(translator!= null)
-                       return new PassthroughMappingImpl<K, V>(attributeName, 
attrValueType, vp, (ValueTranslator<K, V>) translator);
+
+               if (translator != null)
+                       return new PassthroughMappingImpl<K, V>(attributeName, 
attrValueType, vp,
+                                       (ValueTranslator<K, V>) translator);
                else
-                       return new PassthroughMappingImpl<K, V>(attributeName, 
attrValueType, vp, (ValueTranslator<K, V>) DEFAULT_TRANSLATOR);
+                       return new PassthroughMappingImpl<K, V>(attributeName, 
attrValueType, vp,
+                                       (ValueTranslator<K, V>) 
DEFAULT_TRANSLATOR);
        }
 
        @Override

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingImpl.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingImpl.java
     2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/PassthroughMappingImpl.java
     2012-06-18 21:08:07 UTC (rev 29604)
@@ -66,11 +66,11 @@
                        return;
 
                K tableValue = null;
-
+               
                // Special case
-               if (columnName.equals(CyIdentifiable.SUID))
+               if (columnName.equals(CyIdentifiable.SUID)) {
                        tableValue = (K) view.getModel().getSUID();
-               else {
+               } else {
                        // Value is not set. Ignore.
                        if (row.isSet(columnName) == false)
                                return;
@@ -85,10 +85,17 @@
                                return;
                        }
                }
-
-               V value = translator.translate(tableValue);
-
-               if (value != null)
-                       view.setVisualProperty(vp, value);
+               
+               Object value = translator.translate(tableValue);
+               
+               if (value instanceof String)
+                       value = vp.parseSerializableString((String) value);
+               
+               if (value != null) {
+                       try {
+                               view.setVisualProperty(vp, (V) value);
+                       } catch (ClassCastException cce) {
+                       }
+               }
        }
 }
\ No newline at end of file

Modified: 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/StringTranslator.java
===================================================================
--- 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/StringTranslator.java
   2012-06-18 21:07:09 UTC (rev 29603)
+++ 
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/mappings/StringTranslator.java
   2012-06-18 21:08:07 UTC (rev 29604)
@@ -8,8 +8,7 @@
 
        @Override
        public String translate(final Object inputValue) {
-
-               if(inputValue != null) {
+               if (inputValue != null) {
                        if (inputValue instanceof List) {
                                // Special handler for List column.
                                final List<?> list = (List<?>)inputValue;
@@ -21,16 +20,18 @@
 
                                        sb.deleteCharAt(sb.length() - 1);
                                }
+                               
                                return sb.toString();
-                       } else
+                       } else {
                                return inputValue.toString();
-               } else
+                       }
+               } else {
                        return null;
+               }
        }
 
        @Override
        public Class<String> getTranslatedValueType() {
                return String.class;
        }
-
 }

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