inprogress
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Wed, 2 Apr 2014 23:59:51 +0000 (23:59 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Wed, 2 Apr 2014 23:59:51 +0000 (23:59 +0000)
forester/java/src/org/forester/io/parsers/phyloxml/PhyloXmlHandler.java
forester/java/src/org/forester/phylogeny/data/NodeVisualData.java

index d33cb74..4eed70c 100644 (file)
@@ -59,6 +59,7 @@ import org.forester.phylogeny.data.NodeVisualData;
 import org.forester.phylogeny.data.PhylogenyDataUtil;
 import org.forester.phylogeny.data.PropertiesMap;
 import org.forester.phylogeny.data.Property;
+import org.forester.phylogeny.data.Property.AppliesTo;
 import org.forester.phylogeny.data.Reference;
 import org.forester.phylogeny.data.Sequence;
 import org.forester.phylogeny.data.SequenceRelation;
@@ -325,11 +326,17 @@ public final class PhyloXmlHandler extends DefaultHandler {
             else if ( qualified_name.equals( PhyloXmlMapping.PROPERTY ) ) {
                 final Property prop = ( Property ) PropertyParser.getInstance().parse( element );
                 if ( prop.getRef().startsWith( NodeVisualData.APTX_VISUALIZATION_REF ) ) {
-                    if ( node.getNodeData().getNodeVisualData() == null ) {
-                        node.getNodeData().setNodeVisualData( new NodeVisualData() );
+                    if ( prop.getAppliesTo() == AppliesTo.NODE ) {
+                        if ( node.getNodeData().getNodeVisualData() == null ) {
+                            node.getNodeData().setNodeVisualData( new NodeVisualData() );
+                        }
+                        final NodeVisualData vd = node.getNodeData().getNodeVisualData();
+                        vd.parseProperty( prop );
+                    }
+                    else {
+                        System.err.println( "Do not know how to handle " + NodeVisualData.APTX_VISUALIZATION_REF
+                                + " property applied to " + prop.getAppliesTo() );
                     }
-                    final NodeVisualData vd = node.getNodeData().getNodeVisualData();
-                    vd.parseProperty( prop );
                 }
                 else {
                     if ( !node.getNodeData().isHasProperties() ) {
index a2018a2..4ef6adc 100644 (file)
@@ -215,6 +215,43 @@ public final class NodeVisualData implements PhylogenyData {
                 return;\r
             }\r
         }\r
+        //\r
+        else if ( prop.getRef().equals( NODE_SIZE_REF ) ) {\r
+            int s = -1;\r
+            try {\r
+                s = Integer.parseInt( prop.getValue() );\r
+            }\r
+            catch ( final NumberFormatException e ) {\r
+                return;\r
+            }\r
+            if ( s >= 0 ) {\r
+                setSize( s );\r
+            }\r
+        }\r
+        else if ( prop.getRef().equals( NODE_FILL_COLOR_REF ) ) {\r
+            try {\r
+                setFillColor( Color.decode( prop.getValue() ) );\r
+            }\r
+            catch ( final NumberFormatException e ) {\r
+                return;\r
+            }\r
+        }\r
+        else if ( prop.getRef().equals( NODE_BORDER_COLOR_REF ) ) {\r
+            try {\r
+                setBorderColor( Color.decode( prop.getValue() ) );\r
+            }\r
+            catch ( final NumberFormatException e ) {\r
+                return;\r
+            }\r
+        }\r
+        else if ( prop.getRef().equals( NODE_SHAPE_REF ) ) {\r
+            try {\r
+                setShape( prop.getValue() );\r
+            }\r
+            catch ( final NumberFormatException e ) {\r
+                return;\r
+            }\r
+        }\r
     }\r
 \r
     public final void setBorderColor( final Color border_color ) {\r
@@ -293,7 +330,22 @@ public final class NodeVisualData implements PhylogenyData {
         _shape = shape;\r
     }\r
 \r
+    public final void setShape( final String shape ) {\r
+        if ( shape.equalsIgnoreCase( NODE_SHAPE_CIRCLE ) ) {\r
+            setShape( NodeShape.CIRCLE );\r
+        }\r
+        else if ( shape.equalsIgnoreCase( NODE_SHAPE_RECTANGLE ) ) {\r
+            setShape( NodeShape.RECTANGLE );\r
+        }\r
+        else {\r
+            setShape( NodeShape.DEFAULT );\r
+        }\r
+    }\r
+\r
     public final void setSize( final float size ) {\r
+        if ( ( size != DEFAULT_SIZE ) && ( size < 0 ) ) {\r
+            throw new IllegalArgumentException( "negative size: " + size );\r
+        }\r
         _size = size;\r
     }\r
 \r
@@ -371,7 +423,6 @@ public final class NodeVisualData implements PhylogenyData {
                                           FONT_COLOR_TYPE,\r
                                           AppliesTo.NODE ) );\r
         }\r
-        //\r
         if ( getShape() != NodeShape.DEFAULT ) {\r
             String shape = null;\r
             if ( getShape() == NodeShape.RECTANGLE ) {\r