Skip to content
Snippets Groups Projects
Commit 9de897ad authored by Philipp Spohr's avatar Philipp Spohr
Browse files

started some major refactoring (not stable)

parent 83adffed
Branches
No related tags found
No related merge requests found
Showing
with 223 additions and 92 deletions
...@@ -3,14 +3,18 @@ package de.hhu.ba.yoshikoWrapper; ...@@ -3,14 +3,18 @@ package de.hhu.ba.yoshikoWrapper;
import java.util.Properties; import java.util.Properties;
import org.cytoscape.application.CyApplicationManager; import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.CySwingApplication;
import org.cytoscape.application.swing.CytoPanelComponent; import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.events.AddedEdgesListener; import org.cytoscape.model.events.AddedEdgesListener;
import org.cytoscape.model.events.ColumnCreatedListener; import org.cytoscape.model.events.ColumnCreatedListener;
import org.cytoscape.model.events.ColumnDeletedListener; import org.cytoscape.model.events.ColumnDeletedListener;
import org.cytoscape.model.events.NetworkAddedListener; import org.cytoscape.model.events.NetworkAddedListener;
import org.cytoscape.model.events.RemovedEdgesListener; import org.cytoscape.model.events.RemovedEdgesListener;
import org.cytoscape.service.util.AbstractCyActivator; import org.cytoscape.service.util.AbstractCyActivator;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.session.events.SessionLoadedListener; import org.cytoscape.session.events.SessionLoadedListener;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.work.swing.DialogTaskManager; import org.cytoscape.work.swing.DialogTaskManager;
import org.osgi.framework.BundleContext; import org.osgi.framework.BundleContext;
...@@ -20,7 +24,6 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; ...@@ -20,7 +24,6 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.core.NetChangeListener; import de.hhu.ba.yoshikoWrapper.core.NetChangeListener;
import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader; import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
import de.hhu.ba.yoshikoWrapper.gui.MainPanel; import de.hhu.ba.yoshikoWrapper.gui.MainPanel;
import de.hhu.ba.yoshikoWrapper.gui.SolutionsPanel;
public class CyActivator extends AbstractCyActivator { public class CyActivator extends AbstractCyActivator {
...@@ -39,7 +42,11 @@ public class CyActivator extends AbstractCyActivator { ...@@ -39,7 +42,11 @@ public class CyActivator extends AbstractCyActivator {
//Create symbolic links to give other classes access //Create symbolic links to give other classes access
CyCore.cy = getService(context, CyApplicationManager.class); CyCore.cy = getService(context, CyApplicationManager.class);
CyCore.dialogTaskManager = getService(context, DialogTaskManager.class); CyCore.dialogTaskManager = getService(context, DialogTaskManager.class);
CyCore.registrar = getService(context, CyServiceRegistrar.class);
CyCore.cm = cm; CyCore.cm = cm;
CyCore.networkViewFactory = getService(context, CyNetworkViewFactory.class);
CyCore.networkFactory = getService(context, CyNetworkFactory.class);
CyCore.swing = getService(context, CySwingApplication.class);
//Set language according to settings //Set language according to settings
LocalizationManager.switchLanguage(cm.getProperties().getProperty("locale", "enUS")); LocalizationManager.switchLanguage(cm.getProperties().getProperty("locale", "enUS"));
...@@ -53,11 +60,9 @@ public class CyActivator extends AbstractCyActivator { ...@@ -53,11 +60,9 @@ public class CyActivator extends AbstractCyActivator {
} }
//main panel and result panel //main panel
SolutionsPanel solutionsPanel = new SolutionsPanel(); MainPanel mainPanel = new MainPanel();
MainPanel mainPanel = new MainPanel(solutionsPanel);
registerService(context,mainPanel,CytoPanelComponent.class, new Properties()); registerService(context,mainPanel,CytoPanelComponent.class, new Properties());
registerService(context,solutionsPanel,CytoPanelComponent.class, new Properties());
//Listener for Network-Changes -> Updating possible columns for mapping //Listener for Network-Changes -> Updating possible columns for mapping
NetChangeListener netChangeListener = new NetChangeListener(mainPanel.getColumnMapper()); NetChangeListener netChangeListener = new NetChangeListener(mainPanel.getColumnMapper());
......
package de.hhu.ba.yoshikoWrapper.core; package de.hhu.ba.yoshikoWrapper.core;
import java.util.Properties;
import org.cytoscape.application.swing.CytoPanel;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName;
import org.cytoscape.application.swing.CytoPanelState;
import org.cytoscape.model.CyColumn; import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyNetwork; import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode; import org.cytoscape.model.CyNode;
...@@ -7,6 +13,8 @@ import org.cytoscape.work.AbstractTask; ...@@ -7,6 +13,8 @@ import org.cytoscape.work.AbstractTask;
import org.cytoscape.work.TaskMonitor; import org.cytoscape.work.TaskMonitor;
import org.slf4j.Logger; import org.slf4j.Logger;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
import de.hhu.ba.yoshikoWrapper.gui.ClusterView; import de.hhu.ba.yoshikoWrapper.gui.ClusterView;
import de.hhu.ba.yoshikoWrapper.gui.SolutionTab; import de.hhu.ba.yoshikoWrapper.gui.SolutionTab;
import de.hhu.ba.yoshikoWrapper.gui.SolutionsPanel; import de.hhu.ba.yoshikoWrapper.gui.SolutionsPanel;
...@@ -14,6 +22,7 @@ import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger; ...@@ -14,6 +22,7 @@ import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface; import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_std__vectorT_int_t; import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_std__vectorT_int_t;
import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_yskInput__LibraryInput; import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_yskInput__LibraryInput;
import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_ysk__ClusterEditingSolutions;
public class AlgorithmTask extends AbstractTask { public class AlgorithmTask extends AbstractTask {
...@@ -22,10 +31,10 @@ public class AlgorithmTask extends AbstractTask { ...@@ -22,10 +31,10 @@ public class AlgorithmTask extends AbstractTask {
private static Logger logger = YoshikoLogger.getInstance().getLogger(); private static Logger logger = YoshikoLogger.getInstance().getLogger();
//Parameters //Parameters
private double insertionCostDefault; private final double insertionCostDefault;
private double deletionCostDefault; private final double deletionCostDefault;
private CyColumn permanentColumn; private final CyColumn permanentColumn;
private CyColumn forbiddenColumn; private final CyColumn forbiddenColumn;
private CyColumn weightColumn; private CyColumn weightColumn;
private int timeLimit; private int timeLimit;
private CyNetwork net; private CyNetwork net;
...@@ -35,10 +44,10 @@ public class AlgorithmTask extends AbstractTask { ...@@ -35,10 +44,10 @@ public class AlgorithmTask extends AbstractTask {
private boolean separateTriangles; private boolean separateTriangles;
private boolean useHeuristic; private boolean useHeuristic;
private int numberOfSolutions; private int numberOfSolutions;
private SolutionsPanel solutionsPanel;
//temps //temps, need to be freed in C++
private SWIGTYPE_p_yskInput__LibraryInput input; private SWIGTYPE_p_yskInput__LibraryInput input;
private SWIGTYPE_p_ysk__ClusterEditingSolutions result;
public AlgorithmTask( public AlgorithmTask(
CyNetwork net, CyNetwork net,
...@@ -53,8 +62,7 @@ public class AlgorithmTask extends AbstractTask { ...@@ -53,8 +62,7 @@ public class AlgorithmTask extends AbstractTask {
boolean separatePartitionCuts, boolean separatePartitionCuts,
boolean separateTriangles, boolean separateTriangles,
boolean useHeuristic, boolean useHeuristic,
int numberOfSolutions, int numberOfSolutions
SolutionsPanel solutionsPanel
) )
{ {
this.net = net; this.net = net;
...@@ -70,11 +78,12 @@ public class AlgorithmTask extends AbstractTask { ...@@ -70,11 +78,12 @@ public class AlgorithmTask extends AbstractTask {
this.separateTriangles = separateTriangles; this.separateTriangles = separateTriangles;
this.useHeuristic = useHeuristic; this.useHeuristic = useHeuristic;
this.numberOfSolutions = numberOfSolutions; this.numberOfSolutions = numberOfSolutions;
this.solutionsPanel = solutionsPanel;
} }
@Override @Override
public void run(TaskMonitor taskMonitor) throws Exception { public void run(TaskMonitor taskMonitor) throws Exception {
taskMonitor.setTitle(LocalizationManager.get("yoshTask")); taskMonitor.setTitle(LocalizationManager.get("yoshTask"));
taskMonitor.setProgress(0.0); taskMonitor.setProgress(0.0);
//Get current network //Get current network
...@@ -105,7 +114,7 @@ public class AlgorithmTask extends AbstractTask { ...@@ -105,7 +114,7 @@ public class AlgorithmTask extends AbstractTask {
LibraryInterface.LibraryInput_setDefaultInsertionCost(input, insertionCostDefault); LibraryInterface.LibraryInput_setDefaultInsertionCost(input, insertionCostDefault);
//Call Yoshiko <<< Algorithm is performed here //Call Yoshiko <<< Algorithm is performed here
CyCore.currentSolutions = LibraryInterface.processLibraryInput( result = LibraryInterface.processLibraryInput(
input, input,
numberOfSolutions, numberOfSolutions,
bitMaskRules, bitMaskRules,
...@@ -115,34 +124,33 @@ public class AlgorithmTask extends AbstractTask { ...@@ -115,34 +124,33 @@ public class AlgorithmTask extends AbstractTask {
useHeuristic useHeuristic
); );
taskMonitor.setProgress(0.9); taskMonitor.setProgress(0.9);
this.solutionsPanel.reset(); long numberOfSolutions = LibraryInterface.ClusterEditingSolutions_getNumberOfSolutions(result);
taskMonitor.setStatusMessage("Found: "+numberOfSolutions+" solutions!"); //TODO localize
long numberOfSolutions = LibraryInterface.ClusterEditingSolutions_getNumberOfSolutions(CyCore.currentSolutions); YoshikoResult yoshikoResult = new YoshikoResult();
taskMonitor.setStatusMessage("Found: "+numberOfSolutions+" solutions!");
yoshikoResult.editingCost = LibraryInterface.ClusterEditingSolutions_getTotalCost(result);
double modificationCost = LibraryInterface.ClusterEditingSolutions_getTotalCost(CyCore.currentSolutions);
taskMonitor.setStatusMessage(LocalizationManager.get("paidCost")+modificationCost);
solutionsPanel.setCost(modificationCost);
for (long i=0;i<numberOfSolutions;i++) { for (long i=0;i<numberOfSolutions;i++) {
taskMonitor.setStatusMessage("Processing solution "+(i+1)+" of "+numberOfSolutions); taskMonitor.setStatusMessage("Processing solution "+(i+1)+" of "+numberOfSolutions);
YoshikoSolution solution = new YoshikoSolution();
SolutionTab tab = this.solutionsPanel.addSolutionTab(i);
String columnName = "YOSHIKO_SOLUTION_"+(i+1); String columnName = "YOSHIKO_SOLUTION_"+(i+1);
net.getDefaultNodeTable().deleteColumn(columnName); net.getDefaultNodeTable().deleteColumn(columnName);
net.getDefaultNodeTable().createColumn(columnName, String.class, false); net.getDefaultNodeTable().createColumn(columnName, String.class, false);
long numberOfClusters = LibraryInterface.ClusterEditingSolutions_getNumberOfClusters(CyCore.currentSolutions, i); //Fetch number of clusters in the solution
tab.setClusterNumber(numberOfClusters); long numberOfClusters = LibraryInterface.ClusterEditingSolutions_getNumberOfClusters(result, i);
for (long k=0;k<numberOfClusters;k++) { for (long k=0;k<numberOfClusters;k++) {
ClusterView cV = tab.addCluster(k); ClusterView cV = tab.addCluster(k);
cV.setTitle((k+1)); cV.setTitle((k+1));
taskMonitor.setStatusMessage("Processing cluster "+(k+1)+" of "+numberOfClusters); taskMonitor.setStatusMessage("Processing cluster "+(k+1)+" of "+numberOfClusters);
SWIGTYPE_p_std__vectorT_int_t cluster = LibraryInterface.ClusterEditingSolutions_getCluster(CyCore.currentSolutions, i, k); SWIGTYPE_p_std__vectorT_int_t cluster = LibraryInterface.ClusterEditingSolutions_getCluster(solution, i, k);
long sizeOfCluster = LibraryInterface.IntVector_size(cluster); long sizeOfCluster = LibraryInterface.IntVector_size(cluster);
cV.setClusterSize(sizeOfCluster); cV.setClusterSize(sizeOfCluster);
for (int l=0;l<sizeOfCluster;l++) { //Unsafe mismatch int long for (int l=0;l<sizeOfCluster;l++) { //Unsafe mismatch int long
...@@ -157,24 +165,39 @@ public class AlgorithmTask extends AbstractTask { ...@@ -157,24 +165,39 @@ public class AlgorithmTask extends AbstractTask {
net.getRow(node).set(columnName, ""+(k+1)); net.getRow(node).set(columnName, ""+(k+1));
} }
} }
yoshikoResult.solutions.add(solution);
} }
LibraryInterface.delete_LibraryInput(input); LibraryInterface.delete_LibraryInput(input);
input = null; LibraryInterface.delete_ClusterEditingSolutions(solution);
//Provide some useful info //Provide some useful info
if (LibraryInterface.ClusterEditingSolutions_isTimedOut(CyCore.currentSolutions)) { if (LibraryInterface.ClusterEditingSolutions_isTimedOut(solution)) {
throw new Exception(LocalizationManager.get("timedOutMessage")); throw new Exception(LocalizationManager.get("timedOutMessage"));
} }
//Generate solutionsPanel
SolutionsPanel solutionsPanel = new SolutionsPanel(processedSolution);
//Show solution panel
CyCore.registrar.registerService(solutionsPanel,CytoPanelComponent.class, new Properties());
//Focus solution panel
CytoPanel eastPanel = CyCore.swing.getCytoPanel(CytoPanelName.EAST);
eastPanel.setSelectedIndex(eastPanel.indexOfComponent(solutionsPanel));
//Show (might be invisible)
eastPanel.setState(CytoPanelState.DOCK);
} }
@Override @Override
public void cancel() { public void cancel() {
//Free C++ resources
if (input != null) { if (input != null) {
LibraryInterface.delete_LibraryInput(input); LibraryInterface.delete_LibraryInput(input);
} }
if (solution != null) {
LibraryInterface.delete_ClusterEditingSolutions(solution);
}
super.cancel(); super.cancel();
} }
} }
package de.hhu.ba.yoshikoWrapper.core; package de.hhu.ba.yoshikoWrapper.core;
import org.cytoscape.application.CyApplicationManager; import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.CySwingApplication;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.work.swing.DialogTaskManager; import org.cytoscape.work.swing.DialogTaskManager;
import org.osgi.framework.BundleContext;
import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_ysk__ClusterEditingSolutions; /**Simple link collection to enable access to Cytoscape instances
*
*/
public class CyCore { public class CyCore {
//SYMBOLIC LINKS
public static CyApplicationManager cy; public static CyApplicationManager cy;
public static DialogTaskManager dialogTaskManager; public static DialogTaskManager dialogTaskManager;
public static ConfigurationManager cm; public static ConfigurationManager cm;
public static SWIGTYPE_p_ysk__ClusterEditingSolutions currentSolutions; public static BundleContext context;
public static CyServiceRegistrar registrar;
public static CyNetworkViewFactory networkViewFactory;
public static CyNetworkFactory networkFactory;
public static CySwingApplication swing;
//
} }
package de.hhu.ba.yoshikoWrapper.graphModel;
import java.util.ArrayList;
import java.util.HashMap;
/**Basic data class that represents a CES instance internally. By using this class the C++ resources can be freed upon retrieval.
*
*
*/
public class YoshikoResult {
public ArrayList<YoshikoSolution> solutions;
public double editingCost;
public YoshikoResult() {
solutions = new ArrayList<YoshikoSolution>;
}
}
package de.hhu.ba.yoshikoWrapper.graphModel;
import java.util.ArrayList;
import org.cytoscape.model.CyNetwork;
public class YoshikoSolution {
public ArrayList<CyNetwork> cluster;
public int id;
public YoshikoSolution() {
cluster = new ArrayList<CyNetwork>();
}
}
/**
*
*/
/**
* @author Philipp Spohr, Aug 27, 2017
*
*/
package de.hhu.ba.yoshikoWrapper.graphModel;
\ No newline at end of file
...@@ -12,8 +12,10 @@ import javax.swing.BoxLayout; ...@@ -12,8 +12,10 @@ import javax.swing.BoxLayout;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.border.Border; import javax.swing.border.Border;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode; import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow; import org.cytoscape.model.CyRow;
import org.cytoscape.view.model.CyNetworkView;
import de.hhu.ba.yoshikoWrapper.core.CyCore; import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
...@@ -24,6 +26,9 @@ public class ClusterView extends ComfortPanel { ...@@ -24,6 +26,9 @@ public class ClusterView extends ComfortPanel {
private final JLabel title; private final JLabel title;
private final JLabel clusterSize; private final JLabel clusterSize;
private final CyNetworkView clusterView;
private CyNetwork clusterSubNet;
private final Border regularBorder = BorderFactory.createLineBorder(Color.GRAY); private final Border regularBorder = BorderFactory.createLineBorder(Color.GRAY);
private final Border highlightBorder = BorderFactory.createLineBorder(Color.RED); private final Border highlightBorder = BorderFactory.createLineBorder(Color.RED);
...@@ -42,6 +47,9 @@ public class ClusterView extends ComfortPanel { ...@@ -42,6 +47,9 @@ public class ClusterView extends ComfortPanel {
title = new JLabel("CLUSTERTITLE"); title = new JLabel("CLUSTERTITLE");
clusterSize = new JLabel("CLUSTERLABEL"); clusterSize = new JLabel("CLUSTERLABEL");
this.clusterSubNet = CyCore.networkFactory.createNetwork();
this.clusterView = CyCore.networkViewFactory.createNetworkView(this.clusterSubNet);
this.addAll(title,clusterSize); this.addAll(title,clusterSize);
this.add(Box.createVerticalStrut(4)); this.add(Box.createVerticalStrut(4));
......
...@@ -16,14 +16,11 @@ import org.cytoscape.application.swing.CytoPanelComponent; ...@@ -16,14 +16,11 @@ import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName; import org.cytoscape.application.swing.CytoPanelName;
import org.cytoscape.work.AbstractTask; import org.cytoscape.work.AbstractTask;
import org.cytoscape.work.TaskIterator; import org.cytoscape.work.TaskIterator;
import org.slf4j.Logger;
import de.hhu.ba.yoshikoWrapper.core.AlgorithmTask; import de.hhu.ba.yoshikoWrapper.core.AlgorithmTask;
import de.hhu.ba.yoshikoWrapper.core.CyCore; import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader; import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
/**This class describes the Swing Panel that the user interacts with in cytoscape /**This class describes the Swing Panel that the user interacts with in cytoscape
* @author Philipp Spohr, Aug 6, 2017 * @author Philipp Spohr, Aug 6, 2017
...@@ -53,17 +50,11 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { ...@@ -53,17 +50,11 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
private final SolutionNumberChooser solutionNumberChooser; private final SolutionNumberChooser solutionNumberChooser;
//SYMBOLIC LINKS
private final SolutionsPanel solutionsPanel;
private final Logger logger = YoshikoLogger.getInstance().getLogger();
/** /**
* Main constructor, creates a new Panel and initializes subcomponents * Main constructor, creates a new Panel and initializes subcomponents
* @param solPanel * @param solPanel
*/ */
public MainPanel(SolutionsPanel solPanel) { public MainPanel( ) {
this.solutionsPanel = solPanel;
//SWING INIT //SWING INIT
this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS)); this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
...@@ -123,21 +114,6 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { ...@@ -123,21 +114,6 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (YoshikoLoader.isLibraryLoaded()){ if (YoshikoLoader.isLibraryLoaded()){
//Check if a solution exists, WARN THE USER!!!
if (CyCore.currentSolutions != null) {
int dialogResult = JOptionPane.showConfirmDialog (
null,
LocalizationManager.get("overrideSolution"),
LocalizationManager.get("warning"),
JOptionPane.YES_NO_OPTION
);
if (dialogResult != JOptionPane.YES_OPTION) {
return;
}
LibraryInterface.delete_ClusterEditingSolutions(CyCore.currentSolutions);
}
solutionsPanel.setVisible(false);
AbstractTask yoshiko = new AlgorithmTask( AbstractTask yoshiko = new AlgorithmTask(
CyCore.cy.getCurrentNetwork(), CyCore.cy.getCurrentNetwork(),
timeLimitSetter.getTimeLimit(), timeLimitSetter.getTimeLimit(),
...@@ -151,12 +127,9 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { ...@@ -151,12 +127,9 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
useTriangleCutsBox.isSelected(), useTriangleCutsBox.isSelected(),
usePartitionCutsBox.isSelected(), usePartitionCutsBox.isSelected(),
useHeuristic.isSelected(), useHeuristic.isSelected(),
solutionNumberChooser.getSolCount(), solutionNumberChooser.getSolCount()
solutionsPanel
); );
CyCore.dialogTaskManager.execute(new TaskIterator(1,yoshiko)); CyCore.dialogTaskManager.execute(new TaskIterator(1,yoshiko));
solutionsPanel.setVisible(true);
} }
else { else {
JOptionPane.showMessageDialog( JOptionPane.showMessageDialog(
......
...@@ -4,9 +4,12 @@ import java.awt.Component; ...@@ -4,9 +4,12 @@ import java.awt.Component;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout; import javax.swing.BoxLayout;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
...@@ -69,6 +72,10 @@ public class ReductionRulesChooser extends ComfortPanel{ ...@@ -69,6 +72,10 @@ public class ReductionRulesChooser extends ComfortPanel{
((JCheckBox)c).setSelected(true); ((JCheckBox)c).setSelected(true);
} }
} }
//Create titled border
Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
this.setBorder(BorderFactory.createTitledBorder(border, LocalizationManager.get("redRuleChooserTitle")));
} }
......
...@@ -8,6 +8,7 @@ import javax.swing.JLabel; ...@@ -8,6 +8,7 @@ import javax.swing.JLabel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class SolutionTab extends ComfortPanel { public class SolutionTab extends ComfortPanel {
...@@ -16,7 +17,12 @@ public class SolutionTab extends ComfortPanel { ...@@ -16,7 +17,12 @@ public class SolutionTab extends ComfortPanel {
private final ComfortPanel scrollPaneContent; private final ComfortPanel scrollPaneContent;
private final JLabel clusterCount; private final JLabel clusterCount;
public SolutionTab() { private final YoshikoSolution solution;
public SolutionTab(YoshikoSolution s) {
this.solution = s;
this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
//init swing components //init swing components
scrollPaneContent = new ComfortPanel(); scrollPaneContent = new ComfortPanel();
...@@ -25,7 +31,7 @@ public class SolutionTab extends ComfortPanel { ...@@ -25,7 +31,7 @@ public class SolutionTab extends ComfortPanel {
scrollPane.setPreferredSize(new Dimension(150,400)); scrollPane.setPreferredSize(new Dimension(150,400));
clusterCount = new JLabel("CLUSTERCOUNT"); clusterCount = new JLabel(LocalizationManager.get("clusterFound")+s.cluster.size());
this.addAll(clusterCount,scrollPane); this.addAll(clusterCount,scrollPane);
} }
...@@ -37,11 +43,4 @@ public class SolutionTab extends ComfortPanel { ...@@ -37,11 +43,4 @@ public class SolutionTab extends ComfortPanel {
return clusterView; return clusterView;
} }
public void setClusterNumber(long numberOfClusters) {
clusterCount.setText(LocalizationManager.get("clusterFound")+numberOfClusters);
}
} }
package de.hhu.ba.yoshikoWrapper.gui; package de.hhu.ba.yoshikoWrapper.gui;
import java.awt.Component; import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout; import javax.swing.BoxLayout;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane; import javax.swing.JTabbedPane;
import org.cytoscape.application.swing.CytoPanelComponent; import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName; import org.cytoscape.application.swing.CytoPanelName;
import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
/**Swing component that contains ALL solutions that are found during one run. /**Swing component that contains ALL solutions that are found during one run.
* Conforms to CY 3.5 by being a CytoPanelComponent which is the norm for "result" panels * Conforms to CY 3.5 by being a CytoPanelComponent which is the norm for "result" panels
...@@ -18,20 +25,71 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; ...@@ -18,20 +25,71 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
@SuppressWarnings("serial")//Will never be serialized @SuppressWarnings("serial")//Will never be serialized
public class SolutionsPanel extends ComfortPanel implements CytoPanelComponent{ public class SolutionsPanel extends ComfortPanel implements CytoPanelComponent{
private JTabbedPane solutionTabs; private final JTabbedPane solutionTabs;
private JLabel costLabel; private final JLabel costLabel;
private final JButton destroyButton;
private final JButton metaGraphButton;
public SolutionsPanel() { private final YoshikoResult result;
this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
public SolutionsPanel(YoshikoResult result) {
this.result = result;
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
//Init subcomponents
solutionTabs = new JTabbedPane(); solutionTabs = new JTabbedPane();
costLabel = new JLabel("COST"); for (YoshikoSolution s : result.solutions) {
this.addAll(costLabel,solutionTabs); SolutionTab tab = addSolutionTab(s);
}
costLabel = new JLabel();
setCost(result.editingCost);
destroyButton = new JButton(LocalizationManager.get("discardSolution"));
destroyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteSolution();
}
});
metaGraphButton = new JButton(LocalizationManager.get("createMetaGraph"));
metaGraphButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteSolution();
}
});
addAll(costLabel,solutionTabs,destroyButton);
}
public void deleteSolution() {
int dialogResult = JOptionPane.showConfirmDialog (
null,
LocalizationManager.get("deleteSolution"),
LocalizationManager.get("warning"),
JOptionPane.YES_NO_OPTION
);
if (dialogResult != JOptionPane.YES_OPTION) {
return;
}
CyCore.registrar.unregisterService(this,CytoPanelComponent.class);
removeAll();
super.setVisible(false);
} }
public SolutionTab addSolutionTab(long i) { public SolutionTab addSolutionTab(YoshikoSolution s) {
SolutionTab tab = new SolutionTab(); SolutionTab tab = new SolutionTab(s);
solutionTabs.add( solutionTabs.add(
LocalizationManager.get("solution")+" "+(i+1), LocalizationManager.get("solution")+" "+(s.id+1),
tab tab
); );
return tab; return tab;
...@@ -43,10 +101,6 @@ public class SolutionsPanel extends ComfortPanel implements CytoPanelComponent{ ...@@ -43,10 +101,6 @@ public class SolutionsPanel extends ComfortPanel implements CytoPanelComponent{
repaint(); repaint();
} }
public void reset() {
solutionTabs.removeAll();
}
@Override @Override
public Component getComponent() { public Component getComponent() {
return this; return this;
......
...@@ -11,10 +11,13 @@ clusterSize = Cluster Size: ...@@ -11,10 +11,13 @@ clusterSize = Cluster Size:
multFactor = Multiplicative Factor for SNR: multFactor = Multiplicative Factor for SNR:
paidCost = Paid a total modification cost of: paidCost = Paid a total modification cost of:
clusterFound = Clusters found: clusterFound = Clusters found:
overrideSolution = Running Yoshiko will override previous solutions. Continue? deleteSolution = Do you really want to delete this solution?
warning = Warning warning = Warning
timeLimitILP = Use time limit for ILP (s): timeLimitILP = Use time limit for ILP (s):
timedOutTitle = Timeout timedOutTitle = Timeout
timedOutMessage = The ILP exceeded the time-limit! timedOutMessage = The ILP exceeded the time-limit!
cost = Cost: cost = Cost:
nrSolutions = Number of Solutions: nrSolutions = Number of Solutions:
redRuleChooserTitle = Reduction Rules
discardSolution = Discard
createMetaGraph = Create Meta-Graph
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment