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

Some work on localization / various small quality of life improvements

parent b82e3731
Branches
Tags
No related merge requests found
Showing
with 114 additions and 82 deletions
......@@ -10,6 +10,7 @@ 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.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
import de.hhu.ba.yoshikoWrapper.gui.MainPanel;
import de.hhu.ba.yoshikoWrapper.gui.SolutionsPanel;
......@@ -29,16 +30,23 @@ public class CyActivator extends AbstractCyActivator {
propsReaderServiceProps.setProperty("cyPropertyName", "yoshiko.props");
registerAllServices(context,cm,propsReaderServiceProps);
//Create symbolic links to give other classes access
CyCore.cy = getService(context, CyApplicationManager.class);
CyCore.dialogTaskManager = getService(context, DialogTaskManager.class);
CyCore.cm = cm;
//Set language according to settings
LocalizationManager.switchLanguage(cm.getProperties().getProperty("locale", "enUS"));
//Attempt to find the yoshiko lib in r a previously stored location
YoshikoLoader.provideConfiguration(cm);
if (!YoshikoLoader.isLibraryLoaded()){
YoshikoLoader.loadLibrary(cm.getProperties().getProperty("pathToYoshiko"));
String pathToYosh = cm.getProperties().getProperty("pathToYoshiko");
if (pathToYosh != null && pathToYosh != "null") {
YoshikoLoader.loadLibrary(pathToYosh);
}
}
//Create symbolic links to give other classes access
CyCore.cy = getService(context, CyApplicationManager.class);
CyCore.dialogTaskManager = getService(context, DialogTaskManager.class);
//main panel and result panel
SolutionsPanel solutionsPanel = new SolutionsPanel();
MainPanel mainPanel = new MainPanel(solutionsPanel);
......
......@@ -8,6 +8,7 @@ import org.cytoscape.work.AbstractTask;
import org.cytoscape.work.TaskMonitor;
import org.slf4j.Logger;
import de.hhu.ba.yoshikoWrapper.gui.SolutionsPanel;
import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_std__vectorT_int_t;
......@@ -29,6 +30,8 @@ public class AlgorithmTask extends AbstractTask {
private int timeLimit;
private CyNetwork net;
private SolutionsPanel solutionsPanel;
public AlgorithmTask(
CyNetwork net,
int timeLimit,
......@@ -36,7 +39,8 @@ public class AlgorithmTask extends AbstractTask {
CyColumn permanentColumn,
CyColumn forbiddenColumn,
double insertionCostDefault,
double deletionCostDefault
double deletionCostDefault,
SolutionsPanel solutionsPanel
)
{
this.net = net;
......@@ -46,11 +50,12 @@ public class AlgorithmTask extends AbstractTask {
this.forbiddenColumn = forbiddenColumn;
this.insertionCostDefault = insertionCostDefault;
this.deletionCostDefault = deletionCostDefault;
this.solutionsPanel = solutionsPanel;
}
@Override
public void run(TaskMonitor taskMonitor) throws Exception {
taskMonitor.setTitle(LocalizationManager.yoshikoStrings().getString("yoshTask"));
taskMonitor.setTitle(LocalizationManager.get("yoshTask"));
taskMonitor.setProgress(0.0);
//Get current network
if (net == null) {
......@@ -85,6 +90,8 @@ public class AlgorithmTask extends AbstractTask {
long numberOfSolutions = LibraryInterface.ClusterEditingSolutions_getNumberOfSolutions(solutions);
this.solutionsPanel.erase();
this.solutionsPanel.generateSolTabs(numberOfSolutions);
System.out.println("Found: "+numberOfSolutions+" solutions!");
double modificationCost = LibraryInterface.ClusterEditingSolutions_getTotalCost(solutions);
System.out.println("Paid a total modification cost of: "+modificationCost);
......
......@@ -6,4 +6,5 @@ import org.cytoscape.work.swing.DialogTaskManager;
public class CyCore {
public static CyApplicationManager cy;
public static DialogTaskManager dialogTaskManager;
public static ConfigurationManager cm;
}
package de.hhu.ba.yoshikoWrapper.core;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
public class LocalizationManager {
//Locales
static public final Locale usEnglish = new Locale("en","US");
static public final Locale german = new Locale("de","DE");
//List of Locales
static public final ArrayList<Locale> locales = new ArrayList<Locale>(
Arrays.asList(
usEnglish,
german
)
);
static private final Locale usEnglish = new Locale("en","US");
static private final Locale german = new Locale("de","DE");
static private final HashMap<String, Locale> locales;
static
{
locales = new HashMap<String, Locale>();
locales.put("enUS", usEnglish);
locales.put("deDE", german);
}
static private ResourceBundle currentBundle;
static public Locale currentLanguage = usEnglish;
static private Locale currentLanguage = usEnglish;
static public Collection<Locale> getLocales(){
return locales.values();
}
static public ResourceBundle yoshikoStrings() {
static public String get(String key) {
if (currentBundle == null) {
currentBundle = ResourceBundle.getBundle("YoshikoStrings",currentLanguage);
}
return currentBundle;
return currentBundle.getString(key);
}
static public void switchLanguage(Locale lcl) {
currentLanguage = lcl;
updateBundle();
}
public static void switchLanguage(String key) {
System.out.println("DEBUG: SWITCHING TO: "+key);
currentLanguage = locales.get(key);
updateBundle();
}
private static void updateBundle() {
currentBundle = ResourceBundle.getBundle("YoshikoStrings",currentLanguage);
CyCore.cm.getProperties().setProperty(
"locale",
currentLanguage.getLanguage()+currentLanguage.getCountry()
);
}
}
......@@ -8,7 +8,6 @@ import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
public class YoshikoLoader {
private static ConfigurationManager cm;
private static boolean isLoaded;
//Symbolic Links
......@@ -27,7 +26,7 @@ public class YoshikoLoader {
System.out.println("Attempting to load library @: "+libPath);
System.load(libPath);
//update cfg
cm.getProperties().setProperty("pathToYoshiko", libPath);
CyCore.cm.getProperties().setProperty("pathToYoshiko", libPath);
}
catch(Exception e) {
//e.printStackTrace();
......@@ -38,11 +37,6 @@ public class YoshikoLoader {
//SETTER / GETTER
public static void provideConfiguration(ConfigurationManager _cm) {
cm = _cm;
}
public static boolean isLibraryLoaded() {
return isLoaded;
}
......
......@@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
import java.util.Locale;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
......@@ -12,15 +13,15 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
public class LanguageSwitcher extends JComboBox<Locale>{
public LanguageSwitcher() {
for (Locale l: LocalizationManager.locales) {
for (Locale l: LocalizationManager.getLocales() ) {
this.addItem(l);
}
this.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("HI");
LocalizationManager.switchLanguage(getItemAt(getSelectedIndex()));
JOptionPane.showMessageDialog(null,LocalizationManager.get("restartNeeded"));
}
});
......
......@@ -29,8 +29,8 @@ public class LibraryPanel extends ComfortPanel {
this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
//SWING COMPONENT INITIALIZATION
libStatusPanel = new LibStatusPanel();
searchLibButton = new JButton(LocalizationManager.yoshikoStrings().getString("resolveLibPath"));
yoshikoVersionLabel = new JLabel(LocalizationManager.yoshikoStrings().getString("yoshVersion"));
searchLibButton = new JButton(LocalizationManager.get("resolveLibPath"));
yoshikoVersionLabel = new JLabel(LocalizationManager.get("yoshVersion"));
libStatusPanel.setStyle(YoshikoLoader.isLibraryLoaded());
......
......@@ -9,6 +9,7 @@ import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import org.cytoscape.application.swing.CytoPanelComponent;
......@@ -18,6 +19,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.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
/**This class describes the Swing Panel that the user interacts with in cytoscape
......@@ -87,11 +89,20 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
ecPanel.getPermanentColumn(),
ecPanel.getForbiddenColumn(),
ecPanel.getDefaultInsertionCost(),
ecPanel.getDefaultDeletionCost()
ecPanel.getDefaultDeletionCost(),
solutionsPanel
);
CyCore.dialogTaskManager.execute(new TaskIterator(1,yoshiko));
solutionsPanel.setVisible(true);
}
else {
JOptionPane.showMessageDialog(
null,
LocalizationManager.get("noLibTitle"),
LocalizationManager.get("noLibMessage"),
JOptionPane.ERROR_MESSAGE
);
}
}
});
......
package de.hhu.ba.yoshikoWrapper.gui;
import java.awt.event.ActionEvent;
import org.cytoscape.application.swing.AbstractCyAction;
import org.cytoscape.application.swing.CySwingApplication;
//import org.cytoscape.application.swing.CytoPanel;
//import org.cytoscape.application.swing.CytoPanelName;
public class MainPanelAction extends AbstractCyAction {
/**
*
*/
private static final long serialVersionUID = -4710814976875737575L;
//private CySwingApplication desktopApp;
//private final CytoPanel cytoPanelWest;
//private MainPanel mainPanel;
/**Main constructor, generates a new CyAction handling the main panel
* @param desktopApp
* @param mainPanel
*/
public MainPanelAction(
CySwingApplication desktopApp,
MainPanel mainPanel
){
super("Control Panel");
setPreferredMenu("Apps.Clustering");
//this.desktopApp = desktopApp;
//this.cytoPanelWest = this.desktopApp.getCytoPanel(CytoPanelName.WEST);
//this.mainPanel = mainPanel;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
package de.hhu.ba.yoshikoWrapper.gui;
@SuppressWarnings("serial")
public class SolutionTab extends ComfortPanel {
}
......@@ -3,6 +3,7 @@ package de.hhu.ba.yoshikoWrapper.gui;
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.JTabbedPane;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName;
......@@ -12,6 +13,28 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
@SuppressWarnings("serial")//Will never be serialized
public class SolutionsPanel extends ComfortPanel implements CytoPanelComponent{
private JTabbedPane solutionTabs;
public SolutionsPanel() {
solutionTabs = new JTabbedPane();
this.add(solutionTabs);
}
public void generateSolTabs(long numberOfSolutions) {
for (long i=0;i<numberOfSolutions;i++) {
solutionTabs.add(
LocalizationManager.get("solution")+" "+(i+1),
new SolutionTab()
);
}
}
/**
* Helper pseudo-destructor as the object itself can't be reassigned due to Cytoscapes registry
*/
public void erase() {
this.removeAll();
}
@Override
public Component getComponent() {
return this;
......@@ -24,7 +47,7 @@ public class SolutionsPanel extends ComfortPanel implements CytoPanelComponent{
@Override
public String getTitle() {
return LocalizationManager.yoshikoStrings().getString("resultsPanelTitle");
return LocalizationManager.get("resultsPanelTitle");
}
@Override
......
......@@ -2,3 +2,7 @@ resultsPanelTitle = Yoshiko Results
yoshVersion = Yoshiko Version
resolveLibPath = Resolve Yoshiko Library Path
yoshTask = Performing Yoshiko Algorithm
solution = Solution
restartNeeded = Changes only take effect after restart!
noLibTitle = Library not loaded!
noLibMessage = There is no Yoshiko Library currently loaded! You might have to specify its location.
\ No newline at end of file
yoshiko.pathToYoshiko = "NO PATH SET"
\ No newline at end of file
yoshiko.pathToYoshiko = null
yoshiko.locale = "enUS"
\ 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