You can subscribe to this list here.
2005 |
Jan
|
Feb
(14) |
Mar
|
Apr
(4) |
May
(57) |
Jun
(14) |
Jul
(15) |
Aug
(5) |
Sep
(29) |
Oct
(13) |
Nov
(44) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(14) |
Feb
(78) |
Mar
(55) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
(12) |
Dec
(9) |
2007 |
Jan
(21) |
Feb
(67) |
Mar
(39) |
Apr
(28) |
May
(7) |
Jun
|
Jul
(6) |
Aug
(2) |
Sep
(1) |
Oct
(18) |
Nov
(8) |
Dec
(11) |
2008 |
Jan
(16) |
Feb
(12) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <jan...@us...> - 2008-01-01 23:15:17
|
Revision: 708 http://magicmap.svn.sourceforge.net/magicmap/?rev=708&view=rev Author: jan_fride Date: 2008-01-01 15:14:33 -0800 (Tue, 01 Jan 2008) Log Message: ----------- Infoobject branch.... Modified Paths: -------------- branches/info/magicmapclient/build.xml branches/info/magicmapclient/magicmapclient.iml branches/info/magicmapclient/src/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java branches/info/magicmapclient/src/edu/uci/ics/jung/visualization/VisualizationViewer.java branches/info/magicmapclient/src/net/sf/magicmap/client/gui/utils/GUIUtils.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/INode.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/Node.java Added Paths: ----------- branches/info/magicmapclient/ branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java branches/info/magicmapclient/src/net/sf/magicmap/core/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/IGraphEdge.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/IGraphElement.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/IGraphNode.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/INodeGraph.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/impl/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/impl/BaseGraphElement.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/impl/BaseGraphNode.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/impl/BaseNodeGraph.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/graph/jung/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/location/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/location/ForwardingNodePlacer.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/InterceptableNodeModel.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/KeyGenerator.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/NodeFilter.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/NodeIndex.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/NodeModelInterceptor.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/SearchableNodeIndex.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/SearchableNodeModel.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/impl/ branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/impl/BaseNodeIndex.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/impl/MacNodeKeyGenerator.java branches/info/magicmapclient/src/net/sf/magicmap/core/model/node/impl/NodeIndexFactory.java Removed Paths: ------------- branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java Copied: branches/info/magicmapclient (from rev 704, trunk/magicmapclient) Modified: branches/info/magicmapclient/build.xml =================================================================== --- trunk/magicmapclient/build.xml 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/build.xml 2008-01-01 23:14:33 UTC (rev 708) @@ -8,7 +8,7 @@ <property name="main.class" value="net.sf.magicmap.client.core.MagicMapApplication" /> <!-- Setting for maven path--> - <property name="maven.home" value="D:\_development\_Tools\maven-2.0.5"/> + <property name="maven.home" value="/usr/local/maven"/> @@ -156,7 +156,7 @@ <!-- Setting for maven path must be checked.--> <target name="maven-install"> - <exec executable="${maven.home}/bin/mvn.bat"> + <exec executable="${maven.home}/bin/mvn"> <arg value="install:install-file"/> <arg value="-Dfile=magicmap.jar"/> <arg value="-DgroupId=net.sf.magicmap"/> Modified: branches/info/magicmapclient/magicmapclient.iml =================================================================== --- trunk/magicmapclient/magicmapclient.iml 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/magicmapclient.iml 2008-01-01 23:14:33 UTC (rev 708) @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<module version="4" relativePaths="false" type="JAVA_MODULE"> - <component name="ModuleRootManager" /> - <component name="NewModuleRootManager" inherit-compiler-output="false"> +<module relativePaths="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> <output url="file://$MODULE_DIR$/build" /> <exclude-output /> <output-test url="file://$MODULE_DIR$/build-test" /> @@ -9,35 +8,34 @@ <sourceFolder url="file://$MODULE_DIR$/res" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src-gen" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" /> - <excludeFolder url="file://$MODULE_DIR$/build" /> - <excludeFolder url="file://$MODULE_DIR$/build-test" /> - <excludeFolder url="file://$MODULE_DIR$/target" /> + <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="false" /> </content> - <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://X:/maven/junit/junit/3.8.1/junit-3.8.1.jar!/" /> + <root url="jar://$MODULE_DIR$/../magicmapserver/dist/magicmap-server.jar!/" /> </CLASSES> <JAVADOC /> - <SOURCES /> + <SOURCES> + <root url="file://$MODULE_DIR$/../magicmapserver/src" /> + </SOURCES> </library> </orderEntry> <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/dom4j-1.6.1.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/commons-httpclient-3.0-rc3.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> </library> </orderEntry> + <orderEntry type="inheritedJdk" /> <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/forms-1.0.5.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/colt.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -55,7 +53,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/foxtrot.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/concurrent.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -64,7 +62,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/jaxrpc.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/xercesImpl.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -73,7 +71,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/ostermillerutils_1_05_00.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/xml-apis.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -82,7 +80,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/commons-codec-1.3.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/xmlParserAPIs.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -91,7 +89,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/concurrent.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/RelativeLayout.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -100,7 +98,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/colt.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/forms-1.0.5.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -109,7 +107,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/nekohtml.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/activation.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -118,7 +116,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/commons-logging.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/mail.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -127,7 +125,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/jung-1.5.2.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/commons-discovery.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -136,7 +134,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/saaj.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/commons-logging.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -145,7 +143,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/xmlParserAPIs.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/jaxrpc.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -154,7 +152,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/derby.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/saaj.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -163,7 +161,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/RelativeLayout.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/wsdl4j.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -172,7 +170,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/xercesImpl.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/axis.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -181,7 +179,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/xml-apis.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/jung-1.5.2.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -190,7 +188,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/mail.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/derby.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -199,7 +197,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/jaxen-1.1-beta-9.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/jpox-20041204.032009.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -208,7 +206,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/commons-httpclient-3.0-rc3.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/log4j-1.2.8.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -217,7 +215,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/jpox-20041204.032009.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/ostermillerutils_1_05_00.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -226,7 +224,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/looks-1.2.2.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/dom4j-1.6.1.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -235,7 +233,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/log4j-1.2.8.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/commons-codec-1.3.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -244,7 +242,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/axis.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/jaxen-1.1-beta-9.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -253,7 +251,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/activation.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/foxtrot.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -262,7 +260,7 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/wsdl4j.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/nekohtml.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> @@ -271,15 +269,6 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib/commons-discovery.jar!/" /> - </CLASSES> - <JAVADOC /> - <SOURCES /> - </library> - </orderEntry> - <orderEntry type="module-library"> - <library> - <CLASSES> <root url="jar://$MODULE_DIR$/lib-dev/junit.jar!/" /> </CLASSES> <JAVADOC /> @@ -289,13 +278,12 @@ <orderEntry type="module-library"> <library> <CLASSES> - <root url="jar://$MODULE_DIR$/lib-dev/axis-ant.jar!/" /> + <root url="jar://$MODULE_DIR$/lib/looks-2.1.4.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES /> </library> </orderEntry> - <orderEntry type="module" module-name="magicmapserver" /> <orderEntryProperties /> </component> </module> Modified: branches/info/magicmapclient/src/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java =================================================================== --- trunk/magicmapclient/src/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java 2008-01-01 23:14:33 UTC (rev 708) @@ -30,30 +30,13 @@ package com.jgoodies.uif_lite.panel; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.GradientPaint; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Paint; +import com.jgoodies.looks.LookUtils; +import net.sf.magicmap.client.gui.utils.ShadowBorder; -import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JToolBar; -import javax.swing.SwingConstants; -import javax.swing.UIManager; +import javax.swing.*; import javax.swing.border.AbstractBorder; +import java.awt.*; -import net.sf.magicmap.client.gui.utils.ShadowBorder; - -import com.jgoodies.plaf.LookUtils; - /** * A <code>JPanel</code> subclass that has a drop shadow border and * that provides a header with icon, title and tool bar.<p> Modified: branches/info/magicmapclient/src/edu/uci/ics/jung/visualization/VisualizationViewer.java =================================================================== --- trunk/magicmapclient/src/edu/uci/ics/jung/visualization/VisualizationViewer.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/edu/uci/ics/jung/visualization/VisualizationViewer.java 2008-01-01 23:14:33 UTC (rev 708) @@ -24,7 +24,6 @@ import java.awt.geom.AffineTransform; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import javax.swing.JPanel; Modified: branches/info/magicmapclient/src/net/sf/magicmap/client/gui/utils/GUIUtils.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/gui/utils/GUIUtils.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/gui/utils/GUIUtils.java 2008-01-01 23:14:33 UTC (rev 708) @@ -5,32 +5,23 @@ package net.sf.magicmap.client.gui.utils; -import java.awt.Dimension; -import java.awt.Window; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.MissingResourceException; -import java.util.ResourceBundle; +import com.jgoodies.looks.Options; +import com.jgoodies.looks.plastic.Plastic3DLookAndFeel; +import com.jgoodies.looks.plastic.PlasticLookAndFeel; +import com.jgoodies.looks.plastic.theme.ExperienceBlue; +import net.sf.magicmap.client.gui.MainGUI; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.plaf.metal.MetalLookAndFeel; +import java.awt.*; +import java.util.*; -import net.sf.magicmap.client.gui.MainGUI; +import apple.laf.AquaLookAndFeel; -import com.jgoodies.plaf.FontSizeHints; -import com.jgoodies.plaf.Options; -import com.jgoodies.plaf.plastic.Plastic3DLookAndFeel; -import com.jgoodies.plaf.plastic.theme.ExperienceBlue; - /** * @author msc - * + * */ public class GUIUtils { @@ -39,22 +30,33 @@ private static Map<String, ResourceBundle> bundles = null; public static void setPlasticLookAndFeel(){ + try { - UIManager.setLookAndFeel(new Plastic3DLookAndFeel()); + if (!isOsX()) { + UIManager.setLookAndFeel(new Plastic3DLookAndFeel()); + + } } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } - UIManager.put("Application.useSystemFontSettings", Boolean.TRUE); - UIManager.put(Options.USE_SYSTEM_FONTS_APP_KEY, Boolean.TRUE); - UIManager.put(com.jgoodies.plaf.Options.DEFAULT_ICON_SIZE_KEY, new Dimension(18, 18)); - Options.setGlobalFontSizeHints(FontSizeHints.MIXED); - // PlasticLookAndFeel.setFontSizeHints(FontSizeHints.SYSTEM); - MetalLookAndFeel.setCurrentTheme(new ExperienceBlue()); - Options.setGlobalFontSizeHints(FontSizeHints.MIXED); + if (!isOsX()) { + UIManager.put("Application.useSystemFontSettings", Boolean.TRUE); + UIManager.put(Options.USE_SYSTEM_FONTS_APP_KEY, Boolean.TRUE); + //UIManager.put(com.jgoodies.plaf.Options.DEFAULT_ICON_SIZE_KEY, new Dimension(18, 18)); + // Options.setGlobalFontSizeHints(FontSizeHints.MIXED); + // PlasticLookAndFeel.setFontSizeHints(FontSizeHints.SYSTEM); + MetalLookAndFeel.setCurrentTheme(new ExperienceBlue()); + //Options.setGlobalFontSizeHints(FontSizeHints.MIXED); + } } + private static boolean isOsX() { + String lcOSName = System.getProperty("os.name").toLowerCase(); + return lcOSName.startsWith("mac os x"); + } + public static void locateOnScreen(Window frame){ Dimension paneSize = frame.getSize(); Dimension screenSize = frame.getToolkit().getScreenSize(); @@ -155,14 +157,14 @@ return JOptionPane.showOptionDialog(MainGUI.getInstance().getMainFrame(), GUIUtils.i18n("serverresponse") + "\n" + message, GUIUtils.i18n("authentificationerror"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, null, new String[]{GUIUtils.i18n("retry"), GUIUtils.i18n("no")}, GUIUtils - .i18n("retry")) == JOptionPane.YES_OPTION; + .i18n("retry")) == JOptionPane.YES_OPTION; } public static boolean showConnectionError(){ return JOptionPane.showOptionDialog(MainGUI.getInstance().getMainFrame(), GUIUtils .i18n("connectionsproblemsreconnect"), GUIUtils.i18n("connectionproblems"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, null, new String[]{GUIUtils.i18n("yes"), - GUIUtils.i18n("no")}, GUIUtils.i18n("yes")) == JOptionPane.YES_OPTION; + GUIUtils.i18n("no")}, GUIUtils.i18n("yes")) == JOptionPane.YES_OPTION; } public static void showErrorDialog(String message){ Deleted: branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2008-01-01 23:14:33 UTC (rev 708) @@ -1,128 +0,0 @@ - -package net.sf.magicmap.client.model.location; - -import java.util.HashMap; - -import net.sf.magicmap.client.algorithms.NodeMetricManager; -import net.sf.magicmap.client.model.node.IMagicEdge; -import net.sf.magicmap.client.model.node.Node; - -/** - * Berechnet die Orte von Knoten. Um einem Model ein INodePlacer hinzuzfügen - * muss man nur - * </ul> - * <li>das Model dem Konstruktor übergeben (wenn der OPlacer dies unterstüzt) oder</li> - * <li>Den Nodeplacer zusätzlich das ModelListener Interface implementieren lassen und - * sich beim Model registrieren.</li> - * </ul> - * @author Jan Friderici - * - */ -public interface INodePlacer { - - /** - * Fügt einen neuen Knoten ein. - * - * @param node der neue Knoten. - */ - public void insertNode(Node node); - - /** - * Löscht einen Knoten. - * @param node - */ - public void deleteNode(Node node); - - /** - * Legt eine gerichtete Kante zwischen den beiden Knoten an. - * - * @param n1 die Quelle der Kante - * @param n2 das Ziel der Kante - * @return - */ - public IMagicEdge addEdge(Node n1, Node n2); - - /** - * Löscht eine gerichtete Kante. (also nur eine Richtung). - * @param n1 - * @param n2 - */ - public void removeEdge(Node n1, Node n2); - - /** - * Die Größe des Layoutalgorithmus sollte der der Karte - * entsprechen. - * - * @param width die Breite (der Karte). - * @param height die Höhe (der Karte). - */ - public void setSize(int width, int height); - - /** - * Starts the algorithm. - * - */ - public abstract void startNodePlacer(); - - /** - * Stops the algorithm - * - */ - public abstract void stopNodePlacer(); - - /** - * - * @param pause - */ - public abstract void pauseNodePlacer(boolean pause); - - /** - * - * @return - */ - public boolean isPaused(); - - /** - * Adds a handler for node updates. - * @param handler - */ - public void addNodeUpdateHandler(NodeUpdateHandler handler); - - public NodeMetricManager getMetricManager(); - - public void updateNode(Node node, int type, Object data); - static final class NodeHandlerFactory { - - public final HashMap<Integer, NodeUpdateHandler> handlerMap; - - public NodeHandlerFactory() { - this.handlerMap = new HashMap<Integer, NodeUpdateHandler>(); - } - - public void addNodeUpdateHandler(NodeUpdateHandler handler){ - this.handlerMap.put(handler.getType(), handler); - } - - /** - * - * @param node - * @param type - * @param data - * @param placer - * @return - */ - public boolean handleNodeUpdated(Node node, int type, Object data, INodePlacer placer){ - NodeUpdateHandler handler = getHandler(type); - if (handler != null) { - handler.handleNodeUpdated(node, type, data, placer); - return true; - } - return false; - } - - public NodeUpdateHandler getHandler(int type){ - return this.handlerMap.get(type); - } - } - public void clear();; -} Copied: branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java (from rev 706, trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java) =================================================================== --- branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java (rev 0) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2008-01-01 23:14:33 UTC (rev 708) @@ -0,0 +1,155 @@ + +package net.sf.magicmap.client.model.location; + +import java.util.HashMap; + +import net.sf.magicmap.client.algorithms.NodeMetricManager; +import net.sf.magicmap.client.model.node.IMagicEdge; +import net.sf.magicmap.client.model.node.Node; + +/** + * Berechnet die Orte von Knoten. Um einem Model ein INodePlacer hinzuzfügen + * muss man nur + * </ul> + * <li>das Model dem Konstruktor übergeben (wenn der OPlacer dies unterstüzt) oder</li> + * <li>Den Nodeplacer zusätzlich das ModelListener Interface implementieren lassen und + * sich beim Model registrieren.</li> + * </ul> + * @author Jan Friderici + * + */ +public interface INodePlacer extends Iterable<IMagicEdge>{ + + /** + * Fügt einen neuen Knoten ein. + * + * @param node der neue Knoten. + */ + void insertNode(Node node); + + /** + * Löscht einen Knoten. + * @param node + */ + void deleteNode(Node node); + + /** + * Legt eine gerichtete Kante zwischen den beiden Knoten an. + * + * @param n1 die Quelle der Kante + * @param n2 das Ziel der Kante + * @return + */ + IMagicEdge addEdge(Node n1, Node n2); + + /** + * <p>Find the ege connecting the two given nodes.</p> + * @param n1 first node + * @param n2 secnd node + * @return the connecting edge or null. + */ + IMagicEdge getEdge(Node n1, Node n2); + + /** + * Löscht eine gerichtete Kante. (also nur eine Richtung). + * @param n1 first node + * @param n2 second node + */ + void removeEdge(Node n1, Node n2); + + /** + * Die Größe des Layoutalgorithmus sollte der der Karte + * entsprechen. + * + * @param width die Breite (der Karte). + * @param height die Höhe (der Karte). + */ + void setSize(int width, int height); + + /** + * Starts the algorithm. + * + */ + void startNodePlacer(); + + /** + * Stops the algorithm + * + */ + void stopNodePlacer(); + + /** + * + * @param pause + */ + void pauseNodePlacer(boolean pause); + + /** + * + * @return + */ + boolean isPaused(); + + /** + * Adds a handler for node updates. + * @param handler + */ + void addNodeUpdateHandler(NodeUpdateHandler handler); + + /** + * + * @return the metric manager for this layout. + */ + NodeMetricManager getMetricManager(); + + /** + * + * @param node + * @param type + * @param data + */ + void updateNode(Node node, int type, Object data); + + + /** + * + */ + static final class NodeHandlerFactory { + + public final HashMap<Integer, NodeUpdateHandler> handlerMap; + + public NodeHandlerFactory() { + this.handlerMap = new HashMap<Integer, NodeUpdateHandler>(); + } + + public void addNodeUpdateHandler(NodeUpdateHandler handler){ + this.handlerMap.put(handler.getType(), handler); + } + + /** + * + * @param node + * @param type + * @param data + * @param placer + * @return + */ + public boolean handleNodeUpdated(Node node, int type, Object data, INodePlacer placer){ + NodeUpdateHandler handler = getHandler(type); + if (handler != null) { + handler.handleNodeUpdated(node, type, data, placer); + return true; + } + return false; + } + + public NodeUpdateHandler getHandler(int type){ + return this.handlerMap.get(type); + } + } + + /** + * <p>Remove all nodes and edges...</p> + */ + void clear(); +} Deleted: branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2008-01-01 23:14:33 UTC (rev 708) @@ -1,402 +0,0 @@ - -package net.sf.magicmap.client.model.location.jung; - -import java.awt.Dimension; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import net.sf.magicmap.client.algorithms.MagicMetric; -import net.sf.magicmap.client.algorithms.NodeMetricManager; -import net.sf.magicmap.client.algorithms.NodeModelMetric; -import net.sf.magicmap.client.controller.Controller; -import net.sf.magicmap.client.model.location.INodePlacer; -import net.sf.magicmap.client.model.location.NodeUpdateHandler; -import net.sf.magicmap.client.model.location.jung.handler.AccessPointHiddenStateHandler; -import net.sf.magicmap.client.model.location.jung.handler.CalculationStateHandler; -import net.sf.magicmap.client.model.location.jung.handler.FixStateHandler; -import net.sf.magicmap.client.model.location.jung.handler.LabelChangeHandler; -import net.sf.magicmap.client.model.location.jung.handler.NotSeeAccessPointHandler; -import net.sf.magicmap.client.model.location.jung.handler.PositionUpdateHandler; -import net.sf.magicmap.client.model.location.jung.handler.SeeAccessPointHandler; -import net.sf.magicmap.client.model.node.ClientNode; -import net.sf.magicmap.client.model.node.IMagicEdge; -import net.sf.magicmap.client.model.node.LocationNode; -import net.sf.magicmap.client.model.node.MapNode; -import net.sf.magicmap.client.model.node.Node; -import net.sf.magicmap.client.model.node.NodeModelConstants; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.uci.ics.jung.graph.Edge; -import edu.uci.ics.jung.graph.Vertex; -import edu.uci.ics.jung.graph.decorators.StringLabeller; -import edu.uci.ics.jung.graph.impl.DirectedSparseGraph; -import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; -import edu.uci.ics.jung.utils.UserData; -import edu.uci.ics.jung.visualization.SpringLayout; - -/** - * Dieses Model benutzt die Layoutfunktionen von Jung und einige Angepasste - * Layoutalgorithmen um die Knotenposition zu berechnen. - * - * @author Jan - * - */ -public class JungNodePlacer extends DirectedSparseGraph implements INodePlacer, NodeModelConstants { - - /** - * Logger - */ - private static final Log log = LogFactory.getLog(JungNodePlacer.class); - - /** - * Used to find the Vertex representing a node. - */ - private final Map<Node, Vertex> nodeVertexMapping = new HashMap<Node, Vertex>(); - - /** - * - */ - private final SpringLayout layout; - - /** - * Calculates the layout in a background thread. - */ - private final LayoutWorker worker; - - private boolean workerPaused; - - private boolean workerRunning; - - /** - * Werden f\xFCr die Handler ben\xF6tigt - */ - private HashMap<ClientNode, HashSet<LocationNode>> clientLocationMap; - - /** - * Werden f\xFCr die Handler ben\xF6tigt - */ - private HashMap<LocationNode, HashSet<LocationNode>> locationLocationMap; - - /** - * Werden f\xFCr die Handler ben\xF6tigt - */ - private StringLabeller labeller; - - /** - * A Factory for the NodeUpdateHandler. - * @see NodeUpdateHandler - */ - private final NodeHandlerFactory nodeHandler = new NodeHandlerFactory(); - - private final NodeMetricManager metricManager; - - private final Object edgeLock = new Object(); - private final Object vertexLock = new Object(); - - public JungNodePlacer() { - this(new MagicMetric()); - } - - /** - * - * @return - */ - public NodeMetricManager getMetricManager(){ - return metricManager; - } - - /** - * - * @param settings - * @param metric - */ - public JungNodePlacer(NodeModelMetric metric) { - super(); - this.metricManager = new NodeMetricManager(metric); - this.clientLocationMap = new HashMap<ClientNode, HashSet<LocationNode>>(); - this.locationLocationMap = new HashMap<LocationNode, HashSet<LocationNode>>(); - this.layout = new MagicLayout(this, metricManager); - this.worker = new LayoutWorker(this.layout, new Dimension(800, 600)); - this.workerRunning = false; - this.workerPaused = false; - - this.labeller = StringLabeller.getLabeller(this); - - initNodeHandler(); - } - - /** - * Initilisiert die Handler - * - */ - private void initNodeHandler(){ - addNodeUpdateHandler(new FixStateHandler(this.nodeVertexMapping, this.layout)); - addNodeUpdateHandler(new LabelChangeHandler(this.labeller, this.nodeVertexMapping)); - addNodeUpdateHandler(new PositionUpdateHandler(this.nodeVertexMapping, this.layout)); - addNodeUpdateHandler(new SeeAccessPointHandler(this.clientLocationMap, this.locationLocationMap)); - addNodeUpdateHandler(new NotSeeAccessPointHandler(this.clientLocationMap, this.locationLocationMap)); - addNodeUpdateHandler(new CalculationStateHandler(this.nodeVertexMapping, this.layout)); - addNodeUpdateHandler(new AccessPointHiddenStateHandler()); - } - - /** - * Den Hintergrundthread zum Berechnen der Positionen starten! ;-) - * - */ - private void start(){ - this.worker.init(); - this.workerRunning = true; - this.workerPaused = false; - } - - /** - * Sets the size of our layout. should be the same as the current map. - * @param width shoulde be the maps width. - * @param height - */ - public void setSize(int width, int height){ - this.layout.resize(new Dimension(width, height)); - } - - /** - * F\xFCgt einen neuen Knoten ein. - */ - public void insertNode(Node node){ - if (node.getClass().equals(MapNode.class)) return; - - Vertex v = addVertex(node); - if (v != null) { - if (node.isFix()) - this.layout.setFix(v); - else - this.layout.unsetFix(v); - } - - } - - public void deleteNode(Node node){ - removeVertex(node); - } - - public SpringLayout getLayout(){ - return this.layout; - } - - /** - * Reagiert auf ver\xE4nderungen in den Knoten oder im Model. - * Leitet die Anfragen an einen nodeHandler weiter. Wird vom NodeModel aufgerufen. - * - * @param node der neue oder ge\xE4nderte Knoten - * @param type der Typ des Events. (Enum nutzen)? - * @param data ---? - * @see NodeModelListener, INodeModel, NodeModel - */ - public void updateNode(Node node, int type, Object data){ - // first try if we have a handler for this event. - if (!this.nodeHandler.handleNodeUpdated(node, type, data, this)) { - if (type == NodeModelConstants.UPDATE_CLEAR) { - this.worker.suspend(); // stopGraph(); - // this.CALIBRATION_FACTOR_AP = 1.0; - // this.CALIBRATION_FACTOR_LC = 1.0; - this.clientLocationMap.clear(); - this.removeAllEdges(); - this.removeAllVertices(); - this.layout.update(); - this.nodeVertexMapping.clear(); - this.worker.unsuspend(); - } else if (type == NodeModelConstants.UPDATE_RESCAN) - this.layout.update(); - else - JungNodePlacer.log.debug("Event von typ: " + type + " ist unbekannt"); - } - } - - public Vertex findVertex(Node node){ - return this.nodeVertexMapping.get(node); - } - - /** - * Verwandelt Node in Vertex und fuegt diesen in den Graphen ein. Es wird - * keine Ruecksicht auf den Typ des Knotens genommen. Eventuelle implizite - * Kanten muss der Aufrufer erstellen. - * - * @param node - * @return - */ - private Vertex addVertex(Node node){ - if (findVertex(node) == null) { - - log.debug("Adding " + node.getDisplayName()); - - Vertex v = new DirectedSparseVertex(); - synchronized (vertexLock) { - this.worker.suspend(); - this.nodeVertexMapping.put(node, v); - v.addUserDatum(LayoutSettings.NODE_KEY, node, UserData.SHARED); - - addVertex(v); - - ((SpringLayout) this.worker.getGraphLayout()).update(); - if (node.getX() >= 0 && node.getY() >= 0) this.layout.forceMove(v, node.getX(), node.getY()); - this.worker.unsuspend(); - - } - log.debug("Added " + node.getDisplayName()); - return v; - } else { - System.err.print("Vertex exists:"); - return null; - } - - } - - /** - * - */ - public void startNodePlacer(){ - start(); - } - - /** - * - */ - public void stopNodePlacer(){ - this.worker.stop(); - - } - - /** - * - */ - public void pauseNodePlacer(boolean pause){ - if (pause && !isPaused()) { - this.worker.suspend(); - this.workerPaused = true; - } else if (!pause && isPaused()) { - this.worker.unsuspend(); - this.workerPaused = false; - - } - } - - public boolean isPaused(){ - return this.workerRunning && this.workerPaused; - } - - /** - * F\xFCgt eine gerichtete Kante von Knoten node1 zu node2 hinzu. - * - * Das Gewicht der Kante - * @param node1 - * @param node2 - * @return - */ - public IMagicEdge addEdge(Node node1, Node node2){ - if (node1 == node2) return null; - Vertex v = findVertex(node1); - Vertex w = findVertex(node2); - - return addEdge(v, w); - } - - /** - * F\xFCgt eine Jungkante hinzu. wird intern verwendet. - * - * @param v1 - * @param v2 - * @return - */ - private IMagicEdge addEdge(Vertex v1, Vertex v2){ - log.debug("Adding Edge : " + v1 + " -> " + v2); - if (v1 == v2) return null; - synchronized (edgeLock) { - Edge e = v1.findEdge(v2); - if (e != null) - return (IMagicEdge) e; - else { - JungEdge edge = new JungEdge(v1, v2); - this.worker.suspend(); // stopGraph(); - addEdge(edge); - this.layout.update(); - ((SpringLayout) this.worker.getGraphLayout()).update(); - this.worker.unsuspend(); // resumeGraph(); - - return edge; - } - - } - } - - /** - * L\xF6scht eine Kantew zwischen den beiden Knoten. - * @param node1 Quelle der Kante. - * @param node2 Ziel der Kante. - */ - public void removeEdge(Node node1, Node node2){ - Vertex v = findVertex(node1); - Vertex w = findVertex(node2); - if (v != null && w != null) { - this.worker.suspend(); - Set edges = getEdges(); - for (Object edge : edges) { - Edge e = (Edge) edge; - if (e.getIncidentVertices().contains(v) && e.getIncidentVertices().contains(w)) { - removeEdge(e); - break; - } - } - this.layout.update(); - this.worker.unsuspend(); // resumeGraph(); - } - } - - /** - * Entfernt Knoten aus dem Graph und eventuelle Kanten - * - * @param node - */ - private void removeVertex(Node node){ - Vertex v = findVertex(node); - if (v != null) { - this.worker.suspend(); - Set edges = getEdges(); - // Kein Iterator direkt auf die Sets des - // Graphen => Concurrent modification! - ArrayList list = new ArrayList(edges); - for (Object aList : list) { - Edge e = (Edge) aList; - if (e.getIncidentVertices().contains(v)) { - super.removeEdge(e); - } - } - nodeVertexMapping.remove(node); - this.labeller.removeLabel(node.getDisplayName()); - super.removeVertex(v); - this.layout.update(); - this.worker.unsuspend(); - } - } - - /** - * - * @param handler - */ - - public void addNodeUpdateHandler(NodeUpdateHandler handler){ - this.nodeHandler.addNodeUpdateHandler(handler); - - } - - public void clear(){ - stopNodePlacer(); - this.removeAllEdges(); - this.removeAllVertices(); - nodeVertexMapping.clear(); - } - -} Copied: branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java (from rev 706, trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java) =================================================================== --- branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java (rev 0) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2008-01-01 23:14:33 UTC (rev 708) @@ -0,0 +1,424 @@ + +package net.sf.magicmap.client.model.location.jung; + +import edu.uci.ics.jung.graph.Edge; +import edu.uci.ics.jung.graph.Vertex; +import edu.uci.ics.jung.graph.decorators.StringLabeller; +import edu.uci.ics.jung.graph.impl.DirectedSparseGraph; +import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; +import edu.uci.ics.jung.utils.UserData; +import edu.uci.ics.jung.visualization.SpringLayout; +import net.sf.magicmap.client.algorithms.MagicMetric; +import net.sf.magicmap.client.algorithms.NodeMetricManager; +import net.sf.magicmap.client.algorithms.NodeModelMetric; +import net.sf.magicmap.client.model.location.INodePlacer; +import net.sf.magicmap.client.model.location.NodeUpdateHandler; +import net.sf.magicmap.client.model.location.jung.handler.*; +import net.sf.magicmap.client.model.node.*; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.awt.*; +import java.util.*; + +/** + * Dieses Model benutzt die Layoutfunktionen von Jung und einige Angepasste + * Layoutalgorithmen um die Knotenposition zu berechnen. + * + * @author Jan Friderici + * + */ +public class JungNodePlacer extends DirectedSparseGraph implements INodePlacer, NodeModelConstants { + + /** + * Logger + */ + private static final Log log = LogFactory.getLog(JungNodePlacer.class); + + /** + * Used to find the Vertex representing a node. + */ + private final Map<Node, Vertex> nodeVertexMapping = new HashMap<Node, Vertex>(); + + /** + * + */ + private final SpringLayout layout; + + /** + * Calculates the layout in a background thread. + */ + private final LayoutWorker worker; + + private boolean workerPaused; + + private boolean workerRunning; + + /** + * Werden f\xFCr die Handler ben\xF6tigt + */ + private HashMap<ClientNode, HashSet<LocationNode>> clientLocationMap; + + /** + * Werden f\xFCr die Handler ben\xF6tigt + */ + private HashMap<LocationNode, HashSet<LocationNode>> locationLocationMap; + + /** + * Werden f\xFCr die Handler ben\xF6tigt + */ + private StringLabeller labeller; + + /** + * A Factory for the NodeUpdateHandler. + * @see NodeUpdateHandler + */ + private final NodeHandlerFactory nodeHandler = new NodeHandlerFactory(); + + private final NodeMetricManager metricManager; + + private final Object edgeLock = new Object(); + private final Object vertexLock = new Object(); + + private final Map<Edge, IMagicEdge> magicEdges = new HashMap<Edge, IMagicEdge>(); + + public JungNodePlacer() { + this(new MagicMetric()); + } + + /** + * + * @return + */ + public NodeMetricManager getMetricManager(){ + return metricManager; + } + + /** + * + * @param metric the metrics to use. + */ + public JungNodePlacer(NodeModelMetric metric) { + super(); + this.metricManager = new NodeMetricManager(metric); + this.clientLocationMap = new HashMap<ClientNode, HashSet<LocationNode>>(); + this.locationLocationMap = new HashMap<LocationNode, HashSet<LocationNode>>(); + this.layout = new MagicLayout(this, metricManager); + this.worker = new LayoutWorker(this.layout, new Dimension(800, 600)); + this.workerRunning = false; + this.workerPaused = false; + + this.labeller = StringLabeller.getLabeller(this); + + initNodeHandler(); + } + + /** + * Initilisiert die Handler + * + */ + private void initNodeHandler(){ + addNodeUpdateHandler(new FixStateHandler(this.nodeVertexMapping, this.layout)); + addNodeUpdateHandler(new LabelChangeHandler(this.labeller, this.nodeVertexMapping)); + addNodeUpdateHandler(new PositionUpdateHandler(this.nodeVertexMapping, this.layout)); + addNodeUpdateHandler(new SeeAccessPointHandler(this.clientLocationMap, this.locationLocationMap)); + addNodeUpdateHandler(new NotSeeAccessPointHandler(this.clientLocationMap, this.locationLocationMap)); + addNodeUpdateHandler(new CalculationStateHandler(this.nodeVertexMapping, this.layout)); + addNodeUpdateHandler(new AccessPointHiddenStateHandler()); + } + + /** + * Den Hintergrundthread zum Berechnen der Positionen starten! ;-) + * + */ + private void start(){ + this.worker.init(); + this.workerRunning = true; + this.workerPaused = false; + } + + /** + * Sets the size of our layout. should be the same as the current map. + * @param width shoulde be the maps width. + * @param height + */ + public void setSize(int width, int height){ + this.layout.resize(new Dimension(width, height)); + } + + /** + * F\xFCgt einen neuen Knoten ein. + */ + public void insertNode(Node node){ + if (node.getClass().equals(MapNode.class)) return; + + Vertex v = addVertex(node); + if (v != null) { + if (node.isFix()) + this.layout.setFix(v); + else + this.layout.unsetFix(v); + } + + } + + /** + * + * @param node + */ + public void deleteNode(Node node){ + removeVertex(node); + } + + /** + * + * @return + */ + public SpringLayout getLayout(){ + return this.layout; + } + + /** + * Reagiert auf ver\xE4nderungen in den Knoten oder im Model. + * Leitet die Anfragen an einen nodeHandler weiter. Wird vom NodeModel aufgerufen. + * + * @param node der neue oder ge\xE4nderte Knoten + * @param type der Typ des Events. (Enum nutzen)? + * @param data ---? + * @see net.sf.magicmap.client.interfaces.NodeModelListener , INodeModel, NodeModel + */ + public void updateNode(Node node, int type, Object data){ + // first try if we have a handler for this event. + if (!this.nodeHandler.handleNodeUpdated(node, type, data, this)) { + if (type == NodeModelConstants.UPDATE_CLEAR) { + this.worker.suspend(); // stopGraph(); + // this.CALIBRATION_FACTOR_AP = 1.0; + // this.CALIBRATION_FACTOR_LC = 1.0; + this.clientLocationMap.clear(); + this.removeAllEdges(); + this.removeAllVertices(); + this.layout.update(); + this.nodeVertexMapping.clear(); + this.worker.unsuspend(); + } else if (type == NodeModelConstants.UPDATE_RESCAN) + this.layout.update(); + else + JungNodePlacer.log.debug("Event von typ: " + type + " ist unbekannt"); + } + } + + /** + * + * @param node + * @return + */ + public Vertex findVertex(Node node){ + return this.nodeVertexMapping.get(node); + } + + /** + * Verwandelt Node in Vertex und fuegt diesen in den Graphen ein. Es wird + * keine Ruecksicht auf den Typ des Knotens genommen. Eventuelle implizite + * Kanten muss der Aufrufer erstellen. + * + * @param node + * @return + */ + private Vertex addVertex(Node node){ + if (findVertex(node) == null) { + + log.debug("Adding " + node.getDisplayName()); + + Vertex v = new DirectedSparseVertex(); + synchronized (vertexLock) { + this.worker.suspend(); + this.nodeVertexMapping.put(node, v); + v.addUserDatum(LayoutSettings.NODE_KEY, node, UserData.SHARED); + + addVertex(v); + + ((SpringLayout) this.worker.getGraphLayout()).update(); + if (node.getX() >= 0 && node.getY() >= 0) this.layout.forceMove(v, node.getX(), node.getY()); + this.worker.unsuspend(); + + } + log.debug("Added " + node.getDisplayName()); + return v; + } else { + System.err.print("Vertex exists:"); + return null; + } + + } + + /** + * + */ + public void startNodePlacer(){ + start(); + } + + /** + * + */ + public void stopNodePlacer(){ + this.worker.stop(); + + } + + /** + * + */ + public void pauseNodePlacer(boolean pause){ + if (pause && !isPaused()) { + this.worker.suspend(); + this.workerPaused = true; + } else if (!pause && isPaused()) { + this.worker.unsuspend(); + this.workerPaused = false; + + } + } + + public boolean isPaused(){ + return this.workerRunning && this.workerPaused; + } + + /** + * F\xFCgt eine gerichtete Kante von Knoten node1 zu node2 hinzu. + * + * Das Gewicht der Kante + * @param node1 first node. + * @param node2 second node. + * @return a new or old edge between the two nodes. + */ + public IMagicEdge addEdge(Node node1, Node node2){ + if (node1 == node2) return null; + Vertex v = findVertex(node1); + Vertex w = findVertex(node2); + + return addEdge(v, w); + } + + /** + * F\xFCgt eine Jungkante hinzu. wird intern verwendet. + * + * @param v1 first vertex + * @param v2 second vertex. + * @return + */ + private IMagicEdge addEdge(Vertex v1, Vertex v2){ + log.debug("Adding Edge : " + v1 + " -> " + v2); + if (v1 == v2) return null; + synchronized (edgeLock) { + Edge e = v1.findEdge(v2); + if (e != null) + return (IMagicEdge) e; + else { + JungEdge edge = new JungEdge(v1, v2); + this.worker.suspend(); // stopGraph(); + addEdge(edge); + this.layout.update(); + ((SpringLayout) this.worker.getGraphLayout()).update(); + this.worker.unsuspend(); // resumeGraph(); + + magicEdges.put(e,edge); + return edge; + } + + } + } + + /** + * @see INodePlacer + * @param n1 first node. + * @param n2 second node. + * @return an JungEdge or null. + */ + public JungEdge getEdge(Node n1, Node n2){ + Vertex v = findVertex(n1); + Vertex w = findVertex(n2); + if (v != null && w != null) { + return (JungEdge)v.findEdge(w); + } + else return null; + + } + + /** + * L\xF6scht eine Kantew zwischen den beiden Knoten. + * @param node1 Quelle der Kante. + * @param node2 Ziel der Kante. + */ + public void removeEdge(Node node1, Node node2){ + Vertex v = findVertex(node1); + Vertex w = findVertex(node2); + if (v != null && w != null) { + this.worker.suspend(); + Set edges = getEdges(); + for (Object edge : edges) { + Edge e = (Edge) edge; + if (e.getIncidentVertices().contains(v) && e.getIncidentVertices().contains(w)) { + removeEdge(e); + magicEdges.remove(e); + break; + } + } + this.layout.update(); + this.worker.unsuspend(); // resumeGraph(); + } + } + + /** + * Entfernt Knoten aus dem Graph und eventuelle Kanten + * + * @param node + */ + private void removeVertex(Node node){ + Vertex v = findVertex(node); + if (v != null) { + this.worker.suspend(); + // Kein Iterator direkt auf die Sets des + // Graphen => Concurrent modification! + ArrayList<Edge> list = new ArrayList<Edge>(getEdges()); + for (Edge e : list) { + if (e.getIncidentVertices().contains(v)) { + super.removeEdge(e); + } + } + nodeVertexMapping.remove(node); + this.labeller.removeLabel(node.getDisplayName()); + super.removeVertex(v); + this.layout.update(); + this.worker.unsuspend(); + } + } + + /** + * + * @param handler + */ + + public void addNodeUpdateHandler(NodeUpdateHandler handler){ + this.nodeHandler.addNodeUpdateHandler(handler); + + } + + public void clear(){ + stopNodePlacer(); + this.removeAllEdges(); + this.removeAllVertices(); + nodeVertexMapping.clear(); + } + + /** + * + * @return + */ + public Iterator<IMagicEdge> iterator() { + synchronized (edgeLock) { + ArrayList<IMagicEdge> edgeCopy = new ArrayList<IMagicEdge>(magicEdges.values()); + return edgeCopy.iterator(); + } + } +} Deleted: branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java 2008-01-01 23:14:33 UTC (rev 708) @@ -1,18 +0,0 @@ -package net.sf.magicmap.client.model.node; - - -/** - * An edge connects two Nodes. - * - * - * @author Jan Friderici - * - */ -public interface IMagicEdge { - public Node getSourceNode(); - public Node getTargetNode(); - - public enum EdgeType{ - NONE, PARENT_EDGE, DISTANCE_EDGE; - } -} Copied: branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java (from rev 705, trunk/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java) =================================================================== --- branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java (rev 0) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java 2008-01-01 23:14:33 UTC (rev 708) @@ -0,0 +1,31 @@ +package net.sf.magicmap.client.model.node; + + +/** + * An edge connects two Nodes. + * + * + * @author Jan Friderici + * + */ +public interface IMagicEdge { + + /** + * + * @return + */ + Node getSourceNode(); + + /** + * + * @return + */ + Node getTargetNode(); + + /** + * + */ + public enum EdgeType{ + NONE, PARENT_EDGE, DISTANCE_EDGE; + } +} Modified: branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/INode.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/INode.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/INode.java 2008-01-01 23:14:33 UTC (rev 708) @@ -3,15 +3,19 @@ import java.util.List; /** - * Created by IntelliJ IDEA. - * User: Jan - * Date: 08.02.2007 - * Time: 09:22:33 - * To change this template use File | Settings | File Templates. + * <p> + * Interface for all nodes. + * </p> + * @author Jan Friderici */ public interface INode { - String getDisplayName(); + /** + * + * @return + */ + String getDisplayName(); + void setDisplayName(String displayName); boolean isUpdate(); Modified: branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java 2007-12-21 12:06:47 UTC (rev 704) +++ branches/info/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java 2008-01-01 23:14:33 UTC (rev 708) @@ -24,13 +24,13 @@ * * @param node the node to add */ - public abstract void addNode(Node node); + void addNode(Node node); /** * Remove a node * @param node removes a node from the model */ - public abstract void removeNode(Node node); + void removeNode(Node node); /** * Notifies all listeners that the state of a given node @@ -42,7 +42,7 @@ * @param data new data, may be null. * @see NodeModelListener */ - public abstract void updateNode(Node node, int type, Object data); + void updateNode(Node node, int type, Object data); /** * Aktualisiert den Hash-Schl\xFCssel f\xFCr einen Knoten. @@ -51,7 +51,7 @@ * @param node Knoten der aktualisiert werden soll * @param name Alter Hash-Wert */ - public abstract void rehashNode(Node node, String name); + void rehashNode(Node node, String name); /** * returns all neighbours for the given node. @@ -59,7 +59,7 @@ * @param node the node * @return all neighbours of the given node. */ - public abstract ArrayList<? extends Node> findNeighbors(Node node); + ArrayList<? extends Node> findNeighbors(Node node); /** * what for? @@ -67,27 +67,27 @@ * @return */ @Deprecated - public abstract ArrayList<? extends ... [truncated message content] |
From: <jan...@us...> - 2008-01-01 23:14:47
|
Revision: 707 http://magicmap.svn.sourceforge.net/magicmap/?rev=707&view=rev Author: jan_fride Date: 2008-01-01 15:14:01 -0800 (Tue, 01 Jan 2008) Log Message: ----------- Infoobject branch.... Added Paths: ----------- branches/info/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jan...@us...> - 2008-01-01 15:05:09
|
Revision: 706 http://magicmap.svn.sourceforge.net/magicmap/?rev=706&view=rev Author: jan_fride Date: 2008-01-01 07:04:39 -0800 (Tue, 01 Jan 2008) Log Message: ----------- added get method and iterator for edges. Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2007-12-31 17:59:57 UTC (rev 705) +++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2008-01-01 15:04:39 UTC (rev 706) @@ -18,20 +18,20 @@ * @author Jan Friderici * */ -public interface INodePlacer { +public interface INodePlacer extends Iterable<IMagicEdge>{ /** * Fügt einen neuen Knoten ein. * * @param node der neue Knoten. */ - public void insertNode(Node node); + void insertNode(Node node); /** * Löscht einen Knoten. * @param node */ - public void deleteNode(Node node); + void deleteNode(Node node); /** * Legt eine gerichtete Kante zwischen den beiden Knoten an. @@ -40,14 +40,22 @@ * @param n2 das Ziel der Kante * @return */ - public IMagicEdge addEdge(Node n1, Node n2); + IMagicEdge addEdge(Node n1, Node n2); /** + * <p>Find the ege connecting the two given nodes.</p> + * @param n1 first node + * @param n2 secnd node + * @return the connecting edge or null. + */ + IMagicEdge getEdge(Node n1, Node n2); + + /** * Löscht eine gerichtete Kante. (also nur eine Richtung). - * @param n1 - * @param n2 + * @param n1 first node + * @param n2 second node */ - public void removeEdge(Node n1, Node n2); + void removeEdge(Node n1, Node n2); /** * Die Größe des Layoutalgorithmus sollte der der Karte @@ -56,43 +64,58 @@ * @param width die Breite (der Karte). * @param height die Höhe (der Karte). */ - public void setSize(int width, int height); + void setSize(int width, int height); /** * Starts the algorithm. * */ - public abstract void startNodePlacer(); + void startNodePlacer(); /** * Stops the algorithm * */ - public abstract void stopNodePlacer(); + void stopNodePlacer(); /** * * @param pause */ - public abstract void pauseNodePlacer(boolean pause); + void pauseNodePlacer(boolean pause); /** * * @return */ - public boolean isPaused(); + boolean isPaused(); /** * Adds a handler for node updates. * @param handler */ - public void addNodeUpdateHandler(NodeUpdateHandler handler); + void addNodeUpdateHandler(NodeUpdateHandler handler); - public NodeMetricManager getMetricManager(); - - public void updateNode(Node node, int type, Object data); - static final class NodeHandlerFactory { + /** + * + * @return the metric manager for this layout. + */ + NodeMetricManager getMetricManager(); + /** + * + * @param node + * @param type + * @param data + */ + void updateNode(Node node, int type, Object data); + + + /** + * + */ + static final class NodeHandlerFactory { + public final HashMap<Integer, NodeUpdateHandler> handlerMap; public NodeHandlerFactory() { @@ -124,5 +147,9 @@ return this.handlerMap.get(type); } } - public void clear();; + + /** + * <p>Remove all nodes and edges...</p> + */ + void clear(); } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2007-12-31 17:59:57 UTC (rev 705) +++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2008-01-01 15:04:39 UTC (rev 706) @@ -1,49 +1,31 @@ package net.sf.magicmap.client.model.location.jung; -import java.awt.Dimension; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - +import edu.uci.ics.jung.graph.Edge; +import edu.uci.ics.jung.graph.Vertex; +import edu.uci.ics.jung.graph.decorators.StringLabeller; +import edu.uci.ics.jung.graph.impl.DirectedSparseGraph; +import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; +import edu.uci.ics.jung.utils.UserData; +import edu.uci.ics.jung.visualization.SpringLayout; import net.sf.magicmap.client.algorithms.MagicMetric; import net.sf.magicmap.client.algorithms.NodeMetricManager; import net.sf.magicmap.client.algorithms.NodeModelMetric; -import net.sf.magicmap.client.controller.Controller; import net.sf.magicmap.client.model.location.INodePlacer; import net.sf.magicmap.client.model.location.NodeUpdateHandler; -import net.sf.magicmap.client.model.location.jung.handler.AccessPointHiddenStateHandler; -import net.sf.magicmap.client.model.location.jung.handler.CalculationStateHandler; -import net.sf.magicmap.client.model.location.jung.handler.FixStateHandler; -import net.sf.magicmap.client.model.location.jung.handler.LabelChangeHandler; -import net.sf.magicmap.client.model.location.jung.handler.NotSeeAccessPointHandler; -import net.sf.magicmap.client.model.location.jung.handler.PositionUpdateHandler; -import net.sf.magicmap.client.model.location.jung.handler.SeeAccessPointHandler; -import net.sf.magicmap.client.model.node.ClientNode; -import net.sf.magicmap.client.model.node.IMagicEdge; -import net.sf.magicmap.client.model.node.LocationNode; -import net.sf.magicmap.client.model.node.MapNode; -import net.sf.magicmap.client.model.node.Node; -import net.sf.magicmap.client.model.node.NodeModelConstants; - +import net.sf.magicmap.client.model.location.jung.handler.*; +import net.sf.magicmap.client.model.node.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import edu.uci.ics.jung.graph.Edge; -import edu.uci.ics.jung.graph.Vertex; -import edu.uci.ics.jung.graph.decorators.StringLabeller; -import edu.uci.ics.jung.graph.impl.DirectedSparseGraph; -import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; -import edu.uci.ics.jung.utils.UserData; -import edu.uci.ics.jung.visualization.SpringLayout; +import java.awt.*; +import java.util.*; /** * Dieses Model benutzt die Layoutfunktionen von Jung und einige Angepasste * Layoutalgorithmen um die Knotenposition zu berechnen. * - * @author Jan + * @author Jan Friderici * */ public class JungNodePlacer extends DirectedSparseGraph implements INodePlacer, NodeModelConstants { @@ -98,6 +80,8 @@ private final Object edgeLock = new Object(); private final Object vertexLock = new Object(); + private final Map<Edge, IMagicEdge> magicEdges = new HashMap<Edge, IMagicEdge>(); + public JungNodePlacer() { this(new MagicMetric()); } @@ -112,8 +96,7 @@ /** * - * @param settings - * @param metric + * @param metric the metrics to use. */ public JungNodePlacer(NodeModelMetric metric) { super(); @@ -179,10 +162,18 @@ } + /** + * + * @param node + */ public void deleteNode(Node node){ removeVertex(node); } + /** + * + * @return + */ public SpringLayout getLayout(){ return this.layout; } @@ -194,7 +185,7 @@ * @param node der neue oder ge\xE4nderte Knoten * @param type der Typ des Events. (Enum nutzen)? * @param data ---? - * @see NodeModelListener, INodeModel, NodeModel + * @see net.sf.magicmap.client.interfaces.NodeModelListener , INodeModel, NodeModel */ public void updateNode(Node node, int type, Object data){ // first try if we have a handler for this event. @@ -216,6 +207,11 @@ } } + /** + * + * @param node + * @return + */ public Vertex findVertex(Node node){ return this.nodeVertexMapping.get(node); } @@ -292,9 +288,9 @@ * F\xFCgt eine gerichtete Kante von Knoten node1 zu node2 hinzu. * * Das Gewicht der Kante - * @param node1 - * @param node2 - * @return + * @param node1 first node. + * @param node2 second node. + * @return a new or old edge between the two nodes. */ public IMagicEdge addEdge(Node node1, Node node2){ if (node1 == node2) return null; @@ -307,8 +303,8 @@ /** * F\xFCgt eine Jungkante hinzu. wird intern verwendet. * - * @param v1 - * @param v2 + * @param v1 first vertex + * @param v2 second vertex. * @return */ private IMagicEdge addEdge(Vertex v1, Vertex v2){ @@ -326,6 +322,7 @@ ((SpringLayout) this.worker.getGraphLayout()).update(); this.worker.unsuspend(); // resumeGraph(); + magicEdges.put(e,edge); return edge; } @@ -333,6 +330,22 @@ } /** + * @see INodePlacer + * @param n1 first node. + * @param n2 second node. + * @return an JungEdge or null. + */ + public JungEdge getEdge(Node n1, Node n2){ + Vertex v = findVertex(n1); + Vertex w = findVertex(n2); + if (v != null && w != null) { + return (JungEdge)v.findEdge(w); + } + else return null; + + } + + /** * L\xF6scht eine Kantew zwischen den beiden Knoten. * @param node1 Quelle der Kante. * @param node2 Ziel der Kante. @@ -347,6 +360,7 @@ Edge e = (Edge) edge; if (e.getIncidentVertices().contains(v) && e.getIncidentVertices().contains(w)) { removeEdge(e); + magicEdges.remove(e); break; } } @@ -364,12 +378,10 @@ Vertex v = findVertex(node); if (v != null) { this.worker.suspend(); - Set edges = getEdges(); // Kein Iterator direkt auf die Sets des // Graphen => Concurrent modification! - ArrayList list = new ArrayList(edges); - for (Object aList : list) { - Edge e = (Edge) aList; + ArrayList<Edge> list = new ArrayList<Edge>(getEdges()); + for (Edge e : list) { if (e.getIncidentVertices().contains(v)) { super.removeEdge(e); } @@ -399,4 +411,14 @@ nodeVertexMapping.clear(); } + /** + * + * @return + */ + public Iterator<IMagicEdge> iterator() { + synchronized (edgeLock) { + ArrayList<IMagicEdge> edgeCopy = new ArrayList<IMagicEdge>(magicEdges.values()); + return edgeCopy.iterator(); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jan...@us...> - 2007-12-31 19:01:11
|
Revision: 705 http://magicmap.svn.sourceforge.net/magicmap/?rev=705&view=rev Author: jan_fride Date: 2007-12-31 09:59:57 -0800 (Mon, 31 Dec 2007) Log Message: ----------- removed redundant "public" in interface Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java 2007-12-21 12:06:47 UTC (rev 704) +++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/IMagicEdge.java 2007-12-31 17:59:57 UTC (rev 705) @@ -9,10 +9,23 @@ * */ public interface IMagicEdge { - public Node getSourceNode(); - public Node getTargetNode(); - public enum EdgeType{ + /** + * + * @return + */ + Node getSourceNode(); + + /** + * + * @return + */ + Node getTargetNode(); + + /** + * + */ + public enum EdgeType{ NONE, PARENT_EDGE, DISTANCE_EDGE; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-12-21 12:07:05
|
Revision: 704 http://magicmap.svn.sourceforge.net/magicmap/?rev=704&view=rev Author: anweiss Date: 2007-12-21 04:06:47 -0800 (Fri, 21 Dec 2007) Log Message: ----------- Added Paths: ----------- tags/V20071221_0_9_2/magicmapserver/ Copied: tags/V20071221_0_9_2/magicmapserver (from rev 703, trunk/magicmapserver) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-12-21 12:00:59
|
Revision: 703 http://magicmap.svn.sourceforge.net/magicmap/?rev=703&view=rev Author: anweiss Date: 2007-12-21 04:00:40 -0800 (Fri, 21 Dec 2007) Log Message: ----------- Added Paths: ----------- tags/V20071221_0_9_2/magicmapclient/ Copied: tags/V20071221_0_9_2/magicmapclient (from rev 698, trunk/magicmapclient) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-12-21 11:59:35
|
Revision: 702 http://magicmap.svn.sourceforge.net/magicmap/?rev=702&view=rev Author: anweiss Date: 2007-12-21 03:59:07 -0800 (Fri, 21 Dec 2007) Log Message: ----------- Version 0.9.2 Added Paths: ----------- tags/V20071221_0_9_2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-12-21 11:48:50
|
Revision: 701 http://magicmap.svn.sourceforge.net/magicmap/?rev=701&view=rev Author: anweiss Date: 2007-12-21 03:48:21 -0800 (Fri, 21 Dec 2007) Log Message: ----------- can't access the server directory delete&retry Removed Paths: ------------- tags/V20071221_0_9_2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-12-21 11:39:38
|
Revision: 700 http://magicmap.svn.sourceforge.net/magicmap/?rev=700&view=rev Author: anweiss Date: 2007-12-21 03:39:04 -0800 (Fri, 21 Dec 2007) Log Message: ----------- Server 9.2.0 Added Paths: ----------- tags/V20071221_0_9_2/magicmapserver/ Copied: tags/V20071221_0_9_2/magicmapserver (from rev 699, trunk/magicmapserver) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-12-21 11:37:55
|
Revision: 699 http://magicmap.svn.sourceforge.net/magicmap/?rev=699&view=rev Author: anweiss Date: 2007-12-21 03:37:52 -0800 (Fri, 21 Dec 2007) Log Message: ----------- Version 9.2.0 Added Paths: ----------- tags/V20071221_0_9_2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fle...@us...> - 2007-12-20 14:43:04
|
Revision: 698 http://magicmap.svn.sourceforge.net/magicmap/?rev=698&view=rev Author: flederohr Date: 2007-12-20 06:42:56 -0800 (Thu, 20 Dec 2007) Log Message: ----------- changed release Filename Modified Paths: -------------- trunk/magicmapclient/MagicMapSetup.nsi Modified: trunk/magicmapclient/MagicMapSetup.nsi =================================================================== --- trunk/magicmapclient/MagicMapSetup.nsi 2007-12-20 14:32:48 UTC (rev 697) +++ trunk/magicmapclient/MagicMapSetup.nsi 2007-12-20 14:42:56 UTC (rev 698) @@ -46,7 +46,7 @@ !insertmacro MUI_LANGUAGE German # Installer attributes -OutFile dist\MagicMap-${VERSION}-${APPENDIX}.exe +OutFile dist\MagicMapSetup-${VERSION}-${APPENDIX}.exe InstallDir $PROGRAMFILES\MagicMap CRCCheck on XPStyle on This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fle...@us...> - 2007-12-20 14:32:53
|
Revision: 697 http://magicmap.svn.sourceforge.net/magicmap/?rev=697&view=rev Author: flederohr Date: 2007-12-20 06:32:48 -0800 (Thu, 20 Dec 2007) Log Message: ----------- version incremented improved building scripts Modified Paths: -------------- trunk/magicmapclient/MagicMapSetup.nsi trunk/magicmapclient/build.xml Modified: trunk/magicmapclient/MagicMapSetup.nsi =================================================================== --- trunk/magicmapclient/MagicMapSetup.nsi 2007-12-20 12:59:48 UTC (rev 696) +++ trunk/magicmapclient/MagicMapSetup.nsi 2007-12-20 14:32:48 UTC (rev 697) @@ -7,7 +7,8 @@ # Defines !define REGKEY "SOFTWARE\$(^Name)" -!define VERSION 0.9.0 +!define VERSION 0.9.2 +!define APPENDIX "beta1" !define COMPANY "Humboldt Universit\xE4t zu Berlin" !define URL http://www2.informatik.hu-berlin.de/rok/MagicMap @@ -45,7 +46,7 @@ !insertmacro MUI_LANGUAGE German # Installer attributes -OutFile MagicMapsetup.exe +OutFile dist\MagicMap-${VERSION}-${APPENDIX}.exe InstallDir $PROGRAMFILES\MagicMap CRCCheck on XPStyle on Modified: trunk/magicmapclient/build.xml =================================================================== --- trunk/magicmapclient/build.xml 2007-12-20 12:59:48 UTC (rev 696) +++ trunk/magicmapclient/build.xml 2007-12-20 14:32:48 UTC (rev 697) @@ -2,8 +2,8 @@ <project name="magicmapclient" default="jar" basedir="."> <property name="application" value="magicmap" /> <!-- Version Information --> - <property name="version.number" value="0.9.1" /> - <property name="version.appendix" value="beta 5" /> + <property name="version.number" value="0.9.2" /> + <property name="version.appendix" value="beta 1" /> <property name="jar.name" value="${application}.jar" /> <property name="main.class" value="net.sf.magicmap.client.core.MagicMapApplication" /> @@ -132,7 +132,7 @@ </target> <target name="dist" depends="jar"> - <zip destfile="dist/${application}-${version.number}.zip"> + <zip destfile="dist/${application}-${version.number}-${version.appendix}.zip"> <fileset dir="." includes="lib/*" /> <fileset dir="." includes="plugins/*" /> <fileset dir="." includes="${jar.name}" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fle...@us...> - 2007-12-20 12:59:54
|
Revision: 696 http://magicmap.svn.sourceforge.net/magicmap/?rev=696&view=rev Author: flederohr Date: 2007-12-20 04:59:48 -0800 (Thu, 20 Dec 2007) Log Message: ----------- introduced optional distributed computation of the client positions Modified Paths: -------------- trunk/magicmapclient/res/screentext.properties trunk/magicmapclient/res/screentext_de_DE.properties trunk/magicmapclient/src/edu/uci/ics/jung/visualization/AbstractLayout.java trunk/magicmapclient/src/edu/uci/ics/jung/visualization/SpringLayout.java trunk/magicmapclient/src/net/sf/magicmap/client/controller/Controller.java trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java trunk/magicmapclient/src/net/sf/magicmap/client/gui/MapPanel.java trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java trunk/magicmapclient/src/net/sf/magicmap/client/model/node/ClientNode.java trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelConstants.java Added Paths: ----------- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/handler/CalculationStateHandler.java Modified: trunk/magicmapclient/res/screentext.properties =================================================================== --- trunk/magicmapclient/res/screentext.properties 2007-12-20 12:51:48 UTC (rev 695) +++ trunk/magicmapclient/res/screentext.properties 2007-12-20 12:59:48 UTC (rev 696) @@ -113,19 +113,22 @@ message.dialog.wrong.height = Error! The Node's height wasn't updated! map.panel.context.hide.ap = hide accesspoint map.panel.context.hide.ap.off = compute accesspoint +map.panel.context.calculate.client = calculate client node.accesspoint.is.hide = OFF continue=C&ontinue plugins.show=Plugins plugins.show.tooltip=Shows all plugins plugins.installed=Installed Plugins -plugins.load=Show Plugins +plugins.load=Reload Repository plugins.install=Install Plugins plugins.uninstall=Deinstall Plugins -plugins.load.tooltip=Load the Plugin List +plugins.uninstall.dialog=The plugin $pluginname can only be deleted after a restart.\nDo you want to restart MagicMap now? +plugins.load.tooltip=Reloads the Plugin List from the repository plugins.install.tooltip=Installs the selected Plugin plugins.uninstall.tooltip=Deinstalls the selected Plugin plugins.available=Additional Plugins plugins.dependencies=Dependencies +plugins.description=Description plugins.detailview=Detail View plugins.name=Name plugins.version=Version Modified: trunk/magicmapclient/res/screentext_de_DE.properties =================================================================== --- trunk/magicmapclient/res/screentext_de_DE.properties 2007-12-20 12:51:48 UTC (rev 695) +++ trunk/magicmapclient/res/screentext_de_DE.properties 2007-12-20 12:59:48 UTC (rev 696) @@ -113,19 +113,22 @@ message.dialog.wrong.height = H\xF6he wurde nicht ge\xE4ndert! map.panel.context.hide.ap = Accesspoint bei Berechnung ausblenden map.panel.context.hide.ap.off = Accesspoint bei Berechnung ber\xFCcksichtigen +map.panel.context.calculate.client = Berechne Client node.accesspoint.is.hide = AUS continue=&Weiter plugins.show=Plugins plugins.show.tooltip=Zeige alle Plugins plugins.installed=Installierte Plugins -plugins.load=Zeige Plugins +plugins.load=Erneuere Repository plugins.install=Installiere Plugin plugins.uninstall=Deinstalliere Plugin -plugins.load.tooltip=L\xE4dt die Pluginliste +plugins.uninstall.dialog=Das Plugin $pluginname kann erst nach einem Neustart gel\xF6scht werden.\nM\xF6chten sie MagicMap jetzt neu starten? +plugins.load.tooltip=L\xE4dt erneut den Inhalt des Plugin-Repositories plugins.install.tooltip=Installiert ausgew\xE4hltes Plugin plugins.uninstall.tooltip=Deinstalliert ausgew\xE4hltes Plugin plugins.available=Weitere Plugins plugins.dependencies=Abh\xE4ngigkeiten +plugins.description=Beschreibung plugins.detailview=Detailansicht plugins.name=Name plugins.version=Version Modified: trunk/magicmapclient/src/edu/uci/ics/jung/visualization/AbstractLayout.java =================================================================== --- trunk/magicmapclient/src/edu/uci/ics/jung/visualization/AbstractLayout.java 2007-12-20 12:51:48 UTC (rev 695) +++ trunk/magicmapclient/src/edu/uci/ics/jung/visualization/AbstractLayout.java 2007-12-20 12:59:48 UTC (rev 696) @@ -1,14 +1,11 @@ /* * Copyright (c) 2003, the JUNG Project and the Regents of the University of - * California All rights reserved. - * - * This software is open-source under the BSD license; see either "license.txt" - * or http://jung.sourceforge.net/license.txt for a description. + * California All rights reserved. This software is open-source under the BSD + * license; see either "license.txt" or http://jung.sourceforge.net/license.txt + * for a description. */ /* - * Created on Jul 7, 2003 - * - * To change the template for this generated file go to + * Created on Jul 7, 2003 To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ @@ -36,479 +33,515 @@ */ abstract public class AbstractLayout implements Layout { - /** - * The set of vertices that have been locked. When running layout, it is - * important to check - * - * <pre> - * if (dontmove( v )) { ... } - * </pre> - * - * @return whether this vertex may be legally moved or not - */ - public boolean dontMove(Vertex v){ - return dontmove.contains(v); - } + /** + * The set of vertices that have been locked. When running layout, it is + * important to check + * + * <pre> + * if (dontmove( v )) { ... } + * </pre> + * + * @return whether this vertex may be legally moved or not + */ + public boolean dontMove(Vertex v){ + return dontmove.contains(v); + } - /** - * Support for explicit fix nodes. - * @param v - * @return - */ - public boolean fix(Vertex v){ - return fix.contains(v); - } + /** + * Support for explicit fix nodes. + * @param v + * @return + */ + public boolean fix(Vertex v){ + return fix.contains(v); + } - // private boolean initialized = false; + // private boolean initialized = false; - private Set dontmove; - private Set fix; + private Set dontmove; + private Set fix; - private static final Object BASE_KEY = "edu.uci.ics.jung.Base_Visualization_Key"; + private static final Object BASE_KEY = "edu.uci.ics.jung.Base_Visualization_Key"; - private Dimension currentSize; - private Graph baseGraph; - private Graph visibleGraph; + private Dimension currentSize; + private Graph baseGraph; + private Graph visibleGraph; - /** - * Constructor. Initializes the current size to be 100x100, both the graph - * and the showing graph to the argument, and creates the <tt>dontmove</tt> - * set. - * - * @param g - */ - public AbstractLayout(Graph g) { - // this.currentSize = new Dimension(100, 100); - this.baseGraph = g; - this.visibleGraph = g; - this.visibleEdges = g.getEdges(); - this.visibleVertices = g.getVertices(); - this.dontmove = new HashSet(); - this.fix = new HashSet(); - } + /** + * Constructor. Initializes the current size to be 100x100, both the graph + * and the showing graph to the argument, and creates the <tt>dontmove</tt> + * set. + * + * @param g + */ + public AbstractLayout(Graph g) { + // this.currentSize = new Dimension(100, 100); + this.baseGraph = g; + this.visibleGraph = g; + this.visibleEdges = g.getEdges(); + this.visibleVertices = g.getVertices(); + this.notCalculatedVertices = new HashSet(); //FLAW + this.dontmove = new HashSet(); + this.fix = new HashSet(); + } - /** - * Initializer, calls <tt>intialize_local</tt> and <tt>initializeLocations</tt> - * to start construction process. - */ - public void initialize(Dimension size){ - // System.out.println("Initialize " + this + size ); - this.currentSize = size; - initialize_local(); - initializeLocations(); - // this.initialized = true; - } + /** + * Initializer, calls <tt>intialize_local</tt> and <tt>initializeLocations</tt> + * to start construction process. + */ + public void initialize(Dimension size){ + // System.out.println("Initialize " + this + size ); + this.currentSize = size; + initialize_local(); + initializeLocations(); + // this.initialized = true; + } - /** - * Initializes all local information, and is called immediately within the - * <tt>initialize()</tt> process. The user is responsible for overriding - * this method to do any construction that may be necessary: for example, - * to initialize local per-edge or graph-wide data. - */ - protected abstract void initialize_local(); + /** + * Initializes all local information, and is called immediately within the + * <tt>initialize()</tt> process. The user is responsible for overriding + * this method to do any construction that may be necessary: for example, + * to initialize local per-edge or graph-wide data. + */ + protected abstract void initialize_local(); - /** - * Initializes the local information on a single vertex. The user is - * responsible for overriding this method to do any vertex-level - * construction that may be necessary: for example, to attach vertex-level - * information to each vertex. - */ - protected abstract void initialize_local_vertex(Vertex v); + /** + * Initializes the local information on a single vertex. The user is + * responsible for overriding this method to do any vertex-level + * construction that may be necessary: for example, to attach vertex-level + * information to each vertex. + */ + protected abstract void initialize_local_vertex(Vertex v); - private Object key; + private Object key; - private Set visibleVertices; - private Set visibleEdges; + private Set visibleVertices; + private Set visibleEdges; - /** - * Returns a visualization-specific key (that is, specific both to this - * instance and <tt>AbstractLayout</tt>) that can be used to access - * UserData related to the <tt>AbstractLayout</tt>. - */ - public Object getBaseKey(){ - if (key == null) key = new Pair(this, BASE_KEY); - return key; - } + private Set notCalculatedVertices; //FLAW - /** - * This method calls <tt>initialize_local_vertex</tt> for each vertex, - * and also adds initial coordinate information for each vertex. (The - * vertex's initial location is set by calling <tt>initializeLocation</tt>. - */ - protected void initializeLocations(){ - for (Iterator iter = baseGraph.getVertices().iterator(); iter.hasNext();){ - Vertex v = (Vertex) iter.next(); + /** + * Returns a visualization-specific key (that is, specific both to this + * instance and <tt>AbstractLayout</tt>) that can be used to access + * UserData related to the <tt>AbstractLayout</tt>. + */ + public Object getBaseKey(){ + if (key == null) key = new Pair(this, BASE_KEY); + return key; + } - Coordinates coord = (Coordinates) v.getUserDatum(getBaseKey()); - if (coord == null){ - coord = new Coordinates(); - v.addUserDatum(getBaseKey(), coord, UserData.REMOVE); - } - if (!dontmove.contains(v)) initializeLocation(v, coord, currentSize); - initialize_local_vertex(v); + /** + * This method calls <tt>initialize_local_vertex</tt> for each vertex, + * and also adds initial coordinate information for each vertex. (The + * vertex's initial location is set by calling <tt>initializeLocation</tt>. + */ + protected void initializeLocations(){ + for (Iterator iter = baseGraph.getVertices().iterator(); iter.hasNext();) { + Vertex v = (Vertex) iter.next(); + + Coordinates coord = (Coordinates) v.getUserDatum(getBaseKey()); + if (coord == null) { + coord = new Coordinates(); + v.addUserDatum(getBaseKey(), coord, UserData.REMOVE); + } + if (!dontmove.contains(v)) initializeLocation(v, coord, currentSize); + initialize_local_vertex(v); + } } - } - /* ------------------------- */ + /* ------------------------- */ - /** - * Sets random locations for a vertex within the dimensions of the space. - * If you want to initialize in some different way, override this method. - * - * @param coord - * @param d - */ - protected void initializeLocation(Vertex v, Coordinates coord, Dimension d){ - double x = Math.random() * d.getWidth(); - double y = Math.random() * d.getHeight(); - coord.setX(x); - coord.setY(y); - } + /** + * Sets random locations for a vertex within the dimensions of the space. + * If you want to initialize in some different way, override this method. + * + * @param coord + * @param d + */ + protected void initializeLocation(Vertex v, Coordinates coord, Dimension d){ + double x = Math.random() * d.getWidth(); + double y = Math.random() * d.getHeight(); + coord.setX(x); + coord.setY(y); + } - /** - * {@inheritDoc}By default, an <tt>AbstractLayout</tt> returns null for - * its status. - */ - public String getStatus(){ - return null; - } + /** + * {@inheritDoc}By default, an <tt>AbstractLayout</tt> returns null for + * its status. + */ + public String getStatus(){ + return null; + } - /** - * Implementors must override this method in order to create a Layout. If - * the Layout is the sort that only calculates locations once, this method - * may be overridden with an empty method. - * <p> - * Note that "locked" vertices are not to be moved; however, it is the - * policy of the visualization to decide how to handle them, and what to do - * with the vertices around them. Prototypical code might include a - * clipping like - * - * <pre> - * for (Iterator i = getVertices().iterator(); i.hasNext() ) { Vertex v = (Vertex) i.next(); if (! dontmove.contains( v ) ) { ... // handle the node } else { // ignore the node } } - * </pre> - * - * @see Layout#advancePositions() - */ - public abstract void advancePositions(); + /** + * Implementors must override this method in order to create a Layout. If + * the Layout is the sort that only calculates locations once, this method + * may be overridden with an empty method. + * <p> + * Note that "locked" vertices are not to be moved; however, it is the + * policy of the visualization to decide how to handle them, and what to do + * with the vertices around them. Prototypical code might include a + * clipping like + * + * <pre> + * for (Iterator i = getVertices().iterator(); i.hasNext() ) { Vertex v = (Vertex) i.next(); if (! dontmove.contains( v ) ) { ... // handle the node } else { // ignore the node } } + * </pre> + * + * @see Layout#advancePositions() + */ + public abstract void advancePositions(); - /** - * Accessor for the graph that represets all visible vertices. <b>Warning: - * </b> This graph consists of vertices that are equivalent to, but are <b> - * not the same as</b> the vertices in <tt>getGraph()</tt>, nor the - * vertices in <tt>getAllVertices()</tt>. Rather, it returns the - * vertices and edges that were passed in during a call to <tt>applyFilter</tt>. - * The call <tt>getVisibleGraph().getVertices()</tt>, is almost - * indubitably incorrect. - * <p> - * - * @return the current visible graph. - * @see #getVisibleEdges - * @see #getVisibleVertices - */ - protected Graph getVisibleGraph(){ - return visibleGraph; - } + /** + * Accessor for the graph that represets all visible vertices. <b>Warning: + * </b> This graph consists of vertices that are equivalent to, but are <b> + * not the same as</b> the vertices in <tt>getGraph()</tt>, nor the + * vertices in <tt>getAllVertices()</tt>. Rather, it returns the + * vertices and edges that were passed in during a call to <tt>applyFilter</tt>. + * The call <tt>getVisibleGraph().getVertices()</tt>, is almost + * indubitably incorrect. + * <p> + * + * @return the current visible graph. + * @see #getVisibleEdges + * @see #getVisibleVertices + */ + protected Graph getVisibleGraph(){ + return visibleGraph; + } - /** - * Returns the current size of the visualization space, accoring to the - * last call to resize(). - * - * @return the current size of the screen - */ - public Dimension getCurrentSize(){ - return currentSize; - } + /** + * Returns the current size of the visualization space, accoring to the + * last call to resize(). + * + * @return the current size of the screen + */ + public Dimension getCurrentSize(){ + return currentSize; + } - /** - * Utility method, gets a single vertex from this edge. The utility's - * implementation is to get the iterator from the edge's <tt>getIncidentVertices()</tt> - * and then return the first element. - */ - protected Vertex getAVertex(Edge e){ - Vertex v = (Vertex) e.getIncidentVertices().iterator().next(); - return v; - } + /** + * Utility method, gets a single vertex from this edge. The utility's + * implementation is to get the iterator from the edge's <tt>getIncidentVertices()</tt> + * and then return the first element. + */ + protected Vertex getAVertex(Edge e){ + Vertex v = (Vertex) e.getIncidentVertices().iterator().next(); + return v; + } - /** - * Returns the Coordinates object that stores the vertex' x and y location. - * - * @param v - * A Vertex that is a part of the Graph being visualized. - * @return A Coordinates object with x and y locations. - */ - public Coordinates getCoordinates(Vertex v){ - return (Coordinates) v.getUserDatum(getBaseKey()); - } + /** + * Returns the Coordinates object that stores the vertex' x and y location. + * + * @param v + * A Vertex that is a part of the Graph being visualized. + * @return A Coordinates object with x and y locations. + */ + public Coordinates getCoordinates(Vertex v){ + return (Coordinates) v.getUserDatum(getBaseKey()); + } - /** - * Returns the x coordinate of the vertex from the Coordiantes object. - * - * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) - */ - public double getX(Vertex v){ - return ((Coordinates) v.getUserDatum(getBaseKey())).getX(); - } + /** + * Returns the x coordinate of the vertex from the Coordiantes object. + * + * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) + */ + public double getX(Vertex v){ + return ((Coordinates) v.getUserDatum(getBaseKey())).getX(); + } - /** - * Returns the y coordinate of the vertex from the Coordiantes object. - * - * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) - */ - public double getY(Vertex v){ - return ((Coordinates) v.getUserDatum(getBaseKey())).getY(); - } + /** + * Returns the y coordinate of the vertex from the Coordiantes object. + * + * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) + */ + public double getY(Vertex v){ + return ((Coordinates) v.getUserDatum(getBaseKey())).getY(); + } - // TH: - /** - * Returns the x coordinate of the vertex from the Coordiantes object. - * - * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) - */ - public void setX(Vertex v, double x){ - ((Coordinates) v.getUserDatum(getBaseKey())).setX(x); - } + // TH: + /** + * Returns the x coordinate of the vertex from the Coordiantes object. + * + * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) + */ + public void setX(Vertex v, double x){ + ((Coordinates) v.getUserDatum(getBaseKey())).setX(x); + } - /** - * Returns the y coordinate of the vertex from the Coordiantes object. - * - * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) - */ - public void setY(Vertex v, double y){ - ((Coordinates) v.getUserDatum(getBaseKey())).setY(y); - } + /** + * Returns the y coordinate of the vertex from the Coordiantes object. + * + * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) + */ + public void setY(Vertex v, double y){ + ((Coordinates) v.getUserDatum(getBaseKey())).setY(y); + } - /** - * When a visualizetion is resized, it presumably wants to fix the - * locations of the vertices and possibly to reinitialize its data. The - * current method calls <tt>initializeLocations</tt> followed by <tt>initialize_local</tt>. - * TODO: A better implementation wouldn't destroy the current information, - * but would either scale the current visualization, or move the nodes - * toward the new center. - */ - public void resize(Dimension size){ - // are we initialized yet? + /** + * When a visualizetion is resized, it presumably wants to fix the + * locations of the vertices and possibly to reinitialize its data. The + * current method calls <tt>initializeLocations</tt> followed by <tt>initialize_local</tt>. + * TODO: A better implementation wouldn't destroy the current information, + * but would either scale the current visualization, or move the nodes + * toward the new center. + */ + public void resize(Dimension size){ + // are we initialized yet? - if (currentSize == null){ - currentSize = size; - return; + if (currentSize == null) { + currentSize = size; + return; + } + + Dimension oldSize; + synchronized (currentSize) { + if (currentSize.equals(size)) return; + oldSize = currentSize; + this.currentSize = size; + } + + int xOffset = (size.width - oldSize.width) / 2; + int yOffset = (size.height - oldSize.height) / 2; + + // now, move each vertex to be at the new screen center + for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();) { + Vertex e = (Vertex) iter.next(); + offsetVertex(e, xOffset, yOffset); + } + // optionally, we may want to restart } - Dimension oldSize; - synchronized (currentSize){ - if (currentSize.equals(size)) return; - oldSize = currentSize; - this.currentSize = size; + /** + * @param v + * @param xOffset + * @param yOffset + */ + protected void offsetVertex(Vertex v, int xOffset, int yOffset){ + Coordinates c = getCoordinates(v); + c.add(xOffset, yOffset); + forceMove(v, (int) c.getX(), (int) c.getY()); } - int xOffset = (size.width - oldSize.width) / 2; - int yOffset = (size.height - oldSize.height) / 2; + /** + * Restarts the visualization entirely, as if the the user had pressed the + * "scramble" button. Calls <tt>initializeLocation</tt> for each vertex. + * TODO: Is this enough? Should it call the whole initialization process? + * Why does resize do more? + */ + public void restart(){ + initializeLocations(); + initialize_local(); + } - // now, move each vertex to be at the new screen center - for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();){ - Vertex e = (Vertex) iter.next(); - offsetVertex(e, xOffset, yOffset); + // /** + // * Returns the set of all visible vertices known to the + // * visualization. + // * @return the list of all vertices in the visible graph + // */ + // protected Set getAllVertices() { + // return getVisibleGraph().getVertices(); + // } + + /** + * Gets the vertex nearest to the location of the (x,y) location selected. + * Calls the longer form of the call. + */ + public Vertex getVertex(double x, double y){ + return getVertex(x, y, Math.sqrt(Double.MAX_VALUE - 1000)); } - // optionally, we may want to restart - } - /** - * @param v - * @param xOffset - * @param yOffset - */ - protected void offsetVertex(Vertex v, int xOffset, int yOffset){ - Coordinates c = getCoordinates(v); - c.add(xOffset, yOffset); - forceMove(v, (int) c.getX(), (int) c.getY()); - } + /** + * Gets the vertex nearest to the location of the (x,y) location selected, + * within a distance of <tt>maxDistance</tt>. Iterates through all + * visible vertices and checks their distance from the click. Override this + * method to provde a more efficient implementation. + */ + public Vertex getVertex(double x, double y, double maxDistance){ + double minDistance = maxDistance * maxDistance; + Vertex closest = null; + for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();) { + Vertex v = (Vertex) iter.next(); + double dx = getX(v) - x; + double dy = getY(v) - y; + double dist = dx * dx + dy * dy; + if (dist < minDistance) { + minDistance = dist; + closest = v; + } + } + return closest; + } - /** - * Restarts the visualization entirely, as if the the user had pressed the - * "scramble" button. Calls <tt>initializeLocation</tt> for each vertex. - * TODO: Is this enough? Should it call the whole initialization process? - * Why does resize do more? - */ - public void restart(){ - initializeLocations(); - initialize_local(); - } + /** + * Gets the edge nearest to the location of the (x,y) location selected. + * Calls the longer form of the call. + */ + public Edge getEdge(double x, double y){ + return getEdge(x, y, Math.sqrt(Double.MAX_VALUE - 1000)); + } - // /** - // * Returns the set of all visible vertices known to the - // * visualization. - // * @return the list of all vertices in the visible graph - // */ - // protected Set getAllVertices() { - // return getVisibleGraph().getVertices(); - // } + /** + * Gets the edge nearest to the location of the (x,y) location selected, + * within a distance of <tt>maxDistance</tt>, Iterates through all + * visible edges and checks their distance from the click. Override this + * method to provide a more efficient implementation. + * + * @param x + * @param y + * @param maxDistance + * @return Edge closest to the click. + */ + public Edge getEdge(double x, double y, double maxDistance){ + double minDistance = maxDistance * maxDistance; + Edge closest = null; + for (Iterator iter = getVisibleEdges().iterator(); iter.hasNext();) { + Edge e = (Edge) iter.next(); + // if anyone uses a hyperedge, this is too complex. + if (e.numVertices() != 2) continue; + // Could replace all this set stuff with getFrom_internal() etc. + Set vertices = e.getIncidentVertices(); + Iterator vertexIterator = vertices.iterator(); + Vertex v1 = (Vertex) vertexIterator.next(); + Vertex v2 = (Vertex) vertexIterator.next(); + // Get coords + double x1 = getX(v1); + double y1 = getY(v1); + double x2 = getX(v2); + double y2 = getY(v2); + // Calculate location on line closest to (x,y) + // First, check that v1 and v2 are not coincident. + if (x1 == x2 && y1 == y2) continue; + double b = ((y - y1) * (y2 - y1) + (x - x1) * (x2 - x1)) / ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + // + double distance2; // square of the distance + if (b <= 0) + distance2 = (x - x1) * (x - x1) + (y - y1) * (y - y1); + else if (b >= 1) + distance2 = (x - x2) * (x - x2) + (y - y2) * (y - y2); + else { + double x3 = x1 + b * (x2 - x1); + double y3 = y1 + b * (y2 - y1); + distance2 = (x - x3) * (x - x3) + (y - y3) * (y - y3); + } - /** - * Gets the vertex nearest to the location of the (x,y) location selected. - * Calls the longer form of the call. - */ - public Vertex getVertex(double x, double y){ - return getVertex(x, y, Math.sqrt(Double.MAX_VALUE - 1000)); - } + if (distance2 < minDistance) { + minDistance = distance2; + closest = e; + } + } + return closest; + } - /** - * Gets the vertex nearest to the location of the (x,y) location selected, - * within a distance of <tt>maxDistance</tt>. Iterates through all - * visible vertices and checks their distance from the click. Override this - * method to provde a more efficient implementation. - */ - public Vertex getVertex(double x, double y, double maxDistance){ - double minDistance = maxDistance * maxDistance; - Vertex closest = null; - for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();){ - Vertex v = (Vertex) iter.next(); - double dx = getX(v) - x; - double dy = getY(v) - y; - double dist = dx * dx + dy * dy; - if (dist < minDistance){ - minDistance = dist; - closest = v; - } + /** + * Accessor for the graph that represets all vertices. + * + * @return the graph that contains all vertices. + */ + public Graph getGraph(){ + return baseGraph; } - return closest; - } - /** - * Gets the edge nearest to the location of the (x,y) location selected. - * Calls the longer form of the call. - */ - public Edge getEdge(double x, double y){ - return getEdge(x, y, Math.sqrt(Double.MAX_VALUE - 1000)); - } + /** + * Returns the set of edges from the original <tt>getGraph</tt> that are + * now visible. These edges are equivalent to the ones passed in from the + * <tt>Graph</tt> argument to <tt>applyFilter()</tt>. + */ + public Set getVisibleEdges(){ + return visibleEdges; + } - /** - * Gets the edge nearest to the location of the (x,y) location selected, - * within a distance of <tt>maxDistance</tt>, Iterates through all - * visible edges and checks their distance from the click. Override this - * method to provide a more efficient implementation. - * - * @param x - * @param y - * @param maxDistance - * @return Edge closest to the click. - */ - public Edge getEdge(double x, double y, double maxDistance){ - double minDistance = maxDistance * maxDistance; - Edge closest = null; - for (Iterator iter = getVisibleEdges().iterator(); iter.hasNext();){ - Edge e = (Edge) iter.next(); - // if anyone uses a hyperedge, this is too complex. - if (e.numVertices() != 2) continue; - // Could replace all this set stuff with getFrom_internal() etc. - Set vertices = e.getIncidentVertices(); - Iterator vertexIterator = vertices.iterator(); - Vertex v1 = (Vertex) vertexIterator.next(); - Vertex v2 = (Vertex) vertexIterator.next(); - // Get coords - double x1 = getX(v1); - double y1 = getY(v1); - double x2 = getX(v2); - double y2 = getY(v2); - // Calculate location on line closest to (x,y) - // First, check that v1 and v2 are not coincident. - if (x1 == x2 && y1 == y2) continue; - double b = ((y - y1) * (y2 - y1) + (x - x1) * (x2 - x1)) / ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - // - double distance2; // square of the distance - if (b <= 0) - distance2 = (x - x1) * (x - x1) + (y - y1) * (y - y1); - else if (b >= 1) - distance2 = (x - x2) * (x - x2) + (y - y2) * (y - y2); - else{ - double x3 = x1 + b * (x2 - x1); - double y3 = y1 + b * (y2 - y1); - distance2 = (x - x3) * (x - x3) + (y - y3) * (y - y3); - } + /** + * Returns the set of vertices from the original <tt>getGraph</tt> that + * are now visible. These vertices are equivalent to the ones passed in + * from the <tt>Graph</tt> argument to <tt>applyFilter()</tt>. + */ + public Set getVisibleVertices(){ + return visibleVertices; + } - if (distance2 < minDistance){ - minDistance = distance2; - closest = e; - } + /** + * Forcibly moves a vertex to the (x,y) location by setting its x and y + * locations to the inputted location. Does not add the vertex to the + * "dontmove" list, and (in the default implementation) does not make any + * adjustments to the rest of the graph. + */ + public void forceMove(Vertex picked, int x, int y){ + if (!fix(picked)) { + Coordinates coord = getCoordinates(picked); + coord.setX(x); + coord.setY(y); + } } - return closest; - } - /** - * Accessor for the graph that represets all vertices. - * - * @return the graph that contains all vertices. - */ - public Graph getGraph(){ - return baseGraph; - } + /** + * Adds the vertex to the DontMove list + */ + public void lockVertex(Vertex v){ + dontmove.add(v); + } - /** - * Returns the set of edges from the original <tt>getGraph</tt> that are - * now visible. These edges are equivalent to the ones passed in from the - * <tt>Graph</tt> argument to <tt>applyFilter()</tt>. - */ - public Set getVisibleEdges(){ - return visibleEdges; - } + /** + * Removes the vertex from the DontMove list + */ + public void unlockVertex(Vertex v){ + if (!fix(v)) { + dontmove.remove(v); + } + } - /** - * Returns the set of vertices from the original <tt>getGraph</tt> that - * are now visible. These vertices are equivalent to the ones passed in - * from the <tt>Graph</tt> argument to <tt>applyFilter()</tt>. - */ - public Set getVisibleVertices(){ - return visibleVertices; - } + public void setFix(Vertex v){ + fix.add(v); + dontmove.add(v); + } - /** - * Forcibly moves a vertex to the (x,y) location by setting its x and y - * locations to the inputted location. Does not add the vertex to the - * "dontmove" list, and (in the default implementation) does not make any - * adjustments to the rest of the graph. - */ - public void forceMove(Vertex picked, int x, int y){ - if (!fix(picked)){ - Coordinates coord = getCoordinates(picked); - coord.setX(x); - coord.setY(y); + public void unsetFix(Vertex v){ + fix.remove(v); + dontmove.remove(v); } - } - /** - * Adds the vertex to the DontMove list - */ - public void lockVertex(Vertex v){ - dontmove.add(v); - } + /** + * Applies the filter to the current graph. The default implementation + * merely makes fewer vertices available to the <tt>getVisibleVertices</tt> + * and <tt>getVisibleEdges</tt> methods. + * + * @see Layout#applyFilter(Graph g) + */ + public synchronized void applyFilter(Graph g){ + this.visibleGraph = g; + this.visibleVertices = GraphUtils.getEqualVertices(g.getVertices(), baseGraph); + this.visibleEdges = GraphUtils.getEqualEdges(g.getEdges(), baseGraph); + } - /** - * Removes the vertex from the DontMove list - */ - public void unlockVertex(Vertex v){ - if (!fix(v)){ - dontmove.remove(v); + /** + * @author FLAW + * @return the notCalculatedVertices + */ + public Set getNotCalculatedVertices(){ + return notCalculatedVertices; } - } - public void setFix(Vertex v){ - fix.add(v); - dontmove.add(v); - } + /** + * @author FLAW + * @param v + * @return is Vertex not calculated + */ + public boolean isNotCalculatedVertx(Vertex v){ + return notCalculatedVertices.contains(v); + } - public void unsetFix(Vertex v){ - fix.remove(v); - dontmove.remove(v); - } + /** + * @author FLAW + * @param v + */ + public void addNotCalculatedVertex(Vertex v){ + notCalculatedVertices.add(v); + } - /** - * Applies the filter to the current graph. The default implementation - * merely makes fewer vertices available to the <tt>getVisibleVertices</tt> - * and <tt>getVisibleEdges</tt> methods. - * - * @see Layout#applyFilter(Graph g) - */ - public synchronized void applyFilter(Graph g){ - this.visibleGraph = g; - this.visibleVertices = GraphUtils.getEqualVertices(g.getVertices(), baseGraph); - this.visibleEdges = GraphUtils.getEqualEdges(g.getEdges(), baseGraph); - } + /** + * @author FLAW + * @param v + */ + public void removeNotCalculatedVertex(Vertex v){ + notCalculatedVertices.remove(v); + } } \ No newline at end of file Modified: trunk/magicmapclient/src/edu/uci/ics/jung/visualization/SpringLayout.java =================================================================== --- trunk/magicmapclient/src/edu/uci/ics/jung/visualization/SpringLayout.java 2007-12-20 12:51:48 UTC (rev 695) +++ trunk/magicmapclient/src/edu/uci/ics/jung/visualization/SpringLayout.java 2007-12-20 12:59:48 UTC (rev 696) @@ -1,9 +1,8 @@ /* * Copyright (c) 2003, the JUNG Project and the Regents of the University of - * California All rights reserved. - * - * This software is open-source under the BSD license; see either "license.txt" - * or http://jung.sourceforge.net/license.txt for a description. + * California All rights reserved. This software is open-source under the BSD + * license; see either "license.txt" or http://jung.sourceforge.net/license.txt + * for a description. */ package edu.uci.ics.jung.visualization; @@ -34,508 +33,521 @@ */ public class SpringLayout extends AbstractLayout implements LayoutMutable { - private static final Object SPRING_KEY = "temp_edu.uci.ics.jung.Spring_Visualization_Key"; - protected double stretch = 85.0; //70; // 0.70; + private static final Object SPRING_KEY = "temp_edu.uci.ics.jung.Spring_Visualization_Key"; + protected double stretch = 85.0; //70; // 0.70; - protected LengthFunction lengthFunction; - protected RepulsionFunction repulsionFunction; // TH - protected ForceFunction forceFunction; //TH - protected CanLeaveMapFunction leaveFunction; + protected LengthFunction lengthFunction; + protected RepulsionFunction repulsionFunction; // TH + protected ForceFunction forceFunction; //TH + protected CanLeaveMapFunction leaveFunction; - //protected int repulsion_range = 100; - //protected double force_multiplier = 1.0 / 3.0; + //protected int repulsion_range = 100; + //protected double force_multiplier = 1.0 / 3.0; - /** - * Returns the status. - */ - public String getStatus(){ - return null; - } + /** + * Returns the status. + */ + public String getStatus(){ + return null; + } - /** - * Constructor for a SpringLayout for a raw graph with associated - * dimension--the input knows how big the graph is. Defaults to the unit - * length function. - */ - public SpringLayout(Graph g) { - this(g, UNITLENGTHFUNCTION, NoRepulsionFunction); - } + /** + * Constructor for a SpringLayout for a raw graph with associated + * dimension--the input knows how big the graph is. Defaults to the unit + * length function. + */ + public SpringLayout(Graph g) { + this(g, UNITLENGTHFUNCTION, NoRepulsionFunction); + } - /** - * Constructor for a SpringLayout for a raw graph with associated component. - * - * @param g - * the input Graph - * @param f - * the length function - */ - public SpringLayout(Graph g, LengthFunction f) { - this(g,f,NoRepulsionFunction); - } + /** + * Constructor for a SpringLayout for a raw graph with associated component. + * + * @param g + * the input Graph + * @param f + * the length function + */ + public SpringLayout(Graph g, LengthFunction f) { + this(g, f, NoRepulsionFunction); + } - /** - * Constructor for a SpringLayout for a raw graph with associated component. - * - * @param g - * the input Graph - * @param f - * the length function - * @param r - * the repulsion function - */ - public SpringLayout(Graph g, LengthFunction f, RepulsionFunction r) { - super(g); - this.lengthFunction = f; - this.repulsionFunction = r; - this.forceFunction = DefaultForceFunction; - this.leaveFunction = new CanLeaveMapFunction() { + /** + * Constructor for a SpringLayout for a raw graph with associated component. + * + * @param g + * the input Graph + * @param f + * the length function + * @param r + * the repulsion function + */ + public SpringLayout(Graph g, LengthFunction f, RepulsionFunction r) { + super(g); + this.lengthFunction = f; + this.repulsionFunction = r; + this.forceFunction = DefaultForceFunction; + this.leaveFunction = new CanLeaveMapFunction() { - public boolean canLeave(Vertex v){ - return false; - } - }; - } + public boolean canLeave(Vertex v){ + return false; + } + }; + } - /** - * @return the current value for the stretch parameter - * @see #setStretch(double) - */ - public double getStretch(){ - return stretch; - } + /** + * @return the current value for the stretch parameter + * @see #setStretch(double) + */ + public double getStretch(){ + return stretch; + } - /** - * <p>Sets the stretch parameter for this instance. This value - * specifies how much the degrees of an edge's incident vertices - * should influence how easily the endpoints of that edge - * can move (that is, that edge's tendency to change its length).</p> - * - * <p>The default value is 0.70. Positive values less than 1 cause - * high-degree vertices to move less than low-degree vertices, and - * values > 1 cause high-degree vertices to move more than - * low-degree vertices. Negative values will have unpredictable - * and inconsistent results.</p> - * @param stretch - */ - public void setStretch(double stretch){ - this.stretch = stretch; - } + /** + * <p>Sets the stretch parameter for this instance. This value + * specifies how much the degrees of an edge's incident vertices + * should influence how easily the endpoints of that edge + * can move (that is, that edge's tendency to change its length).</p> + * + * <p>The default value is 0.70. Positive values less than 1 cause + * high-degree vertices to move less than low-degree vertices, and + * values > 1 cause high-degree vertices to move more than + * low-degree vertices. Negative values will have unpredictable + * and inconsistent results.</p> + * @param stretch + */ + public void setStretch(double stretch){ + this.stretch = stretch; + } - public CanLeaveMapFunction getLeaveFunction(){ - return leaveFunction; - } + public CanLeaveMapFunction getLeaveFunction(){ + return leaveFunction; + } - public void setLeaveFunction(CanLeaveMapFunction leaveFunction){ - this.leaveFunction = leaveFunction; - } + public void setLeaveFunction(CanLeaveMapFunction leaveFunction){ + this.leaveFunction = leaveFunction; + } - protected void initialize_local(){ - for (Iterator iter = getGraph().getEdges().iterator(); iter.hasNext();){ - Edge e = (Edge) iter.next(); - SpringEdgeData sed = getSpringData(e); - if (sed == null){ - sed = new SpringEdgeData(e); - e.addUserDatum(getSpringKey(), sed, UserData.REMOVE); - } - calcEdgeLength(sed, lengthFunction); + protected void initialize_local(){ + for (Iterator iter = getGraph().getEdges().iterator(); iter.hasNext();) { + Edge e = (Edge) iter.next(); + SpringEdgeData sed = getSpringData(e); + if (sed == null) { + sed = new SpringEdgeData(e); + e.addUserDatum(getSpringKey(), sed, UserData.REMOVE); + } + calcEdgeLength(sed, lengthFunction); + } } - } - Object key = null; + Object key = null; - public Object getSpringKey(){ - if (key == null) key = new Pair(this, SPRING_KEY); - return key; - } + public Object getSpringKey(){ + if (key == null) key = new Pair(this, SPRING_KEY); + return key; + } - /** - * (non-Javadoc) - * - * @see edu.uci.ics.jung.visualization.AbstractLayout#initialize_local_vertex(edu.uci.ics.jung.graph.Vertex) - */ - protected void initialize_local_vertex(Vertex v){ - SpringVertexData vud = getSpringData(v); - if (vud == null){ - vud = new SpringVertexData(); - v.addUserDatum(getSpringKey(), vud, UserData.REMOVE); + /** + * (non-Javadoc) + * + * @see edu.uci.ics.jung.visualization.AbstractLayout#initialize_local_vertex(edu.uci.ics.jung.graph.Vertex) + */ + protected void initialize_local_vertex(Vertex v){ + SpringVertexData vud = getSpringData(v); + if (vud == null) { + vud = new SpringVertexData(); + v.addUserDatum(getSpringKey(), vud, UserData.REMOVE); + } } - } - /* ------------------------- */ + /* ------------------------- */ - protected void calcEdgeLength(SpringEdgeData sed, LengthFunction f){ - sed.length = f.getLength(sed.e); - } + protected void calcEdgeLength(SpringEdgeData sed, LengthFunction f){ + sed.length = f.getLength(sed.e); + } - /* ------------------------- */ + /* ------------------------- */ - /** - * Relaxation step. Moves all nodes a smidge. - */ - public void advancePositions(){ - for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();){ - Vertex v = (Vertex) iter.next(); - SpringVertexData svd = getSpringData(v); - if (svd == null){ - System.out.println("How confusing!"); - continue; - } - svd.dx /= 4; - svd.dy /= 4; - svd.edgedx = svd.edgedy = 0; - svd.repulsiondx = svd.repulsiondy = 0; - } + /** + * Relaxation step. Moves all nodes a smidge. + */ + public void advancePositions(){ + for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();) { + Vertex v = (Vertex) iter.next(); + if (isNotCalculatedVertx(v)) { + continue; + } + SpringVertexData svd = getSpringData(v); + if (svd == null) { + System.out.println("How confusing!"); + continue; + } + svd.dx /= 4; + svd.dy /= 4; + svd.edgedx = svd.edgedy = 0; + svd.repulsiondx = svd.repulsiondy = 0; + } - try{ - SwingUtilities.invokeAndWait(new Runnable() { + try { + SwingUtilities.invokeAndWait(new Runnable() { - public void run(){ - relaxEdges(); - calculateRepulsion(); - moveNodes(); + public void run(){ + relaxEdges(); + calculateRepulsion(); + moveNodes(); + } + }); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - }); - } catch (InterruptedException e){ - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InvocationTargetException e){ - // TODO Auto-generated catch block - e.printStackTrace(); + } - } + protected Vertex getAVertex(Edge e){ + Vertex v = (Vertex) e.getIncidentVertices().iterator().next(); + return v; + } - protected Vertex getAVertex(Edge e){ - Vertex v = (Vertex) e.getIncidentVertices().iterator().next(); - return v; - } + protected void relaxEdges(){ + for (Iterator i = getVisibleEdges().iterator(); i.hasNext();) { + Edge e = (Edge) i.next(); - protected void relaxEdges(){ - for (Iterator i = getVisibleEdges().iterator(); i.hasNext();){ - Edge e = (Edge) i.next(); + Vertex v1 = getAVertex(e); + Vertex v2 = e.getOpposite(v1); - Vertex v1 = getAVertex(e); - Vertex v2 = e.getOpposite(v1); + double vx = getX(v1) - getX(v2); + double vy = getY(v1) - getY(v2); + double len = Math.sqrt(vx * vx + vy * vy); - double vx = getX(v1) - getX(v2); - double vy = getY(v1) - getY(v2); - double len = Math.sqrt(vx * vx + vy * vy); + double desiredLen = getLength(e); - double desiredLen = getLength(e); + // round from zero, if needed [zero would be Bad.]. + len = (len == 0) ? .0001 : len; - // round from zero, if needed [zero would be Bad.]. - len = (len == 0) ? .0001 : len; + double force_multiplier = forceFunction.getForce(v1, v2); - double force_multiplier = forceFunction.getForce(v1, v2); + double f = force_multiplier * (desiredLen - len) / len; - double f = force_multiplier * (desiredLen - len) / len; + f = f * Math.pow(stretch / 100.0, (v1.degree() + v2.degree() - 2)); - f = f * Math.pow(stretch / 100.0, (v1.degree() + v2.degree() - 2)); + // the actual movement distance 'dx' is the force multiplied by the + // distance to go. + double dx = f * vx; + double dy = f * vy; + SpringVertexData v1D, v2D; + v1D = getSpringData(v1); + v2D = getSpringData(v2); - // the actual movement distance 'dx' is the force multiplied by the - // distance to go. - double dx = f * vx; - double dy = f * vy; - SpringVertexData v1D, v2D; - v1D = getSpringData(v1); - v2D = getSpringData(v2); + SpringEdgeData sed = getSpringData(e); + sed.f = f; - SpringEdgeData sed = getSpringData(e); - sed.f = f; + v1D.edgedx += dx; + v1D.edgedy += dy; + v2D.edgedx += -dx; + v2D.edgedy += -dy; + } - v1D.edgedx += dx; - v1D.edgedy += dy; - v2D.edgedx += -dx; - v2D.edgedy += -dy; } - } + protected void calculateRepulsion(){ + for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();) { + Vertex v = (Vertex) iter.next(); + if (isNotCalculatedVertx(v)) { + continue; + } + if (dontMove(v)) continue; - protected void calculateRepulsion(){ - for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext();){ - Vertex v = (Vertex) iter.next(); - if (dontMove(v)) continue; + SpringVertexData svd = getSpringData(v); + double dx = 0, dy = 0; - SpringVertexData svd = getSpringData(v); - double dx = 0, dy = 0; + double repulsion_range = 0; - double repulsion_range = 0; + for (Iterator iter2 = getVisibleVertices().iterator(); iter2.hasNext();) { - for (Iterator iter2 = getVisibleVertices().iterator(); iter2.hasNext();){ + Vertex v2 = (Vertex) iter2.next(); + if (v == v2) continue; - Vertex v2 = (Vertex) iter2.next(); - if (v == v2) continue; + // TH + repulsion_range = this.repulsionFunction.getRepulsion(v, v2); - // TH - repulsion_range = this.repulsionFunction.getRepulsion(v, v2); - - double vx = getX(v) - getX(v2); - double vy = getY(v) - getY(v2); - double distance = vx * vx + vy * vy; - if (distance == 0){ - dx += Math.random(); - dy += Math.random(); - } else if (distance < repulsion_range * repulsion_range){ - double factor = 1; - dx += factor * vx / Math.pow(distance, 2); - dy += factor * vy / Math.pow(distance, 2); + double vx = getX(v) - getX(v2); + double vy = getY(v) - getY(v2); + double distance = vx * vx + vy * vy; + if (distance == 0) { + dx += Math.random(); + dy += Math.random(); + } else if (distance < repulsion_range * repulsion_range) { + double factor = 1; + dx += factor * vx / Math.pow(distance, 2); + dy += factor * vy / Math.pow(distance, 2); + } + } + double dlen = dx * dx + dy * dy; + if (dlen > 0) { + dlen = Math.sqrt(dlen) / 2; + svd.repulsiondx += dx / dlen; + svd.repulsiondy += dy / dlen; + } } - } - double dlen = dx * dx + dy * dy; - if (dlen > 0){ - dlen = Math.sqrt(dlen) / 2; - svd.repulsiondx += dx / dlen; - svd.repulsiondy += dy / dlen; - } } - } - protected void moveNodes(){ + protected void moveNodes(){ - synchronized (getCurrentSize()){ + synchronized (getCurrentSize()) { - for (Iterator i = getVisibleVertices().iterator(); i.hasNext();){ - Vertex v = (Vertex) i.next(); - if (dontMove(v)) continue; - SpringVertexData vd = getSpringData(v); - Coordinates xyd = getCoordinates(v); + for (Iterator i = getVisibleVertices().iterator(); i.hasNext();) { + Vertex v = (Vertex) i.next(); + if (isNotCalculatedVertx(v)) { + continue; + } + if (dontMove(v)) continue; + SpringVertexData vd = getSpringData(v); + Coordinates xyd = getCoordinates(v); - vd.dx += vd.repulsiondx + vd.edgedx; - vd.dy += vd.repulsiondy + vd.edgedy; + vd.dx += vd.repulsiondx + vd.edgedx; + vd.dy += vd.repulsiondy + vd.edgedy; - // keeps nodes from moving any faster than 5 per time unit - xyd.addX(Math.max(-5, Math.min(5, vd.dx))); - xyd.addY(Math.max(-5, Math.min(5, vd.dy))); + // keeps nodes from moving any faster than 5 per time unit + xyd.addX(Math.max(-5, Math.min(5, vd.dx))); + xyd.addY(Math.max(-5, Math.min(5, vd.dy))); - int width = getCurrentSize().width; - int height = getCurrentSize().height; + int width = getCurrentSize().width; + int height = getCurrentSize().height; - // Bestimmte Knoten sollen die Karte verlassen dr\xFCfen - if (!leaveFunction.canLeave(v)){ - if (xyd.getX() < 0){ - xyd.setX(0); - } else if (xyd.getX() > width){ - xyd.setX(width); - } - if (xyd.getY() < 0){ - xyd.setY(0); - } else if (xyd.getY() > height){ - xyd.setY(height); - } + // Bestimmte Knoten sollen die Karte verlassen dr\xFCfen + if (!leaveFunction.canLeave(v)) { + if (xyd.getX() < 0) { + xyd.setX(0); + } else if (xyd.getX() > width) { + xyd.setX(width); + } + if (xyd.getY() < 0) { + xyd.setY(0); + } else if (xyd.getY() > height) { + xyd.setY(height); + } + } + + } } - } } - } + public SpringVertexData getSpringData(Vertex v){ + return (SpringVertexData) (v.getUserDatum(getSpringKey())); + } - public SpringVertexData getSpringData(Vertex v){ - return (SpringVertexData) (v.getUserDatum(getSpringKey())); - } + public SpringEdgeData getSpringData(Edge e){ + try { + return (SpringEdgeData) (e.getUserDatum(getSpringKey())); + } catch (ClassCastException cce) { + System.out.println(e.getUserDatum(getSpringKey()).getClass()); + throw cce; + } + } - public SpringEdgeData getSpringData(Edge e){ - try{ - return (SpringEdgeData) (e.getUserDatum(getSpringKey())); - } catch (ClassCastException cce){ - System.out.println(e.getUserDatum(getSpringKey()).getClass()); - throw cce; + public double getLength(Edge e){ + double d = ((SpringEdgeData) e.getUserDatum(getSpringKey())).length; + return d; } - } - public double getLength(Edge e){ - double d = ((SpringEdgeData) e.getUserDatum(getSpringKey())).length; - return d; - } + public void setLength(Edge e, double length){ + ((SpringEdgeData) e.getUserDatum(getSpringKey())).length = length; + } - public void setLength(Edge e, double length){ - ((SpringEdgeData) e.getUserDatum(getSpringKey())).length = length; - } + /* --------------- Repulsion Function------------------ */ - /* --------------- Repulsion Function------------------ */ + /** + * Extension for PACW: Make the Repulsion configurable. + * + * + * @author thuebner + */ + public static interface RepulsionFunction { - /** - * Extension for PACW: Make the Repulsion configurable. - * - * - * @author thuebner - */ - public static interface RepulsionFunction { + public double getRepulsion(Vertex v1, Vertex v2); + } + public static RepulsionFunction NoRepulsionFunction = new RepulsionFunction() { - public double getRepulsion(Vertex v1, Vertex v2); - } - public static RepulsionFunction NoRepulsionFunction = new RepulsionFunction(){ - public double getRepulsion(Vertex v1, Vertex v2) { - return 0; - } - }; - /** - * Extension for PACW: Make the Repulsion configurable. - * - * - * @author thuebner - */ - public static interface ForceFunction { + public double getRepulsion(Vertex v1, Vertex v2){ + return 0; + } + }; /** - * Sets the force multiplier for this instance. This value is used to - * specify how strongly an edge "wants" to be its default length - * (higher values indicate a greater attraction for the default length), - * which affects how much its endpoints move at each timestep. - * The default value is 1/3. A value of 0 turns off any attempt by the - * layout to cause edges to conform to the default length. Negative - * values cause long edges to get longer and short edges to get shorter; use - * at your own risk. - * @param v1 - * @param v2 + * Extension for PACW: Make the Repulsion configurable. + * + * + * @author thuebner */ + public static interface ForceFunction { - public double getForce(Vertex v1, Vertex v2); - } + /** + * Sets the force multiplier for this instance. This value is used to + * specify how strongly an edge "wants" to be its default length + * (higher values indicate a greater attraction for the default length), + * which affects how much its... [truncated message content] |
From: <fle...@us...> - 2007-12-20 12:52:31
|
Revision: 695 http://magicmap.svn.sourceforge.net/magicmap/?rev=695&view=rev Author: flederohr Date: 2007-12-20 04:51:48 -0800 (Thu, 20 Dec 2007) Log Message: ----------- improved ServerDialog Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-30 15:38:32 UTC (rev 694) +++ trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-12-20 12:51:48 UTC (rev 695) @@ -11,7 +11,6 @@ import javax.swing.ButtonGroup; import javax.swing.JButton; -import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; @@ -54,11 +53,11 @@ private JRadioButton useServer; - private JLabel useNoServerLabel; + private JLabel useNoServerLabel; - private JSeparator seperator; + private JSeparator seperator; - private ButtonGroup radioButtonGroup; + private ButtonGroup radioButtonGroup; /** * Static method to create and open a ConnectServerDialog @@ -114,18 +113,18 @@ builder.setTopBottomDistance("noserver", "header", 20); useNoServer.setActionCommand("USENOSERVER"); useNoServer.addActionListener(this); - + // Label f\xFCr "lokale Verbindung" useNoServerLabel = builder.addLabel(GUIUtils.i18n("nonserverconnect"), "noserverlabel"); builder.setLeftRightDistance("noserverlabel", "noserver", 10); builder.setTopTopDistance("noserverlabel", "noserver", 0); - + // Trennlinie seperator = builder.addSeparator("seperator"); builder.setLeft("seperator", 3); builder.setRightRightDistance("seperator", null, -3); builder.setTopBottomDistance("seperator", "noserver,noserverlabel", 10); - + // RadioButton f\xFCr "Server-Verbindung" useServer = new JRadioButton(); builder.add(useServer, "server"); @@ -138,7 +137,7 @@ // Hostname hostname = builder.addComboBox(Settings.getDefaultServerList(), "hostcombo"); builder.addLabel(GUIUtils.i18n("hostname"), "hostlabel", hostname); - builder.setLeftLeftDistance("hostlabel","noserverlabel", 0); + builder.setLeftLeftDistance("hostlabel", "noserverlabel", 0); hostname.setEditable(true); builder.setLeftRightDistance("hostcombo", "hostlabel", 15); builder.setRightLeftDistance("hostcombo", "hostcombo", 178); @@ -151,7 +150,7 @@ // Port port = builder.addTextField("portedit"); builder.addLabel(GUIUtils.i18n("port"), "portlabel", port); - builder.setLeftRightDistance("portlabel","hostcombo", 10); + builder.setLeftRightDistance("portlabel", "hostcombo", 10); builder.setLeftRightDistance("portedit", "portlabel", 5); builder.setTopTopDistance("portlabel", "hostlabel,hostcombo", 0); builder.setTopTopDistance("portedit", "hostlabel,hostcombo", 0); @@ -161,8 +160,8 @@ // Clientname clientname = builder.addTextField("clientname"); builder.addLabel(GUIUtils.i18n("clientname"), "clientlabel", clientname); - builder.setLeftLeftDistance("clientlabel","hostlabel", 0); - builder.setLeftLeftDistance("clientname","hostcombo", 0); + builder.setLeftLeftDistance("clientlabel", "hostlabel", 0); + builder.setLeftLeftDistance("clientname", "hostcombo", 0); builder.setRightRightDistance("clientname", "hostcombo", 0); builder.setTopBottomDistance("clientlabel", "hostlabel,hostcombo", 10); builder.setTopBottomDistance("clientname", "hostlabel,hostcombo", 10); @@ -172,8 +171,8 @@ password = new JPasswordField(); builder.add(password, "password"); builder.addLabel(GUIUtils.i18n("password"), "passwordlabel", password); - builder.setLeftLeftDistance("passwordlabel","clientlabel", 0); - builder.setLeftLeftDistance("password","clientname", 0); + builder.setLeftLeftDistance("passwordlabel", "clientlabel", 0); + builder.setLeftLeftDistance("password", "clientname", 0); builder.setRightRightDistance("password", "hostcombo", 0); builder.setTopBottomDistance("passwordlabel", "clientlabel,clientname", 10); builder.setTopBottomDistance("password", "clientlabel,clientname", 10); @@ -183,7 +182,7 @@ radioButtonGroup = new ButtonGroup(); radioButtonGroup.add(useNoServer); radioButtonGroup.add(useServer); - + // OK / Abbrechen if (info.useNoServer) ok = builder.createButton(GUIUtils.i18n("continue"), "OK", this); @@ -197,7 +196,7 @@ builder.setBottomBottomDistance("okcancel", null, -10); // Defaults setzen - this.password.setText(serverConnectionInfo.password); + // this.password.setText(serverConnectionInfo.password); this.clientname.setText(serverConnectionInfo.name); this.hostname.setSelectedItem(serverConnectionInfo.hostname); this.port.setText("" + serverConnectionInfo.port); @@ -222,6 +221,10 @@ serverConnectionInfo.password = new String(this.password.getPassword()); serverConnectionInfo.name = this.clientname.getText(); serverConnectionInfo.useNoServer = this.useNoServer.isSelected(); + if (useNoServer.isSelected()) { + if (serverConnectionInfo.name == "") serverConnectionInfo.name = System.getProperty("user.name"); + serverConnectionInfo.password = System.getProperty("user.name"); + } try { serverConnectionInfo.port = Integer.parseInt(this.port.getText()); } catch (NumberFormatException n) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fle...@us...> - 2007-11-30 16:18:04
|
Revision: 694 http://magicmap.svn.sourceforge.net/magicmap/?rev=694&view=rev Author: flederohr Date: 2007-11-30 07:38:32 -0800 (Fri, 30 Nov 2007) Log Message: ----------- Use of external positioninginformations for foreign clients. Sending of local positioninginformations to the server. Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java trunk/magicmapclient/src/net/sf/magicmap/client/controller/SOAPServerManager.java trunk/magicmapclient/src/net/sf/magicmap/client/controller/ServerPoller.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java 2007-11-19 14:49:58 UTC (rev 693) +++ trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java 2007-11-30 15:38:32 UTC (rev 694) @@ -39,7 +39,7 @@ */ public class PollHandler implements ServerPollerListener { - private Controller controller; + private Controller controller; private final static Collection<PollHandlerListener> listeners = new ArrayList<PollHandlerListener>(); @@ -100,7 +100,7 @@ return; } log.info("Position with id " + position.getId() + " was deleted but not handled."); - firePositionCreatedOrUpdatedOrDeleted(); + firePositionCreatedOrUpdatedOrDeleted(); return; } else { // Neues Positionsobjekt oder altes wurde @@ -211,7 +211,7 @@ // Alle momentan gesehenen AccessPoints // merken - ArrayList <AccessPointNode> seenAps = location.getSeenAccessPoints(); + ArrayList<AccessPointNode> seenAps = location.getSeenAccessPoints(); for (SimpleScanResultDTO r : sr) { String mac = r.getMacAP(); // Gibt es ggf. einen AP mit der @@ -301,6 +301,7 @@ client = new ClientNode(nodeModel); client.setMacAddress(clientdto.getMac()); client.setName(clientdto.getName()); + client.setId(position.getId()); nodeModel.addNode(client); } @@ -308,12 +309,12 @@ // client.setPosition(position.getPosX().intValue(), // position.getPosY().intValue()); - if (position.isFixed()) { - // Client wurde fixiert - client.setFix(true); - client.setPosition(position.getPosX(), position.getPosY(), position.getPosZ()); - } else - client.setFix(false); + // Position \xE4ndern + client.setPosition(position.getPosX(), position.getPosY(), position.getPosZ()); + // FixierungsStatus setzen + client.setFix(position.isFixed()); + + // TODO: ist die id hier wirklich notwendig? client.setId(position.getId()); // Signalst\xE4rken usw. verwaltet der scannende @@ -327,7 +328,7 @@ SignalCharacterDTO sc = position.getCharacter(); SimpleScanResultDTO[] sr = sc.getSimpleScanResults(); // Alle momentan gesehenen AccessPoints merken - + if (sr != null) { double[] signalLevels = new double[sr.length]; String[] macs = new String[sr.length]; @@ -435,7 +436,7 @@ public static void addListener(PollHandlerListener listener){ listeners.add(listener); } - + public void removeListener(PollHandlerListener listener){ listeners.remove(listener); } @@ -478,5 +479,5 @@ phl.geoPosCreatedOrUpdatedOrDeleted(); } } - + } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/controller/SOAPServerManager.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/controller/SOAPServerManager.java 2007-11-19 14:49:58 UTC (rev 693) +++ trunk/magicmapclient/src/net/sf/magicmap/client/controller/SOAPServerManager.java 2007-11-30 15:38:32 UTC (rev 694) @@ -8,6 +8,9 @@ import java.rmi.RemoteException; import java.util.Collection; +import edu.uci.ics.jung.graph.Vertex; +import edu.uci.ics.jung.visualization.SpringLayout; + import net.sf.magicmap.client.delegate.MapDelegate; import net.sf.magicmap.client.delegate.PositionDelegate; import net.sf.magicmap.client.delegate.SessionDelegate; @@ -28,6 +31,8 @@ import net.sf.magicmap.client.interfaces.ServerConnectCallback; import net.sf.magicmap.client.interfaces.ServerDisconnectCallback; import net.sf.magicmap.client.meta.MapInfo; +import net.sf.magicmap.client.model.location.jung.JungNodePlacer; +import net.sf.magicmap.client.model.node.ClientNode; import net.sf.magicmap.client.model.node.GeoPos; import net.sf.magicmap.client.utils.Settings; import net.sf.magicmap.client.utils.Version; @@ -614,8 +619,12 @@ synchronized (SOAPServerManager.mutex) { if (!isConnected()) return; try { - int x = SOAPServerManager.this.controller.getClientPosX(); - int y = SOAPServerManager.this.controller.getClientPosY(); + // TODO: abfrage ist im moment nicht aus dem Nodemodel m\xF6glich, daher behelfsl\xF6sung direkt aus dem Layout + ClientNode client = Controller.getInstance().getClient(); + Vertex clientVertex = ((JungNodePlacer) Controller.getInstance().getNodeModel().getNodePlacer()).findVertex(client); + SpringLayout layout = ((JungNodePlacer) Controller.getInstance().getNodeModel().getNodePlacer()).getLayout(); + int x = (int) layout.getX(clientVertex); + int y = (int) layout.getY(clientVertex); int z = SOAPServerManager.this.controller.getClientPosZ(); if (x < 0) x = 0; Modified: trunk/magicmapclient/src/net/sf/magicmap/client/controller/ServerPoller.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/controller/ServerPoller.java 2007-11-19 14:49:58 UTC (rev 693) +++ trunk/magicmapclient/src/net/sf/magicmap/client/controller/ServerPoller.java 2007-11-30 15:38:32 UTC (rev 694) @@ -40,8 +40,8 @@ } public void start(){ - this.timer.scheduleAtFixedRate(builderTimerTask(), Settings.POLL_DELAY, Settings.getPollIntevall()); - this.timer.scheduleAtFixedRate(geoPointsTimerTask(), Settings.POLL_DELAY + 1000, 120000); + this.timer.scheduleAtFixedRate(pollPositionsTimerTask(), Settings.POLL_DELAY, Settings.getPollIntevall()); + this.timer.scheduleAtFixedRate(pollGeoPointsTimerTask(), Settings.POLL_DELAY + 1000, 120000); } public void stop(){ @@ -54,7 +54,7 @@ * um nach \xC4nderungen zu fragen. * @return */ - public TimerTask builderTimerTask(){ + public TimerTask pollPositionsTimerTask(){ return new TimerTask() { @Override @@ -72,7 +72,7 @@ }; } - public TimerTask geoPointsTimerTask(){ + public TimerTask pollGeoPointsTimerTask(){ return new TimerTask() { @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-11-19 15:02:42
|
Revision: 692 http://magicmap.svn.sourceforge.net/magicmap/?rev=692&view=rev Author: anweiss Date: 2007-11-19 06:33:23 -0800 (Mon, 19 Nov 2007) Log Message: ----------- added i18n Strings for driver details Modified Paths: -------------- trunk/magicmapclient/res/screentext.properties trunk/magicmapclient/res/screentext_de_DE.properties Modified: trunk/magicmapclient/res/screentext.properties =================================================================== --- trunk/magicmapclient/res/screentext.properties 2007-11-09 13:27:52 UTC (rev 691) +++ trunk/magicmapclient/res/screentext.properties 2007-11-19 14:33:23 UTC (rev 692) @@ -128,4 +128,13 @@ plugins.dependencies=Dependencies plugins.detailview=Detail View plugins.name=Name -plugins.version=Version \ No newline at end of file +plugins.version=Version + +interface.Driver=Driver +interface.Vendor=Vendor +interface.Provider=Provider +interface.Date=Date +interface.Version=Version +interface.INF=INF file +interface.Type=Type +interface.SupportedTypes=Radio types supported \ No newline at end of file Modified: trunk/magicmapclient/res/screentext_de_DE.properties =================================================================== --- trunk/magicmapclient/res/screentext_de_DE.properties 2007-11-09 13:27:52 UTC (rev 691) +++ trunk/magicmapclient/res/screentext_de_DE.properties 2007-11-19 14:33:23 UTC (rev 692) @@ -128,4 +128,13 @@ plugins.dependencies=Abh\xE4ngigkeiten plugins.detailview=Detailansicht plugins.name=Name -plugins.version=Version \ No newline at end of file +plugins.version=Version + +interface.Driver=Treiber +interface.Vendor=Hersteller +interface.Provider=Anbieter +interface.Date=Datum +interface.Version=Version +interface.INF=INF-Datei +interface.Type=Typ +interface.SupportedTypes=Unterst\xFCtzte Funktypen \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-11-19 14:50:22
|
Revision: 693 http://magicmap.svn.sourceforge.net/magicmap/?rev=693&view=rev Author: anweiss Date: 2007-11-19 06:49:58 -0800 (Mon, 19 Nov 2007) Log Message: ----------- Added a class which stores the keys that should be used by stumblers in the infos hashmap. Previous commit did not work?!? Added Paths: ----------- trunk/magicmapclient/src/net/sf/magicmap/client/utils/DriverInformations.java Added: trunk/magicmapclient/src/net/sf/magicmap/client/utils/DriverInformations.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/utils/DriverInformations.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/utils/DriverInformations.java 2007-11-19 14:49:58 UTC (rev 693) @@ -0,0 +1,13 @@ +package net.sf.magicmap.client.utils; + + +public final class DriverInformations { + public final static String DRIVER = "DRIVER"; + public final static String VENDOR = "VENDOR"; + public final static String PROVIDER= "PROVIDER"; + public final static String DATE = "DATE"; + public final static String VERSION = "VERSION"; + public final static String INFFILE = "INFFILE"; + public final static String TYPE = "TYPE"; + public final static String SUPPORTEDTYPES = "SUPPORTEDTYPES"; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-11-09 13:27:54
|
Revision: 691 http://magicmap.svn.sourceforge.net/magicmap/?rev=691&view=rev Author: anweiss Date: 2007-11-09 05:27:52 -0800 (Fri, 09 Nov 2007) Log Message: ----------- fixed action for useServer in ConnectServerDialog Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-09 11:56:27 UTC (rev 690) +++ trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-09 13:27:52 UTC (rev 691) @@ -132,8 +132,8 @@ useServer.setSelected(!serverConnectionInfo.useNoServer); builder.setLeftLeftDistance("server", "noserver", 0); builder.setTopBottomDistance("server", "seperator", 10); - useNoServer.setActionCommand("USESERVER"); - useNoServer.addActionListener(this); + useServer.setActionCommand("USESERVER"); + useServer.addActionListener(this); // Hostname hostname = builder.addComboBox(Settings.getDefaultServerList(), "hostcombo"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fle...@us...> - 2007-11-09 11:56:30
|
Revision: 690 http://magicmap.svn.sourceforge.net/magicmap/?rev=690&view=rev Author: flederohr Date: 2007-11-09 03:56:27 -0800 (Fri, 09 Nov 2007) Log Message: ----------- Changed Connection-Dialog Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-08 13:33:19 UTC (rev 689) +++ trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-09 11:56:27 UTC (rev 690) @@ -9,13 +9,17 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; +import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; +import javax.swing.JRadioButton; +import javax.swing.JSeparator; import javax.swing.JTextField; import net.sf.magicmap.client.gui.MainGUI; @@ -44,10 +48,18 @@ private JTextField clientname; private JTextField port; private JPasswordField password; - private JCheckBox useNoServer; + private JRadioButton useNoServer; private JButton ok; private JButton cancel; + private JRadioButton useServer; + + private JLabel useNoServerLabel; + + private JSeparator seperator; + + private ButtonGroup radioButtonGroup; + /** * Static method to create and open a ConnectServerDialog * @param owner - the owner frame for the dialog @@ -78,52 +90,60 @@ } }); - setSize(300, 300); + setSize(360, 300); this.setResizable(false); this.serverConnectionInfo = info; RelativeLayout layout = new RelativeLayout(); RelativePanelBuilder builder = new RelativePanelBuilder(layout); - // OK / Abbrechen - if (info.useNoServer) - ok = builder.createButton(GUIUtils.i18n("continue"), "OK", this); - else - ok = builder.createButton(GUIUtils.i18n("connect"), "OK", this); - cancel = builder.createButton(GUIUtils.i18n("cancel"), "CANCEL", this); + // Kopf + builder + .addDialogHeader("<html><b>" + GUIUtils.i18n("createconnectiontopacwserver") + "</b><br>" + + GUIUtils.i18n("createconnectiontopacwserverhint") + "</html>", GUIConstants.ICON_SERVER_BIG, + "header"); + builder.setTop("header", 0); + builder.setLeft("header", 0); + builder.setRightRightDistance("header", null, 0); - builder.addOKCancelButtonBar(ok, cancel, "okcancel"); - builder.setLeftLeftDistance("okcancel", null, 10); - builder.setRightRightDistance("okcancel", null, -10); - builder.setBottomBottomDistance("okcancel", null, -10); + // RadioButton f\xFCr "lokale Verbindung" + useNoServer = new JRadioButton(); + builder.add(useNoServer, "noserver"); + useNoServer.setSelected(serverConnectionInfo.useNoServer); + builder.setLeft("noserver", 20); + builder.setTopBottomDistance("noserver", "header", 20); + useNoServer.setActionCommand("USENOSERVER"); + useNoServer.addActionListener(this); + + // Label f\xFCr "lokale Verbindung" + useNoServerLabel = builder.addLabel(GUIUtils.i18n("nonserverconnect"), "noserverlabel"); + builder.setLeftRightDistance("noserverlabel", "noserver", 10); + builder.setTopTopDistance("noserverlabel", "noserver", 0); + + // Trennlinie + seperator = builder.addSeparator("seperator"); + builder.setLeft("seperator", 3); + builder.setRightRightDistance("seperator", null, -3); + builder.setTopBottomDistance("seperator", "noserver,noserverlabel", 10); + + // RadioButton f\xFCr "Server-Verbindung" + useServer = new JRadioButton(); + builder.add(useServer, "server"); + useServer.setSelected(!serverConnectionInfo.useNoServer); + builder.setLeftLeftDistance("server", "noserver", 0); + builder.setTopBottomDistance("server", "seperator", 10); + useNoServer.setActionCommand("USESERVER"); + useNoServer.addActionListener(this); - // Clientname - clientname = builder.addTextField("clientname"); - builder.addLabel(GUIUtils.i18n("clientname"), "clientlabel", clientname); - builder.setLeft("clientlabel", 20); - builder.setRightRightDistance("clientname", null, -20); - builder.setTopBottomDistance("clientlabel", "header", 20); - builder.setTopBottomDistance("clientname", "header", 20); - clientname.setToolTipText(GUIUtils.i18n("clientnametooltip")); - - // Password - password = new JPasswordField(); - builder.add(password, "password"); - builder.addLabel(GUIUtils.i18n("password"), "passwordlabel", password); - builder.setLeft("passwordlabel", 20); - builder.setRightRightDistance("password", null, -20); - builder.setTopBottomDistance("passwordlabel", "clientlabel,clientname", 5); - builder.setTopBottomDistance("password", "clientlabel,clientname", 5); - password.setToolTipText(GUIUtils.i18n("passwordtooltip")); - // Hostname hostname = builder.addComboBox(Settings.getDefaultServerList(), "hostcombo"); builder.addLabel(GUIUtils.i18n("hostname"), "hostlabel", hostname); - builder.setLeft("hostlabel", 20); + builder.setLeftLeftDistance("hostlabel","noserverlabel", 0); hostname.setEditable(true); - builder.setRightRightDistance("hostcombo", null, -20); - builder.setTopBottomDistance("hostlabel", "passwordlabel,password", 10); - builder.setTopBottomDistance("hostcombo", "passwordlabel,password", 10); + builder.setLeftRightDistance("hostcombo", "hostlabel", 15); + builder.setRightLeftDistance("hostcombo", "hostcombo", 178); + builder.setTopTopDistance("hostcombo", "server", 0); + builder.setTopTopDistance("hostlabel", "server", 0); hostname.setActionCommand("HOSTNAME"); hostname.addActionListener(this); hostname.setToolTipText(GUIUtils.i18n("hostnametooltip")); @@ -131,41 +151,58 @@ // Port port = builder.addTextField("portedit"); builder.addLabel(GUIUtils.i18n("port"), "portlabel", port); - builder.setLeft("portlabel", 20); - builder.setTopBottomDistance("portlabel", "hostlabel,hostcombo", 5); - builder.setRightRightDistance("portedit", null, -20); - builder.setLeftRightDistance("portedit", "portlabel,hostlabel,clientlabel,passwordlabel", 5); - builder.setTopBottomDistance("portedit", "hostlabel,hostcombo,clientlabel,passwordlabel", 5); - builder.setLeftRightDistance("hostcombo", "portlabel,hostlabel,clientlabel,passwordlabel", 5); - builder.setLeftRightDistance("clientname", "portlabel,hostlabel,clientlabel,passwordlabel", 5); - builder.setLeftRightDistance("password", "portlabel,hostlabel,clientlabel,passwordlabel", 5); + builder.setLeftRightDistance("portlabel","hostcombo", 10); + builder.setLeftRightDistance("portedit", "portlabel", 5); + builder.setTopTopDistance("portlabel", "hostlabel,hostcombo", 0); + builder.setTopTopDistance("portedit", "hostlabel,hostcombo", 0); + builder.setRightRightDistance("portedit", null, -10); port.setToolTipText(GUIUtils.i18n("porttooltip")); - // CheckBox f\xFCr "lokale Verbindung" - useNoServer = builder.addCheckBox(GUIUtils.i18n("nonserverconnect"), "nonserver", - serverConnectionInfo.useNoServer); - builder.setLeftLeftDistance("nonserver", "portedit", 0); - builder.setTopBottomDistance("nonserver", "portlabel,portedit", 5); - useNoServer.setActionCommand("USENOSERVER"); - useNoServer.addActionListener(this); + // Clientname + clientname = builder.addTextField("clientname"); + builder.addLabel(GUIUtils.i18n("clientname"), "clientlabel", clientname); + builder.setLeftLeftDistance("clientlabel","hostlabel", 0); + builder.setLeftLeftDistance("clientname","hostcombo", 0); + builder.setRightRightDistance("clientname", "hostcombo", 0); + builder.setTopBottomDistance("clientlabel", "hostlabel,hostcombo", 10); + builder.setTopBottomDistance("clientname", "hostlabel,hostcombo", 10); + clientname.setToolTipText(GUIUtils.i18n("clientnametooltip")); - // Kopf - builder - .addDialogHeader("<html><b>" + GUIUtils.i18n("createconnectiontopacwserver") + "</b><br>" - + GUIUtils.i18n("createconnectiontopacwserverhint") + "</html>", GUIConstants.ICON_SERVER_BIG, - "header"); - builder.setTop("header", 0); - builder.setLeft("header", 0); - builder.setRightRightDistance("header", null, 0); + // Password + password = new JPasswordField(); + builder.add(password, "password"); + builder.addLabel(GUIUtils.i18n("password"), "passwordlabel", password); + builder.setLeftLeftDistance("passwordlabel","clientlabel", 0); + builder.setLeftLeftDistance("password","clientname", 0); + builder.setRightRightDistance("password", "hostcombo", 0); + builder.setTopBottomDistance("passwordlabel", "clientlabel,clientname", 10); + builder.setTopBottomDistance("password", "clientlabel,clientname", 10); + password.setToolTipText(GUIUtils.i18n("passwordtooltip")); + // radioButtons + radioButtonGroup = new ButtonGroup(); + radioButtonGroup.add(useNoServer); + radioButtonGroup.add(useServer); + + // OK / Abbrechen + if (info.useNoServer) + ok = builder.createButton(GUIUtils.i18n("continue"), "OK", this); + else + ok = builder.createButton(GUIUtils.i18n("connect"), "OK", this); + cancel = builder.createButton(GUIUtils.i18n("cancel"), "CANCEL", this); + + builder.addOKCancelButtonBar(ok, cancel, "okcancel"); + builder.setLeftLeftDistance("okcancel", null, 10); + builder.setRightRightDistance("okcancel", null, -10); + builder.setBottomBottomDistance("okcancel", null, -10); + // Defaults setzen this.password.setText(serverConnectionInfo.password); this.clientname.setText(serverConnectionInfo.name); this.hostname.setSelectedItem(serverConnectionInfo.hostname); this.port.setText("" + serverConnectionInfo.port); if (info.useNoServer) { - this.hostname.setEnabled(false); - this.port.setEnabled(false); + this.useNoServer.doClick(); } mainPanel = builder.getPanel(); @@ -195,15 +232,24 @@ } else if ("CANCEL".equals(e.getActionCommand())) { cancelConnect(); } else if ("USENOSERVER".equals(e.getActionCommand())) { - // CheckBox angeklickt + // RadioButton angeklickt boolean b = !useNoServer.isSelected(); this.hostname.setEnabled(b); this.port.setEnabled(b); - if (useNoServer.isSelected()) { + this.clientname.setEnabled(b); + this.password.setEnabled(b); + if (!b) { this.ok.setText(GUIUtils.filterMnemonic(GUIUtils.i18n("continue"))); this.ok.setMnemonic(GUIUtils.getMnemonic(GUIUtils.i18n("continue"))); - } else { - // GUIUtils.getMnemonic(title) + } + } else if ("USESERVER".equals(e.getActionCommand())) { + // RadioButton angeklickt + boolean b = useServer.isSelected(); + this.hostname.setEnabled(b); + this.port.setEnabled(b); + this.clientname.setEnabled(b); + this.password.setEnabled(b); + if (b) { this.ok.setText(GUIUtils.filterMnemonic(GUIUtils.i18n("connect"))); this.ok.setMnemonic(GUIUtils.getMnemonic(GUIUtils.i18n("connect"))); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-11-08 14:14:09
|
Revision: 688 http://magicmap.svn.sourceforge.net/magicmap/?rev=688&view=rev Author: anweiss Date: 2007-11-08 05:30:41 -0800 (Thu, 08 Nov 2007) Log Message: ----------- Tooltips for the connection dialogue. Modified Paths: -------------- trunk/magicmapclient/res/screentext.properties trunk/magicmapclient/res/screentext_de_DE.properties trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java Modified: trunk/magicmapclient/res/screentext.properties =================================================================== --- trunk/magicmapclient/res/screentext.properties 2007-11-06 11:59:40 UTC (rev 687) +++ trunk/magicmapclient/res/screentext.properties 2007-11-08 13:30:41 UTC (rev 688) @@ -25,8 +25,10 @@ connectserver=Connect with server ok=&OK cancel=&Cancel -hostname=&Hostname +hostname=&Server +hostnametooltip=Please enter here the URL of the the server you want to connect to. port=&Port +porttooltip=The port for the MagicMap-Server. createconnectiontopacwserver=Create connection with MagicMap server createconnectiontopacwserverhint=Please enter connection settings outline=Outline @@ -44,7 +46,9 @@ avgsignallevel=Mean avgstrength=Avg. Strength password=P&assword -clientname=C&lientname +passwordtooltip=Please enter your password here. If you run MagicMap for the first time you can choose a new password here. +clientname=&Login +clientnametooltip=Please enter your username here. This will be your displayed name in MagicMap. connected=Connected connecting=Connecting... disconnected=Disconnected Modified: trunk/magicmapclient/res/screentext_de_DE.properties =================================================================== --- trunk/magicmapclient/res/screentext_de_DE.properties 2007-11-06 11:59:40 UTC (rev 687) +++ trunk/magicmapclient/res/screentext_de_DE.properties 2007-11-08 13:30:41 UTC (rev 688) @@ -25,8 +25,10 @@ connectserver=Mit Server verbinden ok=&OK cancel=&Abbruch -hostname=&Rechnername +hostname=&Server +hostnametooltip=Bitte geben Sie hier die URL f\xFCr den Server ein, zu dem Sie sich verbinden wollen. port=&Port +porttooltip=Tragen Sie hier den Port ein, \xFCber den der MagicMap-Server erreichbar ist. createconnectiontopacwserver=Verbindung mit MagicMap-Server herstellen createconnectiontopacwserverhint=Geben Sie bitte die Verbindungsoptionen an outline=\xDCbersicht @@ -44,7 +46,9 @@ avgsignallevel=Mittelwert avgstrength=Durchschn. St\xE4rke password=P&asswort -clientname=C&lientname +passwordtooltip=Geben Sie hier ihr Passwort ein. Sollten Sie MagicMap das erste mal benutzten, dann k\xF6nnen Sie hier ein beliebiges Passwort w\xE4hlen. +clientname=&Login +clientnametooltip=Geben Sie hier ihren Benutzernamen ein, mit dem Sie in MagicMap angezeigt werden. connected=Verbunden connecting=Verbinde... disconnected=Nicht verbunden Modified: trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-06 11:59:40 UTC (rev 687) +++ trunk/magicmapclient/src/net/sf/magicmap/client/gui/dialogs/ConnectServerDialog.java 2007-11-08 13:30:41 UTC (rev 688) @@ -104,6 +104,7 @@ builder.setRightRightDistance("clientname", null, -20); builder.setTopBottomDistance("clientlabel", "header", 20); builder.setTopBottomDistance("clientname", "header", 20); + clientname.setToolTipText(GUIUtils.i18n("clientnametooltip")); // Password password = new JPasswordField(); @@ -113,7 +114,8 @@ builder.setRightRightDistance("password", null, -20); builder.setTopBottomDistance("passwordlabel", "clientlabel,clientname", 5); builder.setTopBottomDistance("password", "clientlabel,clientname", 5); - + password.setToolTipText(GUIUtils.i18n("passwordtooltip")); + // Hostname hostname = builder.addComboBox(Settings.getDefaultServerList(), "hostcombo"); builder.addLabel(GUIUtils.i18n("hostname"), "hostlabel", hostname); @@ -124,6 +126,7 @@ builder.setTopBottomDistance("hostcombo", "passwordlabel,password", 10); hostname.setActionCommand("HOSTNAME"); hostname.addActionListener(this); + hostname.setToolTipText(GUIUtils.i18n("hostnametooltip")); // Port port = builder.addTextField("portedit"); @@ -136,6 +139,7 @@ builder.setLeftRightDistance("hostcombo", "portlabel,hostlabel,clientlabel,passwordlabel", 5); builder.setLeftRightDistance("clientname", "portlabel,hostlabel,clientlabel,passwordlabel", 5); builder.setLeftRightDistance("password", "portlabel,hostlabel,clientlabel,passwordlabel", 5); + port.setToolTipText(GUIUtils.i18n("porttooltip")); // CheckBox f\xFCr "lokale Verbindung" useNoServer = builder.addCheckBox(GUIUtils.i18n("nonserverconnect"), "nonserver", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-11-08 14:08:10
|
Revision: 689 http://magicmap.svn.sourceforge.net/magicmap/?rev=689&view=rev Author: anweiss Date: 2007-11-08 05:33:19 -0800 (Thu, 08 Nov 2007) Log Message: ----------- Removed heigth and width in the map title. Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/controller/Controller.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/controller/Controller.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/controller/Controller.java 2007-11-08 13:30:41 UTC (rev 688) +++ trunk/magicmapclient/src/net/sf/magicmap/client/controller/Controller.java 2007-11-08 13:33:19 UTC (rev 689) @@ -180,13 +180,13 @@ this.scannerAllocator.startAllScanner(); this.pluginManager.loadMap(); - if (this.currentMap.realheight > 0 && this.currentMap.realwidth > 0) +// if (this.currentMap.realheight > 0 && this.currentMap.realwidth > 0) // TODO: Interface f\xFCr GUI mit methode setMapTitle() - ((MapView) MainGUI.getInstance().getJComponent("mapView")).setTitle(GUIUtils.i18n("map", false) + " - " - + this.currentMap.name + " Gr\xF6\xDFe: " + this.currentMap.realwidth + " X " - + this.currentMap.realheight + " cm"); +// ((MapView) MainGUI.getInstance().getJComponent("mapView")).setTitle(GUIUtils.i18n("map", false) + " - " +// + this.currentMap.name + " Gr\xF6\xDFe: " + this.currentMap.realwidth + " X " +// + this.currentMap.realheight + " cm"); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-11-06 13:07:45
|
Revision: 687 http://magicmap.svn.sourceforge.net/magicmap/?rev=687&view=rev Author: anweiss Date: 2007-11-06 03:59:40 -0800 (Tue, 06 Nov 2007) Log Message: ----------- "Verf?\195?\188gbare Plugins" in "Weitere Plugins" ge?\195?\164ndert Modified Paths: -------------- trunk/magicmapclient/res/screentext.properties trunk/magicmapclient/res/screentext_de_DE.properties Modified: trunk/magicmapclient/res/screentext.properties =================================================================== --- trunk/magicmapclient/res/screentext.properties 2007-10-30 13:20:41 UTC (rev 686) +++ trunk/magicmapclient/res/screentext.properties 2007-11-06 11:59:40 UTC (rev 687) @@ -120,7 +120,7 @@ plugins.load.tooltip=Load the Plugin List plugins.install.tooltip=Installs the selected Plugin plugins.uninstall.tooltip=Deinstalls the selected Plugin -plugins.available=Available Plugins +plugins.available=Additional Plugins plugins.dependencies=Dependencies plugins.detailview=Detail View plugins.name=Name Modified: trunk/magicmapclient/res/screentext_de_DE.properties =================================================================== --- trunk/magicmapclient/res/screentext_de_DE.properties 2007-10-30 13:20:41 UTC (rev 686) +++ trunk/magicmapclient/res/screentext_de_DE.properties 2007-11-06 11:59:40 UTC (rev 687) @@ -120,7 +120,7 @@ plugins.load.tooltip=L\xE4dt die Pluginliste plugins.install.tooltip=Installiert ausgew\xE4hltes Plugin plugins.uninstall.tooltip=Deinstalliert ausgew\xE4hltes Plugin -plugins.available=Verf\xFCgbare Plugins +plugins.available=Weitere Plugins plugins.dependencies=Abh\xE4ngigkeiten plugins.detailview=Detailansicht plugins.name=Name This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-10-30 14:13:40
|
Revision: 686 http://magicmap.svn.sourceforge.net/magicmap/?rev=686&view=rev Author: anweiss Date: 2007-10-30 06:20:41 -0700 (Tue, 30 Oct 2007) Log Message: ----------- version 0.9.1 Added Paths: ----------- tags/V20071030_0_9_1/magicmapclient/ Copied: tags/V20071030_0_9_1/magicmapclient (from rev 685, trunk/magicmapclient) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-10-30 14:12:06
|
Revision: 685 http://magicmap.svn.sourceforge.net/magicmap/?rev=685&view=rev Author: anweiss Date: 2007-10-30 06:19:32 -0700 (Tue, 30 Oct 2007) Log Message: ----------- version 0.9.1 Added Paths: ----------- tags/V20071030_0_9_1/magicmapserver/ Copied: tags/V20071030_0_9_1/magicmapserver (from rev 684, trunk/magicmapserver) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2007-10-30 14:12:01
|
Revision: 683 http://magicmap.svn.sourceforge.net/magicmap/?rev=683&view=rev Author: anweiss Date: 2007-10-30 06:14:37 -0700 (Tue, 30 Oct 2007) Log Message: ----------- Version 0.9.1 Added Paths: ----------- tags/V20071030_0_9_1/ Copied: tags/V20071030_0_9_1 (from rev 682, trunk/magicmapserver) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |