From: <Jan...@us...> - 2007-02-14 10:31:03
|
Revision: 532 http://svn.sourceforge.net/magicmap/?rev=532&view=rev Author: Jan_fride Date: 2007-02-14 02:30:38 -0800 (Wed, 14 Feb 2007) Log Message: ----------- Metric Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/algorithms/NodeMetricManager.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/algorithms/NodeMetricManager.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/algorithms/NodeMetricManager.java 2007-02-12 18:17:29 UTC (rev 531) +++ trunk/magicmapclient/src/net/sf/magicmap/client/algorithms/NodeMetricManager.java 2007-02-14 10:30:38 UTC (rev 532) @@ -1,6 +1,9 @@ package net.sf.magicmap.client.algorithms; +import java.util.HashMap; +import java.util.Map; + import net.sf.magicmap.client.model.node.Node; import org.apache.commons.collections.map.MultiKeyMap; @@ -17,7 +20,8 @@ private NodeModelMetric defaultMetric; private final MultiKeyMap metricMap = new MultiKeyMap(); - + private final Map<Class<? extends Node>,NodeModelMetric> genericMetrciMap = new HashMap<Class<? extends Node>, NodeModelMetric>(); + public NodeMetricManager(NodeModelMetric defaultMetric) { this.defaultMetric = defaultMetric; } @@ -29,13 +33,33 @@ * @param clazz2 der 2. Knotentyp * @param metric die Metric die auf die beiden Knotentypen angewant werden soll. */ - public final void addMetric(Class clazz1, Class clazz2, NodeModelMetric metric){ + public final void addMetric(Class<? extends Node> clazz1, Class<? extends Node> clazz2, NodeModelMetric metric){ if (metricMap.containsKey(clazz1, clazz2)) { throw new IllegalArgumentException("Mapping for " + clazz1 + "," + clazz2 + " exists"); } metricMap.put(clazz1, clazz2, metric); } + /** + * F\xFCgt eine Metric zu einem Tupel von Knoten hinzu. Diese Metric ist generischer als eine + * welche zwei Knotentypen ben\xF6tigt. Daher werden zuerst die speziellen mit zwei Knotentypen + * befragt. + * + * @param clazz1 der 1. Knotentyp + * @param metric die Metric die auf die beiden Knotentypen angewant werden soll. + */ + public final void addMetric(Class<? extends Node> clazz1, NodeModelMetric metric){ + if (genericMetrciMap.containsKey(clazz1)) { + throw new IllegalArgumentException("Mapping for " + clazz1 + " exists"); + } + genericMetrciMap.put(clazz1, metric); + } + + /** + * entfernt eine Metrci + * @param clazz1 + * @param clazz2 + */ public final void removeMetric(Class clazz1, Class clazz2){ metricMap.remove(clazz1, clazz2); } @@ -45,8 +69,12 @@ */ public double metric(Node node1, Node node2){ NodeModelMetric delegate = (NodeModelMetric) metricMap.get(node1.getClass(), node2.getClass()); - if (delegate == null) return defaultMetric.metric(node1, node2); - return delegate.metric(node1, node2); + + if (delegate != null) return delegate.metric(node1, node2); + delegate = genericMetrciMap.get(node1.getClass()); + + if (delegate != null)return delegate.metric(node1, node2); + return defaultMetric.metric(node1, node2); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |