From 6940db5c2557dd114c509f68a72220e06a6138f7 Mon Sep 17 00:00:00 2001 From: Philipp Spohr <spohr.philipp@web.de> Date: Mon, 4 Sep 2017 20:53:57 +0200 Subject: [PATCH] Basic support for killing cplex various stuff UTF-8 fix for whining maven Enabled time-limit by default --- pom.xml | 2 +- .../ba/yoshikoWrapper/core/AlgorithmTask.java | 19 +++++-- .../yoshikoWrapper/core/CallbackHandler.java | 13 ++--- .../yoshikoWrapper/gui/TimeLimitSetter.java | 5 +- .../ba/yoshikoWrapper/swig/CoreAlgorithm.java | 51 +++++++++++++++++++ .../{JavaInformer.java => CplexInformer.java} | 22 ++++---- .../yoshikoWrapper/swig/LibraryInterface.java | 10 ++-- .../swig/LibraryInterfaceJNI.java | 22 ++++---- 8 files changed, 101 insertions(+), 43 deletions(-) create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/swig/CoreAlgorithm.java rename src/main/java/de/hhu/ba/yoshikoWrapper/swig/{JavaInformer.java => CplexInformer.java} (57%) diff --git a/pom.xml b/pom.xml index bc32d80..d697b89 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ <bundle.symbolicName>de.hhu.ba.yoshikoWrapper</bundle.symbolicName> <bundle.namespace>de.hhu.ba.yoshikoWrapper</bundle.namespace> <cytoscape.api.version>3.0.1</cytoscape.api.version> - + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven-bundle-plugin.version>2.3.4</maven-bundle-plugin.version> <osgi.api.version>4.2.0</osgi.api.version> </properties> diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java index 64579b6..8c182bf 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java @@ -40,6 +40,7 @@ import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution; import de.hhu.ba.yoshikoWrapper.gui.ResultPanel; import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger; import de.hhu.ba.yoshikoWrapper.swig.ClusterEditingSolutions; +import de.hhu.ba.yoshikoWrapper.swig.CoreAlgorithm; import de.hhu.ba.yoshikoWrapper.swig.IntVector; import de.hhu.ba.yoshikoWrapper.swig.LibraryInput; import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface; @@ -66,9 +67,12 @@ public class AlgorithmTask extends AbstractTask { private boolean useHeuristic; private int numberOfSolutions; - //temps, need to be freed in C++ + //Temps, need to be freed in C++ private LibraryInput input; private ClusterEditingSolutions result; + + private CoreAlgorithm ca; + private CallbackHandler ch; public AlgorithmTask( CyNetwork net, @@ -133,10 +137,9 @@ public class AlgorithmTask extends AbstractTask { //Set the default value for insertion cost input.setDefaultInsertionCost(insertionCostDefault); - + //Call Yoshiko <<< Algorithm is performed here - result = LibraryInterface.processLibraryInput( - input, + ca = LibraryInterface.getRun(input, numberOfSolutions, bitMaskRules, multiplicativeFactor, @@ -144,7 +147,7 @@ public class AlgorithmTask extends AbstractTask { separateTriangles, useHeuristic ); - + result = ca.run(); taskMonitor.setProgress(0.9); @@ -199,6 +202,7 @@ public class AlgorithmTask extends AbstractTask { } //At this point the C++ objects can be freed, in case that the algorithm terminates beforehand they need to be cleaned-up elsewhere + ca.delete(); input.delete(); result.delete(); @@ -218,6 +222,11 @@ public class AlgorithmTask extends AbstractTask { @Override public void cancel() { //Free C++ resources + if (ca != null) { + System.out.println("Deleting CoreAlgorithm instance!"); + ca.cancel(); + ca.delete(); + } if (input != null) { input.delete(); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java index 5a021f5..bda1ea0 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java @@ -1,14 +1,7 @@ package de.hhu.ba.yoshikoWrapper.core; -import de.hhu.ba.yoshikoWrapper.swig.JavaInformer; +import de.hhu.ba.yoshikoWrapper.swig.CplexInformer; -public class CallbackHandler extends JavaInformer { - public CallbackHandler() { - - } - - @Override - public void callback() { - - } +public abstract class CallbackHandler extends CplexInformer { + public abstract void callback(); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java index 576e6de..41d9f0a 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java @@ -40,8 +40,7 @@ public class TimeLimitSetter extends JPanel{ this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); checkBox = new JCheckBox(LocalizationManager.get("timeLimitILP")); numberField = new IntegerInputField(); - numberField.setText("60"); - numberField.setEnabled(false); //By default time limit is turned off + numberField.setText("30"); checkBox.addActionListener( new ActionListener() { @@ -52,6 +51,8 @@ public class TimeLimitSetter extends JPanel{ } ); + this.checkBox.setSelected(true); + setEnabled(true); //REGISTER COMPONENTS SwingUtil.addAll(this,checkBox,numberField); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/CoreAlgorithm.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/CoreAlgorithm.java new file mode 100644 index 0000000..4ae599e --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/CoreAlgorithm.java @@ -0,0 +1,51 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 3.0.8 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package de.hhu.ba.yoshikoWrapper.swig; + +public class CoreAlgorithm { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected CoreAlgorithm(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(CoreAlgorithm obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + LibraryInterfaceJNI.delete_CoreAlgorithm(swigCPtr); + } + swigCPtr = 0; + } + } + + public ClusterEditingSolutions run() { + long cPtr = LibraryInterfaceJNI.CoreAlgorithm_run(swigCPtr, this); + return (cPtr == 0) ? null : new ClusterEditingSolutions(cPtr, false); + } + + public void cancel() { + LibraryInterfaceJNI.CoreAlgorithm_cancel(swigCPtr, this); + } + + public void registerCplexInformer(CplexInformer informer) { + LibraryInterfaceJNI.CoreAlgorithm_registerCplexInformer(swigCPtr, this, CplexInformer.getCPtr(informer), informer); + } + +} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/JavaInformer.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/CplexInformer.java similarity index 57% rename from src/main/java/de/hhu/ba/yoshikoWrapper/swig/JavaInformer.java rename to src/main/java/de/hhu/ba/yoshikoWrapper/swig/CplexInformer.java index 2bdfe0b..7bff664 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/JavaInformer.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/CplexInformer.java @@ -8,16 +8,16 @@ package de.hhu.ba.yoshikoWrapper.swig; -public class JavaInformer { +public class CplexInformer { private transient long swigCPtr; protected transient boolean swigCMemOwn; - protected JavaInformer(long cPtr, boolean cMemoryOwn) { + protected CplexInformer(long cPtr, boolean cMemoryOwn) { swigCMemOwn = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr(JavaInformer obj) { + protected static long getCPtr(CplexInformer obj) { return (obj == null) ? 0 : obj.swigCPtr; } @@ -29,7 +29,7 @@ public class JavaInformer { if (swigCPtr != 0) { if (swigCMemOwn) { swigCMemOwn = false; - LibraryInterfaceJNI.delete_JavaInformer(swigCPtr); + LibraryInterfaceJNI.delete_CplexInformer(swigCPtr); } swigCPtr = 0; } @@ -42,21 +42,21 @@ public class JavaInformer { public void swigReleaseOwnership() { swigCMemOwn = false; - LibraryInterfaceJNI.JavaInformer_change_ownership(this, swigCPtr, false); + LibraryInterfaceJNI.CplexInformer_change_ownership(this, swigCPtr, false); } public void swigTakeOwnership() { swigCMemOwn = true; - LibraryInterfaceJNI.JavaInformer_change_ownership(this, swigCPtr, true); + LibraryInterfaceJNI.CplexInformer_change_ownership(this, swigCPtr, true); } - public void callback() { - if (getClass() == JavaInformer.class) LibraryInterfaceJNI.JavaInformer_callback(swigCPtr, this); else LibraryInterfaceJNI.JavaInformer_callbackSwigExplicitJavaInformer(swigCPtr, this); + public void callback(double gap) { + if (getClass() == CplexInformer.class) LibraryInterfaceJNI.CplexInformer_callback(swigCPtr, this, gap); else LibraryInterfaceJNI.CplexInformer_callbackSwigExplicitCplexInformer(swigCPtr, this, gap); } - public JavaInformer() { - this(LibraryInterfaceJNI.new_JavaInformer(), true); - LibraryInterfaceJNI.JavaInformer_director_connect(this, swigCPtr, swigCMemOwn, true); + public CplexInformer() { + this(LibraryInterfaceJNI.new_CplexInformer(), true); + LibraryInterfaceJNI.CplexInformer_director_connect(this, swigCPtr, swigCMemOwn, true); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java index 123dbf6..df59eeb 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java @@ -13,11 +13,6 @@ public class LibraryInterface { return LibraryInterfaceJNI.getVersionString(); } - public static ClusterEditingSolutions processLibraryInput(LibraryInput libIn, int nrOptimalSolutions, String rulesBitMask, double multiplicativeFactor, boolean separatePartitionCuts, boolean separateTriangles, boolean useHeuristic) { - long cPtr = LibraryInterfaceJNI.processLibraryInput(LibraryInput.getCPtr(libIn), libIn, nrOptimalSolutions, rulesBitMask, multiplicativeFactor, separatePartitionCuts, separateTriangles, useHeuristic); - return (cPtr == 0) ? null : new ClusterEditingSolutions(cPtr, false); - } - public static void setTimeLimit(int limit) { LibraryInterfaceJNI.setTimeLimit(limit); } @@ -26,4 +21,9 @@ public class LibraryInterface { LibraryInterfaceJNI.setVerbosity(level); } + public static CoreAlgorithm getRun(LibraryInput input, int nrOptimalSolutions, String rulesBitMask, double multiplicativeFactor, boolean useHeuristic, boolean separatePartitionCuts, boolean separateTriangles) { + long cPtr = LibraryInterfaceJNI.getRun(LibraryInput.getCPtr(input), input, nrOptimalSolutions, rulesBitMask, multiplicativeFactor, useHeuristic, separatePartitionCuts, separateTriangles); + return (cPtr == 0) ? null : new CoreAlgorithm(cPtr, false); + } + } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java index 1b4f46d..999ecd2 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java @@ -34,19 +34,23 @@ public class LibraryInterfaceJNI { public final static native void LibraryInput_addEdge__SWIG_1(long jarg1, LibraryInput jarg1_, long jarg2, long jarg3, double jarg4, boolean jarg5, boolean jarg6); public final static native void LibraryInput_setSize(long jarg1, LibraryInput jarg1_, long jarg2); public final static native void LibraryInput_setDefaultInsertionCost(long jarg1, LibraryInput jarg1_, double jarg2); - public final static native void JavaInformer_callback(long jarg1, JavaInformer jarg1_); - public final static native void JavaInformer_callbackSwigExplicitJavaInformer(long jarg1, JavaInformer jarg1_); - public final static native void delete_JavaInformer(long jarg1); - public final static native long new_JavaInformer(); - public final static native void JavaInformer_director_connect(JavaInformer obj, long cptr, boolean mem_own, boolean weak_global); - public final static native void JavaInformer_change_ownership(JavaInformer obj, long cptr, boolean take_or_release); + public final static native void CplexInformer_callback(long jarg1, CplexInformer jarg1_, double jarg2); + public final static native void CplexInformer_callbackSwigExplicitCplexInformer(long jarg1, CplexInformer jarg1_, double jarg2); + public final static native void delete_CplexInformer(long jarg1); + public final static native long new_CplexInformer(); + public final static native void CplexInformer_director_connect(CplexInformer obj, long cptr, boolean mem_own, boolean weak_global); + public final static native void CplexInformer_change_ownership(CplexInformer obj, long cptr, boolean take_or_release); + public final static native long CoreAlgorithm_run(long jarg1, CoreAlgorithm jarg1_); + public final static native void CoreAlgorithm_cancel(long jarg1, CoreAlgorithm jarg1_); + public final static native void CoreAlgorithm_registerCplexInformer(long jarg1, CoreAlgorithm jarg1_, long jarg2, CplexInformer jarg2_); + public final static native void delete_CoreAlgorithm(long jarg1); public final static native String getVersionString(); - public final static native long processLibraryInput(long jarg1, LibraryInput jarg1_, int jarg2, String jarg3, double jarg4, boolean jarg5, boolean jarg6, boolean jarg7); public final static native void setTimeLimit(int jarg1); public final static native void setVerbosity(int jarg1); + public final static native long getRun(long jarg1, LibraryInput jarg1_, int jarg2, String jarg3, double jarg4, boolean jarg5, boolean jarg6, boolean jarg7); - public static void SwigDirector_JavaInformer_callback(JavaInformer jself) { - jself.callback(); + public static void SwigDirector_CplexInformer_callback(CplexInformer jself, double gap) { + jself.callback(gap); } private final static native void swig_module_init(); -- GitLab