Author: scooter
Date: 2012-09-12 16:51:05 -0700 (Wed, 12 Sep 2012)
New Revision: 30360
Added:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsPositionCalculator.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/DummyCustomGraphics.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/vector/GradientOvalFactory.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientRoundRectangleFactory.java
Removed:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/DummyCustomGraphics.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DefaultCyCustomGraphicsFactory.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/ReplaceDummyGraphicsTask.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/customgraphics/
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/CyActivator.java
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/CustomGraphicsManager.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/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTask.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
Log:
Last of the internal refactoring of custom graphics (for now). Now, on to
adding service listeners into the CustomGraphicsManager!
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/CyActivator.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/CyActivator.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/CyActivator.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -16,6 +16,11 @@
import org.cytoscape.application.swing.CyNodeViewContextMenuFactory;
import org.cytoscape.ding.action.GraphicsDetailAction;
import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
+import org.cytoscape.ding.customgraphics.CustomGraphicsTranslator;
+import org.cytoscape.ding.customgraphics.NullCustomGraphicsFactory;
+import org.cytoscape.ding.customgraphics.bitmap.URLImageCustomGraphicsFactory;
+import org.cytoscape.ding.customgraphics.vector.GradientRoundRectangleFactory;
+import org.cytoscape.ding.customgraphics.vector.GradientOvalFactory;
import org.cytoscape.ding.customgraphicsmgr.internal.CustomGraphicsManagerImpl;
import
org.cytoscape.ding.customgraphicsmgr.internal.action.CustomGraphicsManagerAction;
import org.cytoscape.ding.customgraphicsmgr.internal.ui.CustomGraphicsBrowser;
@@ -32,7 +37,6 @@
import org.cytoscape.ding.impl.HandleFactoryImpl;
import org.cytoscape.ding.impl.NVLTFActionSupport;
import org.cytoscape.ding.impl.ViewTaskFactoryListener;
-import org.cytoscape.ding.impl.customgraphics.CustomGraphicsTranslator;
//
// Annotation api
//
@@ -468,6 +472,22 @@
registerAllServices(bc, customGraphicsManager, new
Properties());
registerService(bc, customGraphicsManagerAction,
CyAction.class, new Properties());
+
+ // Create and register our built-in factories.
+ // TODO: When the CustomGraphicsFactory service stuff is set
up, just
+ // register these as services
+ NullCustomGraphicsFactory nullFactory = new
NullCustomGraphicsFactory(customGraphicsManager);
+ customGraphicsManager.addCustomGraphicsFactory(nullFactory);
+
+ URLImageCustomGraphicsFactory imageFactory = new
URLImageCustomGraphicsFactory(customGraphicsManager);
+ customGraphicsManager.addCustomGraphicsFactory(imageFactory);
+
+ GradientOvalFactory ovalFactory = new
GradientOvalFactory(customGraphicsManager);
+ customGraphicsManager.addCustomGraphicsFactory(ovalFactory);
+
+ GradientRoundRectangleFactory rectangleFactory =
+ new GradientRoundRectangleFactory(customGraphicsManager);
+
customGraphicsManager.addCustomGraphicsFactory(rectangleFactory);
}
/**
Deleted:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/DummyCustomGraphics.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/DummyCustomGraphics.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/DummyCustomGraphics.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -1,18 +0,0 @@
-package org.cytoscape.ding;
-
-import java.awt.Image;
-
-import org.cytoscape.ding.customgraphics.AbstractDCustomGraphics;
-import org.cytoscape.ding.customgraphics.NullCustomGraphics;
-
-public final class DummyCustomGraphics extends AbstractDCustomGraphics {
-
- public DummyCustomGraphics(Long id, String displayName) {
- super(id, displayName);
- }
-
- @Override
- public Image getRenderedImage() {
- return NullCustomGraphics.DEF_IMAGE;
- }
-}
\ No newline at end of file
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-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/AbstractDCustomGraphics.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -91,6 +91,7 @@
}
@Override abstract public Image getRenderedImage();
+ @Override abstract public String toString();
public Collection<String> getTags() {
@@ -116,7 +117,7 @@
name = displayName.replace(",", "___");
}
- return this.getClass().getName() + DELIMITER +
this.getIdentifier()
+ return this.getClass().getCanonicalName() + DELIMITER +
this.getIdentifier()
+ DELIMITER + name + DELIMITER + tagStr;
}
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsManager.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsManager.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsManager.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -3,11 +3,19 @@
import java.net.URL;
import java.util.Collection;
import java.util.Properties;
+import java.util.Set;
import java.util.SortedSet;
import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
public interface CustomGraphicsManager {
+
+ void addCustomGraphicsFactory(CyCustomGraphicsFactory factory);
+ void removeCustomGraphicsFactory(CyCustomGraphicsFactory factory);
+ CyCustomGraphicsFactory getCustomGraphicsFactory(Class<? extends
CyCustomGraphics> cls);
+ CyCustomGraphicsFactory getCustomGraphicsFactory(String className);
+ Collection<CyCustomGraphicsFactory> getAllCustomGraphicsFactories();
void addCustomGraphics(CyCustomGraphics cg, URL source);
Copied:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsPositionCalculator.java
(from rev 30353,
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/customgraphics/CustomGraphicsPositionCalculator.java)
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsPositionCalculator.java
(rev 0)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsPositionCalculator.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -0,0 +1,75 @@
+package org.cytoscape.ding.customgraphics;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.cytoscape.ding.ObjectPosition;
+import org.cytoscape.ding.Position;
+import org.cytoscape.ding.impl.DNodeView;
+import org.cytoscape.view.presentation.customgraphics.CustomGraphicLayer;
+import org.cytoscape.graph.render.stateful.PaintFactory;
+
+public class CustomGraphicsPositionCalculator {
+
+ /**
+ * Defines displacement.
+ */
+ private static final Map<Position, Float[]> DISPLACEMENT_MAP;
+
+ static {
+ DISPLACEMENT_MAP = new HashMap<Position, Float[]>();
+
+ DISPLACEMENT_MAP.put(Position.CENTER, new Float[]{0f, 0f} );
+
+ DISPLACEMENT_MAP.put(Position.NORTH, new Float[]{0f, -0.5f});
+ DISPLACEMENT_MAP.put(Position.NORTH_WEST, new Float[]{-0.5f,
-0.5f});
+ DISPLACEMENT_MAP.put(Position.NORTH_EAST, new Float[]{0.5f,
-0.5f});
+
+ DISPLACEMENT_MAP.put(Position.SOUTH, new Float[]{0f, 0.5f});
+ DISPLACEMENT_MAP.put(Position.SOUTH_WEST, new Float[]{-0.5f,
0.5f});
+ DISPLACEMENT_MAP.put(Position.SOUTH_EAST, new Float[]{0.5f,
0.5f});
+
+ DISPLACEMENT_MAP.put(Position.WEST, new Float[]{-0.5f, 0f});
+
+ DISPLACEMENT_MAP.put(Position.EAST, new Float[]{0.5f, 0f});
+ }
+
+
+ /**
+ * Creates new custom graphics in new location
+ *
+ * @param p
+ * @param nv
+ * @param cg
+ * @return
+ */
+ public static CustomGraphicLayer transform(final ObjectPosition p,
final DNodeView nv, final CustomGraphicLayer cg) {
+ final Position anc = p.getAnchor();
+ final Position ancN = p.getTargetAnchor();
+
+ final double nodeW = nv.getWidth();
+ final double nodeH = nv.getHeight();
+ final double cgW = cg.getBounds().getWidth();
+ final double cgH = cg.getBounds().getHeight();
+
+ final Float[] disp1 = DISPLACEMENT_MAP.get(anc);
+ final Float[] disp2 = DISPLACEMENT_MAP.get(ancN);
+
+ // 1. Displacement for graphics
+ final double dispX = -disp1[0] * nodeW;
+ final double dispY = -disp1[1] * nodeH;
+
+ final double dispNX = disp2[0] * cgW;
+ final double dispNY = disp2[1] * cgH;
+
+ // calc total and apply transform
+ double totalDispX = dispX + dispNX + p.getOffsetX();
+ double totalDispY = dispY + dispNY + p.getOffsetY();
+
+ final AffineTransform tf =
AffineTransform.getTranslateInstance(totalDispX, totalDispY);
+
+ return cg.transform(tf);
+ }
+}
Copied:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
(from rev 30353,
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/customgraphics/CustomGraphicsTranslator.java)
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
(rev 0)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/CustomGraphicsTranslator.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -0,0 +1,64 @@
+package org.cytoscape.ding.customgraphics;
+
+import java.io.IOException;
+import java.net.URL;
+
+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.vizmap.mappings.ValueTranslator;
+
+public class CustomGraphicsTranslator implements ValueTranslator<String,
CyCustomGraphics>{
+
+
+ private final CustomGraphicsManager cgManager;
+
+ public CustomGraphicsTranslator(final CustomGraphicsManager cgManager) {
+ this.cgManager = cgManager;
+ }
+
+ @Override
+ public CyCustomGraphics translate(String inputValue) {
+ return parse(inputValue);
+ }
+
+ @Override
+ public Class<CyCustomGraphics> getTranslatedValueType() {
+ return CyCustomGraphics.class;
+ }
+
+
+ /**
+ * Create a custom graphics from the given URL string.
+ * This code try to access the data source and download the image.
+ *
+ * @param value String representation of image source URL.
+ *
+ * @return Image Custom Graphics created from the source image.
+ */
+ private final CyCustomGraphics parse(String value) {
+ if(value == null)
+ return null;
+
+ // 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);
+ if(graphics == null) {
+ // Currently not in the Manager. Need to
create new instance.
+ graphics = new
URLImageCustomGraphics(cgManager.getNextAvailableID(), url.toString());
+ // Use URL as display name
+ graphics.setDisplayName(value);
+
+ // Register to manager.
+ cgManager.addCustomGraphics(graphics, url);
+ }
+ return graphics;
+ } catch (IOException e) {
+ return null;
+ }
+ }
+}
Deleted:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DefaultCyCustomGraphicsFactory.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DefaultCyCustomGraphicsFactory.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DefaultCyCustomGraphicsFactory.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -1,77 +0,0 @@
-package org.cytoscape.ding.customgraphics;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
-import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
-
-public class DefaultCyCustomGraphicsFactory implements CyCustomGraphicsFactory
{
-
- private final CustomGraphicsManager manager;
-
- public DefaultCyCustomGraphicsFactory(final CustomGraphicsManager
manager) {
- if(manager == null)
- throw new NullPointerException("CustomGraphicsManager
is null.");
-
- this.manager = manager;
- }
-
- public CyCustomGraphics parseSerializableString(String string) {
- return getInstance(string);
- }
-
- public CyCustomGraphics getInstance(String entry) {
- // Check this is URL or not
- if (entry == null)
- return null;
-
- String[] parts = entry.split(",");
- if (parts == null || parts.length < 3)
- return null;
-
- final String className = parts[0];
- final Long id = Long.parseLong(parts[1]);
- final String name = parts[2];
-
- CyCustomGraphics cg = null;
-
- // Create new one by reflection
- try {
- final Class<?> cls = Class.forName(className);
- final Constructor<?> ct = cls.getConstructor(Long.class,
- String.class);
- cg = (CyCustomGraphics) ct.newInstance(id, name);
- cg.setDisplayName(parts[2]);
- manager.addCustomGraphics(cg, null);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- return null;
- } catch (InstantiationException e) {
- e.printStackTrace();
- return null;
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- return null;
- } catch (SecurityException e) {
- e.printStackTrace();
- return null;
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- return null;
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- return null;
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- return null;
- }
-
- return cg;
- }
-
- public Class <? extends CyCustomGraphics> getSupportedClass() {
- return null;
- }
-
-}
Copied:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DummyCustomGraphics.java
(from rev 30353,
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/DummyCustomGraphics.java)
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DummyCustomGraphics.java
(rev 0)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/DummyCustomGraphics.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -0,0 +1,23 @@
+package org.cytoscape.ding.customgraphics;
+
+import java.awt.Image;
+
+import org.cytoscape.ding.customgraphics.AbstractDCustomGraphics;
+import org.cytoscape.ding.customgraphics.NullCustomGraphics;
+
+public final class DummyCustomGraphics extends AbstractDCustomGraphics {
+
+ public DummyCustomGraphics(Long id, String displayName) {
+ super(id, displayName);
+ }
+
+ @Override
+ public Image getRenderedImage() {
+ return NullCustomGraphics.DEF_IMAGE;
+ }
+
+ @Override
+ public String toString() {
+ return "DummyCustomGraphics ("+id+") "+displayName;
+ }
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/NullCustomGraphicsFactory.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -0,0 +1,41 @@
+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;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
+
+/**
+ * Create instance of a NullCustomGraphics
+ *
+ */
+public class NullCustomGraphicsFactory implements CyCustomGraphicsFactory {
+
+ private static final Class<? extends CyCustomGraphics> TARGET_CLASS =
NullCustomGraphics.class;
+ private String entry[];
+
+ private final CustomGraphicsManager manager;
+
+ public NullCustomGraphicsFactory(final CustomGraphicsManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * Generate Custom Graphics object from a string.
+ */
+ public CyCustomGraphics parseSerializableString(String entryStr) {
+ return new NullCustomGraphics();
+ }
+
+ public CyCustomGraphics getInstance(String 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-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphics.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -7,6 +7,7 @@
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.SortedSet;
import javax.imageio.ImageIO;
@@ -43,7 +44,7 @@
public URLImageCustomGraphics(Long id, String url) throws IOException {
super(id, url);
- this.tags.add(DEF_TAG);
+ tags.add(DEF_TAG);
createImage(url);
buildCustomGraphics(originalImage);
}
@@ -60,7 +61,8 @@
if (img == null)
throw new IllegalArgumentException("Image cannot be
null.");
- this.tags.add(DEF_TAG);
+ // System.out.println("URLImageCustomGraphics: name = "+name);
+ tags.add(DEF_TAG);
this.originalImage = img;
buildCustomGraphics(originalImage);
}
@@ -145,10 +147,35 @@
}
@Override
+ public String toSerializableString() {
+ String tagStr = "";
+ // Build tags as a string
+ if (tags.size() != 0) {
+ final StringBuilder builder = new StringBuilder();
+ for (String tag : (SortedSet<String>)tags)
+ builder.append(tag + LIST_DELIMITER);
+ String temp = builder.toString();
+ tagStr = temp.substring(0, temp.length() - 1);
+ }
+
+ String name = sourceUrl.toString();
+ if (name == null)
+ name = displayName;
+
+ if (name.contains(",")) {
+ // Replace delimiter
+ name = name.replace(",", "___");
+ }
+
+ return this.getClass().getCanonicalName() + DELIMITER +
this.getIdentifier()
+ + DELIMITER + name + DELIMITER + tagStr;
+ }
+
+ @Override
public String toString() {
if (this.sourceUrl == null && displayName == null) {
return "Empty image";
- } else if (this.sourceUrl != null) {
+ } else if (this.sourceUrl != null &&
!this.sourceUrl.toString().startsWith("bundle")) {
return "Image: "+this.sourceUrl.toString();
} else
return "Image: "+displayName;
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-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/bitmap/URLImageCustomGraphicsFactory.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -45,6 +45,18 @@
}
final String imageName = entry[1];
+ final String sourceURL = entry[2];
+ // Try using the URL first
+ if (sourceURL != null) {
+ try {
+ URL url = new URL(sourceURL);
+ CyCustomGraphics cg =
manager.getCustomGraphicsBySourceURL(url);
+ cg.setDisplayName(entry[2]);
+ 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]);
return cg;
@@ -54,6 +66,7 @@
Long id = manager.getNextAvailableID();
URL url = null;
CyCustomGraphics ccg = null;
+ // System.out.println("URLImageCustomGraphicsFactory: input =
"+input);
try {
ccg = new URLImageCustomGraphics(id, input);
Added:
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
(rev 0)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientOvalFactory.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -0,0 +1,49 @@
+package org.cytoscape.ding.customgraphics.vector;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
+
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
+
+/**
+ * Create instance of a GradientOvalLayer
+ *
+ */
+public class GradientOvalFactory implements CyCustomGraphicsFactory {
+
+ private static final Class<? extends CyCustomGraphics> TARGET_CLASS =
GradientOvalLayer.class;
+ private String entry[];
+
+ private final CustomGraphicsManager manager;
+
+ public GradientOvalFactory(final CustomGraphicsManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * Generate Custom Graphics object from a string.
+ */
+ public CyCustomGraphics parseSerializableString(String entryStr) {
+ String[] entry = entryStr.split(",");
+ if (entry == null || entry.length < 3) {
+ return null;
+ }
+
+ if (entry[0].trim().equals(
+ GradientOvalLayer.class.getCanonicalName()) ==
false) {
+ return null;
+ }
+ return new GradientOvalLayer(Long.parseLong(entry[1]));
+ }
+
+ public CyCustomGraphics getInstance(String input) {
+ return new GradientOvalLayer(manager.getNextAvailableID());
+ }
+
+ public Class<? extends CyCustomGraphics> getSupportedClass() { return
TARGET_CLASS; }
+
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphics/vector/GradientRoundRectangleFactory.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -0,0 +1,49 @@
+package org.cytoscape.ding.customgraphics.vector;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
+
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
+
+/**
+ * Create instance of a GradientOvalLayer
+ *
+ */
+public class GradientRoundRectangleFactory implements CyCustomGraphicsFactory {
+
+ private static final Class<? extends CyCustomGraphics> TARGET_CLASS =
GradientRoundRectangleLayer.class;
+ private String entry[];
+
+ private final CustomGraphicsManager manager;
+
+ public GradientRoundRectangleFactory(final CustomGraphicsManager
manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * Generate Custom Graphics object from a string.
+ */
+ public CyCustomGraphics parseSerializableString(String entryStr) {
+ String[] entry = entryStr.split(",");
+ if (entry == null || entry.length < 3) {
+ return null;
+ }
+
+ if (entry[0].trim().equals(
+
GradientRoundRectangleLayer.class.getCanonicalName()) == false) {
+ return null;
+ }
+ return new
GradientRoundRectangleLayer(Long.parseLong(entry[1]));
+ }
+
+ public CyCustomGraphics getInstance(String input) {
+ return new
GradientRoundRectangleLayer(manager.getNextAvailableID());
+ }
+
+ 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-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -20,6 +20,7 @@
import org.cytoscape.application.events.CyShutdownListener;
import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
import org.cytoscape.ding.customgraphics.IDGenerator;
import org.cytoscape.ding.customgraphics.NullCustomGraphics;
import org.cytoscape.ding.impl.DGraphView;
@@ -45,7 +46,7 @@
private static final String IMAGE_DIR_NAME = "images3";
private static final String APP_NAME =
"org.cytoscape.ding.customgraphicsmgr";
- protected final Map<Long, CyCustomGraphics> graphicsMap = new
ConcurrentHashMap<Long, CyCustomGraphics>();
+ private final Map<Long, CyCustomGraphics> graphicsMap = new
ConcurrentHashMap<Long, CyCustomGraphics>();
// URL to hash code map. For images associated with URL.
protected final Map<URL, Long> sourceMap = new ConcurrentHashMap<URL,
Long>();
@@ -54,27 +55,35 @@
private static final CyCustomGraphics NULL =
NullCustomGraphics.getNullObject();
private final File imageHomeDirectory;
- protected final Map<CyCustomGraphics, Boolean> isUsedCustomGraphics;
+ private final Map<CyCustomGraphics, Boolean> isUsedCustomGraphics;
+ private final Map<String, CyCustomGraphicsFactory> factoryMap;
private final DialogTaskManager taskManager;
private final CyEventHelper eventHelper;
private final VisualMappingManager vmm;
private final CyApplicationManager applicationManager;
+ private static CustomGraphicsManagerImpl instance = null;
/**
* Creates an image pool object and restore existing images from user
* resource directory.
*/
- public CustomGraphicsManagerImpl(final CyProperty<Properties>
properties, final DialogTaskManager taskManager,
- final CyApplicationConfiguration config, final
CyEventHelper eventHelper, final VisualMappingManager vmm,
- final CyApplicationManager applicationManager, final
Set<URL> defaultImageURLs) {
+ public CustomGraphicsManagerImpl(final CyProperty<Properties>
properties,
+ final DialogTaskManager taskManager,
+ final CyApplicationConfiguration
config,
+ final CyEventHelper eventHelper,
+ final VisualMappingManager vmm,
+ final CyApplicationManager
applicationManager,
+ final Set<URL> defaultImageURLs) {
this.taskManager = taskManager;
this.eventHelper = eventHelper;
this.vmm = vmm;
this.applicationManager = applicationManager;
this.isUsedCustomGraphics = new HashMap<CyCustomGraphics,
Boolean>();
+ this.factoryMap = new HashMap<String,
CyCustomGraphicsFactory>();
+ // Add build-in factories?
if (properties == null)
throw new NullPointerException("Property object is
null.");
@@ -92,11 +101,41 @@
this.isUsedCustomGraphics.put(NULL, false);
// Restore Custom Graphics from the directory.
- final RestoreImageTaskFactory taskFactory = new
RestoreImageTaskFactory(defaultImageURLs, imageHomeDirectory, this, eventHelper,
- vmm, applicationManager);
+ final RestoreImageTaskFactory taskFactory =
+ new RestoreImageTaskFactory(defaultImageURLs,
imageHomeDirectory, this, eventHelper,
+ vmm,
applicationManager);
taskManager.execute(taskFactory.createTaskIterator());
+ instance = this;
}
+ public static CustomGraphicsManagerImpl getInstance() { return
instance; }
+
+ public void addCustomGraphicsFactory(CyCustomGraphicsFactory factory) {
+ if (factory == null) return;
+ factoryMap.put(factory.getSupportedClass().getName(), factory);
+ }
+
+ public void removeCustomGraphicsFactory(CyCustomGraphicsFactory
factory) {
+ if (factory == null) return;
+ factoryMap.remove(factory.getSupportedClass());
+ }
+
+ public CyCustomGraphicsFactory getCustomGraphicsFactory(Class<? extends
CyCustomGraphics> cls) {
+ if (factoryMap.containsKey(cls.getName()))
+ return factoryMap.get(cls.getName());
+ return null;
+ }
+
+ public CyCustomGraphicsFactory getCustomGraphicsFactory(String
className) {
+ if (factoryMap.containsKey(className))
+ return factoryMap.get(className);
+ return null;
+ }
+
+ public Collection<CyCustomGraphicsFactory>
getAllCustomGraphicsFactories() {
+ return factoryMap.values();
+ }
+
/**
* Add a custom graphics to current session.
*
@@ -205,7 +244,7 @@
// This means all CyCustomGraphics implementations should have
a special
// toString method.
for (final CyCustomGraphics graphics : graphicsMap.values())
- props.setProperty(graphics.getIdentifier().toString(),
graphics.toString());
+ props.setProperty(graphics.getIdentifier().toString(),
graphics.toSerializableString());
graphicsMap.put(NULL.getIdentifier(), NULL);
return props;
}
Deleted:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/ReplaceDummyGraphicsTask.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/ReplaceDummyGraphicsTask.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/ReplaceDummyGraphicsTask.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -1,68 +0,0 @@
-package org.cytoscape.ding.customgraphicsmgr.internal;
-
-import java.util.Set;
-
-import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.ding.DVisualLexicon;
-import org.cytoscape.ding.DummyCustomGraphics;
-import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
-import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
-import org.cytoscape.ding.customgraphics.NullCustomGraphics;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.view.vizmap.VisualMappingManager;
-import org.cytoscape.view.vizmap.VisualStyle;
-import org.cytoscape.work.Task;
-import org.cytoscape.work.TaskMonitor;
-
-public class ReplaceDummyGraphicsTask implements Task {
-
- private final VisualMappingManager vmm;
- private final CustomGraphicsManager customGraphicsManager;
-
- private final CyApplicationManager applicationManager;
-
- public ReplaceDummyGraphicsTask(final VisualMappingManager vmm, final
CustomGraphicsManager customGraphicsManager,
- final CyApplicationManager applicationManager) {
- this.customGraphicsManager = customGraphicsManager;
- this.vmm = vmm;
- this.applicationManager = applicationManager;
- }
-
- @Override
- public void run(TaskMonitor taskMonitor) throws Exception {
- final Set<VisualStyle> visualStyles = vmm.getAllVisualStyles();
-
- final Set<VisualProperty<CyCustomGraphics>> cgVisualProps =
DVisualLexicon.getCustomGraphicsVisualProperties();
-
- for (final VisualStyle style : visualStyles) {
-
- for (final VisualProperty<CyCustomGraphics> vp :
cgVisualProps) {
- // Step 1: Replace all default values.
- final CyCustomGraphics defValue =
style.getDefaultValue(vp);
- if (defValue instanceof DummyCustomGraphics) {
- DummyCustomGraphics dummy =
(DummyCustomGraphics) defValue;
- Long dummyID = dummy.getIdentifier();
- CyCustomGraphics replacement =
customGraphicsManager.getCustomGraphicsByID(dummyID);
- if (replacement == null) {
- replacement =
NullCustomGraphics.getNullObject();
- }
-
- // Replace it.
- style.setDefaultValue(vp, replacement);
- }
- }
- }
- // Apply the style and Update view
-
- final CyNetworkView currentView =
applicationManager.getCurrentNetworkView();
- if(currentView != null) {
- vmm.getVisualStyle(currentView).apply(currentView);
- currentView.updateView();
- }
- }
-
- @Override
- public void cancel() {}
-
-}
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTask.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTask.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTask.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -78,7 +78,8 @@
DEF_VECTORS_NAMES.add(cls.getName());
}
- RestoreImageTask(final Set<URL> defaultImageURLs, final File
imageLocaiton, final CustomGraphicsManagerImpl manager, final CyEventHelper
eventHelper) {
+ RestoreImageTask(final Set<URL> defaultImageURLs, final File
imageLocaiton,
+ final CustomGraphicsManagerImpl manager, final
CyEventHelper eventHelper) {
this.manager = manager;
this.eventHelper = eventHelper;
@@ -117,8 +118,7 @@
}
if (isExist == false) {
-
manager.graphicsMap.put(cg.getIdentifier(), cg);
-
manager.isUsedCustomGraphics.put(cg, false);
+ manager.addCustomGraphics(cg,
null);
}
}
} catch (InstantiationException e) {
@@ -255,15 +255,12 @@
if (cg instanceof Taggable &&
metatagMap.get(f) != null)
((Taggable)
cg).getTags().addAll(metatagMap.get(f));
-
manager.graphicsMap.put(cg.getIdentifier(), cg);
- manager.isUsedCustomGraphics.put(cg,
false);
-
try {
final URL source = new
URL(fMap.get(f));
if (source != null)
-
manager.sourceMap.put(source, cg.getIdentifier());
+
manager.addCustomGraphics(cg, source);
} catch (MalformedURLException me) {
- continue;
+ manager.addCustomGraphics(cg,
null);
}
}
} catch (IOException ioe) {
@@ -285,7 +282,7 @@
long endTime = System.currentTimeMillis();
double sec = (endTime - startTime) / (1000.0);
logger.info("Image loading process finished in " + sec + "
sec.");
- logger.info("Currently, " + (manager.graphicsMap.size() - 1) +
" images are available.");
+ logger.info("Currently, " +
(manager.getAllCustomGraphics().size() - 1) + " images are available.");
}
@Override
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -34,8 +34,6 @@
public TaskIterator createTaskIterator() {
final RestoreImageTask firstTask = new
RestoreImageTask(defaultImageURLs, imageLocation, manager, eventHelper);
final TaskIterator itr = new TaskIterator(firstTask);
-
- itr.insertTasksAfter(firstTask, new
ReplaceDummyGraphicsTask(vmm, manager, applicationManager));
return itr;
}
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
2012-09-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -63,7 +63,7 @@
import org.cytoscape.view.presentation.customgraphics.CustomGraphicLayer;
import org.cytoscape.ding.customgraphics.NullCustomGraphics;
import org.cytoscape.ding.customgraphics.vector.VectorCustomGraphics;
-import org.cytoscape.ding.impl.customgraphics.CustomGraphicsPositionCalculator;
+import org.cytoscape.ding.customgraphics.CustomGraphicsPositionCalculator;
import org.cytoscape.ding.impl.visualproperty.CustomGraphicsVisualProperty;
import org.cytoscape.ding.impl.visualproperty.ObjectPositionVisualProperty;
import org.cytoscape.graph.render.immed.GraphGraphics;
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-12 23:26:21 UTC (rev 30359)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/visualproperty/CustomGraphicsVisualProperty.java
2012-09-12 23:51:05 UTC (rev 30360)
@@ -1,17 +1,20 @@
package org.cytoscape.ding.impl.visualproperty;
-import org.cytoscape.ding.DummyCustomGraphics;
import org.cytoscape.ding.customgraphics.CustomGraphicsRange;
+import org.cytoscape.ding.customgraphics.DummyCustomGraphics;
+import org.cytoscape.ding.customgraphicsmgr.internal.CustomGraphicsManagerImpl;
import org.cytoscape.view.presentation.customgraphics.CyCustomGraphics;
+import org.cytoscape.view.presentation.customgraphics.CyCustomGraphicsFactory;
import org.cytoscape.view.presentation.customgraphics.CustomGraphicLayer;
import org.cytoscape.ding.customgraphics.NullCustomGraphics;
import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.view.model.AbstractVisualProperty;
public class CustomGraphicsVisualProperty extends
AbstractVisualProperty<CyCustomGraphics> {
-
public CustomGraphicsVisualProperty(final
CyCustomGraphics<CustomGraphicLayer> defaultValue,
- final CustomGraphicsRange customGraphicsRange, String
id, String displayName, Class<? extends CyIdentifiable> targetObjectDataType) {
+ final
CustomGraphicsRange customGraphicsRange,
+ String id, String displayName,
+ Class<? extends CyIdentifiable>
targetObjectDataType) {
super(defaultValue, customGraphicsRange, id, displayName,
targetObjectDataType);
}
@@ -20,14 +23,29 @@
return value.toSerializableString();
}
+ // Parse the string associated with our visual property. Note that we
depend on the first
+ // part of the string being the class name that was registered with the
CustomGraphicsManager
@Override
public CyCustomGraphics<CustomGraphicLayer>
parseSerializableString(String value) {
+ // This is hokey, but we've got no other way to get our hands
on the
+ // CustomGraphicsManager since the DVisualLexicon is created
statically
+ CustomGraphicsManagerImpl cgMgr =
CustomGraphicsManagerImpl.getInstance();
// Return dummy if something is assigned. This should be
replaced after loading session.
+ // System.out.println("CustomGraphicsVisualProperty: value =
"+value);
if(NullCustomGraphics.getNullObject().toString().equals(value)
|| value.contains("NullCustomGraphics")) {
+ // System.out.println("CustomGraphicsVisualProperty:
returning NullCustomGraphics");
return NullCustomGraphics.getNullObject();
} else {
final String[] parts = value.split(",");
- return new
DummyCustomGraphics(Long.parseLong(parts[1]), parts[2]);
+ // System.out.println("Getting factory for "+parts[0]);
+ CyCustomGraphicsFactory factory =
cgMgr.getCustomGraphicsFactory(parts[0]);
+ if (factory == null) {
+ // System.out.println("No factory for
"+parts[0]);
+ return NullCustomGraphics.getNullObject();
+ }
+
+ // System.out.println("Creating new "+parts[0]);
+ return factory.parseSerializableString(value);
}
}
}
--
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.