Author: kono
Date: 2010-10-08 13:59:15 -0700 (Fri, 08 Oct 2010)
New Revision: 22195

Modified:
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
   
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
Log:
Bug ID 0002384: "Cannot remove custom graphics from manager even if it is not 
used in current session" had been fixed.  When user apply visual style, 
VisualMappingManager always checks custom graphics usage.

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
        2010-10-08 19:20:53 UTC (rev 22194)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualMappingManager.java
        2010-10-08 20:59:15 UTC (rev 22195)
@@ -41,8 +41,10 @@
 import giny.view.NodeView;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import cytoscape.CyEdge;
 import cytoscape.CyNetwork;
@@ -50,12 +52,24 @@
 import cytoscape.Cytoscape;
 import cytoscape.CytoscapeInit;
 import cytoscape.data.CyAttributes;
+import cytoscape.data.CyAttributesUtils;
+import cytoscape.data.attr.CountedIterator;
 import cytoscape.data.attr.MultiHashMapDefinition;
 import cytoscape.logger.CyLogger;
 import cytoscape.view.CyNetworkView;
+import cytoscape.visual.calculators.AbstractCalculator;
+import cytoscape.visual.calculators.Calculator;
+import cytoscape.visual.calculators.GenericNodeCustomGraphicCalculator;
 import cytoscape.visual.customgraphic.CustomGraphicsManager;
+import cytoscape.visual.customgraphic.CyCustomGraphics;
+import cytoscape.visual.mappings.ContinuousMapping;
+import cytoscape.visual.mappings.DiscreteMapping;
+import cytoscape.visual.mappings.ObjectMapping;
+import cytoscape.visual.mappings.PassThroughMapping;
+import cytoscape.visual.mappings.RangeValueCalculator;
 import cytoscape.visual.mappings.RangeValueCalculatorFactory;
 import cytoscape.visual.mappings.RangeValueCalculatorFactoryImpl;
+import cytoscape.visual.mappings.continuous.ContinuousMappingPoint;
 import cytoscape.visual.mappings.rangecalculators.ColorRangeValueCalculator;
 import 
cytoscape.visual.mappings.rangecalculators.CustomGraphicsRangeValueCalculator;
 import cytoscape.visual.mappings.rangecalculators.DoubleRangeValueCalculator;
@@ -281,8 +295,72 @@
                                        network, bypassedVPs);
                        myNodeApp.applyAppearance(nodeView, 
activeVS.getDependency());
                }
+               
+               checkCustomGraphicsInUse();
        }
+       
+       /**
+        * Reset status of used Custom Graphics
+        */
+       private void checkCustomGraphicsInUse() {
 
+               // Set everything unused.
+               final Collection<CyCustomGraphics> allCG = manager.getAll();
+               for(CyCustomGraphics cg: allCG)
+                       manager.setUsedInCurrentSession(cg, false);
+               
+               final NodeAppearanceCalculator nac = 
activeVS.getNodeAppearanceCalculator();
+               final VisualPropertyType[] allCustomGraphicsPropType = 
VisualPropertyType.getAllCustomGraphicsType();
+               for(VisualPropertyType cgType: allCustomGraphicsPropType) {
+                       // First, check default mapping values.
+                       final Object value = 
nac.getDefaultAppearance().get(cgType);
+                       if(value instanceof CyCustomGraphics) {
+                               
manager.setUsedInCurrentSession((CyCustomGraphics) value, true);
+                       }
+                       
+                       // Next, check mapping values.
+                       final Calculator cgCalc = nac.getCalculator(cgType);
+                       if(cgCalc == null)
+                               continue;
+                       
+                       final ObjectMapping cgMapping = cgCalc.getMapping(0);
+                       if(cgMapping == null)
+                               continue;
+                       
+                       if(cgMapping instanceof DiscreteMapping) {
+                               final Map allMapping = ((DiscreteMapping) 
cgMapping).getAll();
+                               Collection cgSet = allMapping.values();
+                               for(Object cg: cgSet)
+                                       
manager.setUsedInCurrentSession((CyCustomGraphics) cg, true);
+                       } else if(cgMapping instanceof ContinuousMapping) {
+                               final List<ContinuousMappingPoint> points = 
((ContinuousMapping) cgMapping).getAllPoints();
+                               for(ContinuousMappingPoint point: points) {
+                                       
manager.setUsedInCurrentSession((CyCustomGraphics) point.getRange().equalValue, 
true);
+                                       
manager.setUsedInCurrentSession((CyCustomGraphics) 
point.getRange().greaterValue, true);
+                                       
manager.setUsedInCurrentSession((CyCustomGraphics) 
point.getRange().lesserValue, true);
+                               }
+                       } else if(cgMapping instanceof PassThroughMapping) {
+                               final RangeValueCalculator<?> 
rangeValueCalculator = ((PassThroughMapping) 
cgMapping).getRangeValueCalculator();
+                               if(rangeValueCalculator == null)
+                                       return;
+                               
+                               final CyAttributes nodeAttr = 
Cytoscape.getNodeAttributes();
+                               final String attrName = 
cgMapping.getControllingAttributeName();
+                               CountedIterator keys = 
nodeAttr.getMultiHashMap().getObjectKeys(attrName);
+                               while(keys.hasNext()) {
+                                       Object key = keys.next();
+                                       String attrValue = 
nodeAttr.getStringAttribute(key.toString(), attrName);
+                                       Object cg = 
rangeValueCalculator.getRange(attrValue);
+                                       if(cg instanceof CyCustomGraphics) {
+                                               
manager.setUsedInCurrentSession((CyCustomGraphics) cg, true);
+                                       }
+                               }
+                               CyAttributesUtils.getAttributes(attrName, 
Cytoscape.getNodeAttributes());
+                       }
+                       
+               }
+       }
+
        /**
         * Recalculates and reapplies all of the edge appearances. The visual
         * attributes are calculated by delegating to the 
EdgeAppearanceCalculator

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
  2010-10-08 19:20:53 UTC (rev 22194)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/VisualPropertyType.java
  2010-10-08 20:59:15 UTC (rev 22195)
@@ -704,6 +704,10 @@
                return CUSTOM_GRAPHICS_PROPS[index];
        }
        
+       public static VisualPropertyType[] getAllCustomGraphicsType() {
+               return CUSTOM_GRAPHICS_PROPS;
+       }
+       
        public static VisualPropertyType getCustomGraphicsPositionType(int 
index) {
                return CUSTOM_GRAPHICS_POSITION_PROPS[index];
        }

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
 2010-10-08 19:20:53 UTC (rev 22194)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/CustomGraphicsManager.java
 2010-10-08 20:59:15 UTC (rev 22195)
@@ -26,7 +26,6 @@
 
 import cytoscape.Cytoscape;
 import cytoscape.CytoscapeInit;
-import cytoscape.actions.ShowCustomGraphicsManagerAction;
 import cytoscape.logger.CyLogger;
 import cytoscape.task.ui.JTaskConfig;
 import cytoscape.task.util.TaskManager;
@@ -361,7 +360,7 @@
                if(graphics == null)
                        throw new NullPointerException("CyCustomGraphics cannot 
be null.");
                if(this.isUsedCustomGraphics.containsKey(graphics) ==false)
-                       throw new IllegalArgumentException("No such 
CyCustomGraphics: " + graphics.getDisplayName());
+                       return false;
 
                return isUsedCustomGraphics.get(graphics);
        }
@@ -370,9 +369,11 @@
                if(isUsed == null || graphics == null)
                        throw new NullPointerException("Parameters cannot be 
null.");
                
-               if(this.isUsedCustomGraphics.containsKey(graphics) == false)
-                       throw new IllegalArgumentException("No such custom 
graphics object: " + graphics.getDisplayName());
-               
+               if(this.isUsedCustomGraphics.containsKey(graphics) == false){
+                       // Just ignore.
+                       return;
+               }
+
                this.isUsedCustomGraphics.put(graphics, isUsed);
        }
 }

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
        2010-10-08 19:20:53 UTC (rev 22194)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/customgraphic/ui/CustomGraphicsManagerDialog.java
        2010-10-08 20:59:15 UTC (rev 22195)
@@ -9,6 +9,7 @@
 import javax.imageio.ImageIO;
 import javax.swing.DefaultListModel;
 import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
 
 import cytoscape.Cytoscape;
 import cytoscape.render.stateful.CustomGraphic;
@@ -204,8 +205,13 @@
                final Object[] toBeRemoved = browser.getSelectedValues();
                for(Object g: toBeRemoved) {
                        final CyCustomGraphics cg = (CyCustomGraphics) g;
-                       browser.removeCustomGraphics(cg);
-                       manager.removeGraphics(cg.getIdentifier());
+                       
if(!Cytoscape.getVisualMappingManager().getCustomGraphicsManager().isUsedInCurrentSession(cg))
 {
+                               browser.removeCustomGraphics(cg);
+                               manager.removeGraphics(cg.getIdentifier());
+                       } else {
+                               JOptionPane.showMessageDialog(this, 
cg.getDisplayName() + " is used in current session and cannot remove it.", 
+                                               "Custom Graphics is in Use!", 
JOptionPane.ERROR_MESSAGE);
+                       }
                }
        }
 

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
 2010-10-08 19:20:53 UTC (rev 22194)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/mappings/PassThroughMapping.java
 2010-10-08 20:59:15 UTC (rev 22195)
@@ -172,6 +172,10 @@
                        return rangeValueCalculator.getRange(attrValue);
                return null;
        }
+       
+       public RangeValueCalculator<?> getRangeValueCalculator() {
+               return this.rangeValueCalculator;
+       }
 
        /**
         * Customize this object by applying mapping defintions described by the

Modified: 
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
===================================================================
--- 
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
   2010-10-08 19:20:53 UTC (rev 22194)
+++ 
cytoscape/trunk/application/src/main/java/cytoscape/visual/properties/NodeCustomGraphicsProp.java
   2010-10-08 20:59:15 UTC (rev 22195)
@@ -182,6 +182,7 @@
                if (customGraphics == null
                                || customGraphics instanceof CyCustomGraphics 
== false
                                || customGraphics instanceof 
NullCustomGraphics) {
+                       
                        currentMap.remove(dv);
                        return;
                }
@@ -218,7 +219,7 @@
                this.currentMap.put(dv, targets);
                
                // Flag this as used Custom Graphics
-               
Cytoscape.getVisualMappingManager().getCustomGraphicsManager().setUsedInCurrentSession(graphics,
 true);
+               
//Cytoscape.getVisualMappingManager().getCustomGraphicsManager().setUsedInCurrentSession(graphics,
 true);
        }
 
        private CustomGraphic syncSize(CyCustomGraphics graphics,

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