From dbe6caf222d3e11432aceaef223f68fceddcaf2a Mon Sep 17 00:00:00 2001 From: Philipp Spohr <spohr.philipp@web.de> Date: Wed, 6 Sep 2017 15:00:57 +0200 Subject: [PATCH] Annoy user a bit with hints --- .../de/hhu/ba/yoshikoWrapper/CyActivator.java | 4 + .../de/hhu/ba/yoshikoWrapper/core/CyCore.java | 6 +- .../de/hhu/ba/yoshikoWrapper/core/Hint.java | 6 ++ .../ba/yoshikoWrapper/gui/HintManager.java | 74 +++++++++++++++++++ .../hhu/ba/yoshikoWrapper/gui/MainPanel.java | 7 ++ src/main/resources/YoshikoStrings.properties | 3 + 6 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/core/Hint.java create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/HintManager.java diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java index 0a088f5..8e19125 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java @@ -52,9 +52,11 @@ import org.osgi.framework.BundleContext; import de.hhu.ba.yoshikoWrapper.core.ConfigurationManager; import de.hhu.ba.yoshikoWrapper.core.CyCore; +import de.hhu.ba.yoshikoWrapper.core.Hint; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.NetChangeListener; import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader; +import de.hhu.ba.yoshikoWrapper.gui.HintManager; import de.hhu.ba.yoshikoWrapper.gui.MainPanel; public class CyActivator extends AbstractCyActivator { @@ -115,6 +117,8 @@ public class CyActivator extends AbstractCyActivator { registerService(context,netChangeListener, ColumnDeletedListener.class, new Properties()); registerService(context,netChangeListener, SessionLoadedListener.class, new Properties()); registerService(context,netChangeListener, SetCurrentNetworkListener.class, new Properties()); + + HintManager.showMappingHint(Hint.FIRST_START); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java index 803d3ee..8c6462b 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java @@ -64,6 +64,10 @@ public class CyCore { public static ApplyVisualStyleTaskFactory applyVisualStyleTaskFactory; public static RenderingEngineFactory<CyNetwork> renderingEngineFactory; public static CloneNetworkTaskFactory cloneNetworkTaskFactory; - // + + //Convenience + public static String getConfig(String key) { + return cm.getProperties().getProperty(key); + } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/Hint.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/Hint.java new file mode 100644 index 0000000..c916fe6 --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/Hint.java @@ -0,0 +1,6 @@ +package de.hhu.ba.yoshikoWrapper.core; + +public enum Hint { + USE_MAPPING, + FIRST_START +} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/HintManager.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/HintManager.java new file mode 100644 index 0000000..09296f6 --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/HintManager.java @@ -0,0 +1,74 @@ +package de.hhu.ba.yoshikoWrapper.gui; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import javax.swing.JOptionPane; + +import org.slf4j.Logger; + +import de.hhu.ba.yoshikoWrapper.core.CyCore; +import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader; +import de.hhu.ba.yoshikoWrapper.core.Hint; +import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; +import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger; + +/** + * Bothers the user with useful hints + * + */ +public class HintManager { + + private static Logger logger = YoshikoLogger.getInstance().getLogger(); + + private static final Runnable useMappingHint = new Runnable() { + + @Override + public void run() { + JOptionPane.showMessageDialog(null, LocalizationManager.get("noMappingHint"), LocalizationManager.get("yoshikoHint"),JOptionPane.INFORMATION_MESSAGE); + } + + }; + + private static final Runnable firstStart = new Runnable() { + + @Override + public void run() { + JOptionPane.showMessageDialog(null, LocalizationManager.get("firstStart"), "Yoshiko Welcome", JOptionPane.INFORMATION_MESSAGE, GraphicsLoader.getLogo(40)); + } + + }; + + private final static Map<Hint,Runnable> hints; + + static { + Map<Hint, Runnable> map = new HashMap<Hint,Runnable>(); + map.put(Hint.USE_MAPPING, useMappingHint); + map.put(Hint.FIRST_START, firstStart); + hints = Collections.unmodifiableMap(map); + } + + public static void showMappingHint(Hint hint) { + if ( + CyCore.getConfig( + hint.toString()+"shown" + ) == null + ) + { + + //Save property so we dont show this again + CyCore.cm.getProperties().setProperty(hint.toString()+ "shown", "1"); + if (hints.get(hint) != null) { + hints.get(hint).run(); + } + else { + logger.warn("Asked for a hint that doesnt exist with hint name: "+hint.toString()); + } + + } + } + + + +} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java index 52e530c..6b8f7f4 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java @@ -52,6 +52,7 @@ import org.cytoscape.work.TaskIterator; import de.hhu.ba.yoshikoWrapper.core.AlgorithmTask; import de.hhu.ba.yoshikoWrapper.core.CyCore; import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader; +import de.hhu.ba.yoshikoWrapper.core.Hint; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.ParameterSet; import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader; @@ -211,6 +212,12 @@ public class MainPanel extends JPanel implements CytoPanelComponent { //SWING BLACK MAGIC if (YoshikoLoader.isLibraryLoaded()){ + + //User has mapped no values -> Annoy him + if (ecPanel.getWeightColumn() == null) { + HintManager.showMappingHint(Hint.USE_MAPPING); + } + AbstractTask yoshiko = new AlgorithmTask( popupLevel, CyCore.cy.getCurrentNetwork(), diff --git a/src/main/resources/YoshikoStrings.properties b/src/main/resources/YoshikoStrings.properties index d169316..16b9988 100644 --- a/src/main/resources/YoshikoStrings.properties +++ b/src/main/resources/YoshikoStrings.properties @@ -63,4 +63,7 @@ timeoutMarker = Timed Out gap = Gap currentGap = [ILP] Current Instance Gap: disableMultiThreading = Disable Multithreading +yoshikoHint = Yoshiko Hint getYoshiko = Get Yoshiko Library +noMappingHint = You haven't mapped the cost value to a column in your edge table.\nYoshiko runs significantly faster and generates better solutions if you map values. +firstStart = Thanks for using the Yoshiko Clustering Tool!\nIt appears, that this is your first time using this tool.\nIf you want an in-depth explanation of the algorithm please refer to: [INSERT COOL LINK HERE] \ No newline at end of file -- GitLab