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.