Compare commits

...

2 Commits
master ... opti

Author SHA1 Message Date
Gregory Martin f53b1230d6
Optimization: Grouping the controller in only one package 2018-02-03 09:54:02 +01:00
Gregory Martin cb608cca22
Optimization: Minor code optimization for OCLController 2018-02-03 09:54:02 +01:00
27 changed files with 81 additions and 205 deletions

View File

@ -1,2 +1,2 @@
Manifest-Version: 1.0
Main-Class: fr.insa.ocm.view.OCLApplication
Main-Class: fr.insa.ocm.OCLApplication

View File

@ -1,7 +1,7 @@
package fr.insa.ocm.view;
package fr.insa.ocm;
import fr.insa.ocm.view.mainuis.MainView;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.OCLController;
import fr.insa.ocm.controller.mainuis.MainView;
import javafx.application.Application;
import javafx.stage.Stage;

View File

@ -1,14 +1,9 @@
package fr.insa.ocm.viewmodel;
package fr.insa.ocm.controller;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.model.wrapper.api.AbstractAlgorithmLauncher;
import fr.insa.ocm.view.mainuis.MainView;
import fr.insa.ocm.controller.mainuis.MainView;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import java.util.List;
import java.util.Map;
public class InfoAlgorithm extends Thread {

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.viewmodel;
package fr.insa.ocm.controller;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.model.OCMManager;

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.viewmodel;
package fr.insa.ocm.controller;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.model.OCMManager;
@ -6,7 +6,7 @@ import fr.insa.ocm.model.oneclicklearning.cache.api.Cache;
import fr.insa.ocm.model.oneclicklearning.coactivelearning.api.CoactiveLearning;
import fr.insa.ocm.model.utils.fastforward.FastForward;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.misc.FastForwardWaitingView;
import fr.insa.ocm.controller.misc.FastForwardWaitingView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import javafx.application.Platform;
import javafx.beans.property.DoubleProperty;
@ -21,20 +21,21 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
*
* Note: Singleton class.
*/
public class OCLController {
public static final String VERSION = "0.5.0.1";
private static OCLController INSTANCE = new OCLController();
private volatile boolean stopRequested = false;
// The information about the last mining round.
private List<Pattern> interestingPattern;
private List<Pattern> neutralPattern;
private List<Pattern> trashedPattern;
private String pathDataFile = null;
// Keeps a track of the last fastforward done.
private FastForward fastForward;
@ -43,7 +44,6 @@ public class OCLController {
private CoactiveLearning.CoactiveType coactiveLearningSelected;
private Cache.CacheType cacheTypeSelected;
//This constructor is valid only if used by the Application launcher
private OCLController(){
INSTANCE = this;
@ -64,13 +64,9 @@ public class OCLController {
OCMManager.initialize(INSTANCE.wrapperTypeSelected, pathDataFile);
OCMManager.algorithmManagerStartMining();
INSTANCE.pathDataFile = pathDataFile;
InfoAlgorithm.setPaused(false);
Monitor.startMonitoring();
INSTANCE.waitForOCMResults();
DebugLogger.printDebug("OCLController: initialized correctly.");
}
@ -79,22 +75,16 @@ public class OCLController {
Monitor.pauseMonitoring();
OCMManager.requestStop();
INSTANCE.stopRequested = false;
INSTANCE.interestingPattern = new ArrayList<>();
INSTANCE.neutralPattern = new ArrayList<>();
INSTANCE.trashedPattern = new ArrayList<>();
INSTANCE.pathDataFile = pathDataFile;
DebugLogger.printDebug("OCLController: Reloading OCMManager.");
OCMManager.reload(INSTANCE.wrapperTypeSelected, INSTANCE.cacheTypeSelected, INSTANCE.coactiveLearningSelected, pathDataFile);
OCMManager.algorithmManagerStartMining();
Monitor.resumeMonitoring();
INSTANCE.waitForOCMResults();
DebugLogger.printDebug("OCLController: Reloaded correctly.");
}
@ -150,12 +140,10 @@ public class OCLController {
final DoubleProperty progressLearning = new SimpleDoubleProperty(0d);
final DoubleProperty progressMining = new SimpleDoubleProperty(0d);
Platform.runLater(() -> {
fastForwardWaitingView.bindCurrentOperation(currentOperation);
fastForwardWaitingView.bindCurrentTime(remainingTime);
fastForwardWaitingView.bindProgressLearning(progressLearning);
fastForwardWaitingView.bindProgressMining(progressMining);
});
fastForwardWaitingView.bindCurrentOperation(currentOperation);
fastForwardWaitingView.bindCurrentTime(remainingTime);
fastForwardWaitingView.bindProgressLearning(progressLearning);
fastForwardWaitingView.bindProgressMining(progressMining);
Thread threadFF = new Thread(fastForward);
threadFF.setName("FastForward");
@ -164,16 +152,11 @@ public class OCLController {
try {
while (!fastForward.isFinished()) {
String strCurrentOperation = fastForward.getCurrentOperation();
String strRemainingTime = fastForward.getRemainingTime();
Double dProgressLearning = fastForward.getProgressLearning();
Double dProgressMining = fastForward.getProgressMining();
Platform.runLater(() -> {
currentOperation.setValue("Current Operation: "+ strCurrentOperation + ".");
remainingTime.setValue("Estimated time before completion: "+ strRemainingTime);
progressLearning.setValue(dProgressLearning);
progressMining.setValue(dProgressMining);
currentOperation.setValue("Current Operation: "+ fastForward.getCurrentOperation() + ".");
remainingTime.setValue("Estimated time before completion: "+ fastForward.getRemainingTime());
progressLearning.setValue(fastForward.getProgressLearning());
progressMining.setValue(fastForward.getProgressMining());
});
Thread.sleep(100);
}
@ -181,112 +164,13 @@ public class OCLController {
e.printStackTrace();
}
// final int nbIter = 100;
// try {
// for (int i = 0; i < nbRound && !INSTANCE.stopRequested && !INSTANCE.ffStopRequested; ++i) {
// fastForwardWaitingView.setCurrentOperation("Mining");
// for (int j = 0; j < nbIter && !INSTANCE.stopRequested && !INSTANCE.ffStopRequested; ++j) {
// Thread.sleep((long)secPerRound*1000/nbIter);
// double pbm = (j+1.)/nbIter;
// fastForwardWaitingView.setProgressBarMining(pbm);
//
// int remainingTimeSec = (int)((nbRound-i) * secPerRound - (secPerRound/nbIter) * j);
// fastForwardWaitingView.setCurrentTime(remainingTimeSec/60 + " min " + remainingTimeSec%60 + " sec");
// }
//
// // We process the data gathered by the mining algorithms.
// fastForwardWaitingView.setCurrentOperation("Processing data");
//
//
//
// Rank<Pattern> rank = OCMManager.getNewRanking(INSTANCE.interestingPattern, INSTANCE.neutralPattern, INSTANCE.trashedPattern);
// Rank<Pattern> rawRank = new Rank<>(rank);
//
// if(mainPriority.equals(Condition.ActionPatternChoice.TRASH)){
// INSTANCE.trashedPattern = computeListPattern(rank, rawRank, listCondition, Condition.ActionPatternChoice.TRASH);
// rank.removeAll(INSTANCE.trashedPattern);
// INSTANCE.interestingPattern = computeListPattern(rank, rawRank, listCondition, Condition.ActionPatternChoice.KEEP);
// rank.removeAll(INSTANCE.interestingPattern);
// INSTANCE.neutralPattern = new ArrayList<>(rank);
// }else{
// INSTANCE.interestingPattern = computeListPattern(rank, rawRank, listCondition, Condition.ActionPatternChoice.KEEP);
// rank.removeAll(INSTANCE.interestingPattern);
// INSTANCE.trashedPattern = computeListPattern(rank, rawRank, listCondition, Condition.ActionPatternChoice.TRASH);
// rank.removeAll(INSTANCE.trashedPattern);
// INSTANCE.neutralPattern = new ArrayList<>(rank);
// }
//
//
// // Print in the error channel the results of the automated selection.
//
// System.err.println("Kept Patterns :");
// INSTANCE.interestingPattern.forEach(System.err::println);
// System.err.println("Neutral Patterns :");
// INSTANCE.neutralPattern.forEach(System.err::println);
// System.err.println("Trashed Patterns :");
// INSTANCE.trashedPattern.forEach(System.err::println);
// System.err.println("");
//
// int nbPatternRank = rawRank.size();
// double nbQuality = INSTANCE.interestingPattern.size() - INSTANCE.trashedPattern.size();
// DebugLogger.printQuality(i +";"+ ((nbQuality/nbPatternRank)+1)/2);
//
// double pbr = (i+1.)/nbRound;
// fastForwardWaitingView.setProgressBarRound(pbr);
// }
// fastForwardWaitingView.setCurrentOperation("Finished");
// fastForwardWaitingView.setCurrentTime("Finished");
// MainView.getCurrentMainView().refreshKeptPatternsList();
// }catch(InterruptedException e){
// e.printStackTrace();
// }
fastForwardWaitingView.setHasFinished(true);
}
//********** Internal Methods **********//
private void waitForOCMInitialization(){
try {
while(!OCMManager.isInitialized() || !OCMManager.algorithmManagerIsMining()){
Thread.sleep(500);
if(stopRequested){
return;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void waitForOCMResults(){
// try{
// DebugLogger.printDebug("OCLController: Trying to find better result.");
// Rank<Pattern> rank = OCMManager.getNewRanking(interestingPattern, neutralPattern, trashedPattern);
// while (rank.size() <= 0){
// Thread.sleep(250);
// DebugLogger.printDebug("OCLController: Trying to find better result.");
// rank = OCMManager.getNewRanking(interestingPattern, neutralPattern, trashedPattern);
// if(stopRequested){
// return;
// }
// }
// synchronized (OCLController.class) {
// userRank.clear();
// userRank.addAll(rank);
// }
// } catch (InterruptedException e){
// e.printStackTrace();
// }
}
//********** Getters/Setters Methods **********//
// Getters //
public static String getPathDataFile(){
return INSTANCE.pathDataFile;
}
// Setters //
public static void setPatternList(List<Pattern> interestingPattern, List<Pattern> neutralPattern, List<Pattern> trashedPattern){
INSTANCE.interestingPattern = interestingPattern;
@ -305,7 +189,6 @@ public class OCLController {
}
public static void requestStop(){
INSTANCE.stopRequested = true;
DebugLogger.printDebug("OCLController: Stopping the controller.");
OCMManager.requestStop();
InfoAlgorithm.requestStop();

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.mainuis;
package fr.insa.ocm.controller.mainuis;
import javafx.fxml.FXML;

View File

@ -1,14 +1,13 @@
package fr.insa.ocm.view.mainuis;
package fr.insa.ocm.controller.mainuis;
import org.jetbrains.annotations.NotNull;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.model.utils.serialize.condition.ConditionsDeserializer;
import fr.insa.ocm.model.utils.serialize.condition.ConditionsSerializer;
import fr.insa.ocm.view.OCLApplication;
import fr.insa.ocm.view.misc.FastForwardWaitingView;
import fr.insa.ocm.view.misc.parts.fastforward.AddConditionView;
import fr.insa.ocm.view.misc.parts.fastforward.ConditionView;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.misc.FastForwardWaitingView;
import fr.insa.ocm.controller.misc.parts.fastforward.AddConditionView;
import fr.insa.ocm.controller.misc.parts.fastforward.ConditionView;
import fr.insa.ocm.controller.OCLController;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import javafx.application.Platform;
import javafx.collections.FXCollections;

View File

@ -1,16 +1,17 @@
package fr.insa.ocm.view.mainuis;
package fr.insa.ocm.controller.mainuis;
import fr.insa.ocm.controller.misc.ErrorView;
import fr.insa.ocm.controller.misc.InfoView;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.model.utils.serialize.OCMSerializer;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.OCLApplication;
import fr.insa.ocm.view.misc.*;
import fr.insa.ocm.view.misc.menus.AboutView;
import fr.insa.ocm.view.misc.menus.MonitorView;
import fr.insa.ocm.view.misc.menus.LoadStateView;
import fr.insa.ocm.view.misc.menus.SettingsView;
import fr.insa.ocm.viewmodel.InfoAlgorithm;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.OCLApplication;
import fr.insa.ocm.controller.misc.menus.AboutView;
import fr.insa.ocm.controller.misc.menus.MonitorView;
import fr.insa.ocm.controller.misc.menus.LoadStateView;
import fr.insa.ocm.controller.misc.menus.SettingsView;
import fr.insa.ocm.controller.InfoAlgorithm;
import fr.insa.ocm.controller.OCLController;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
@ -25,7 +26,6 @@ import javafx.stage.Stage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainView {

View File

@ -1,10 +1,10 @@
package fr.insa.ocm.view.mainuis;
package fr.insa.ocm.controller.mainuis;
import org.jetbrains.annotations.NotNull;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.misc.parts.mining.PatternView;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.misc.parts.mining.PatternView;
import fr.insa.ocm.controller.OCLController;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.misc;
package fr.insa.ocm.controller.misc;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;

View File

@ -1,6 +1,6 @@
package fr.insa.ocm.view.misc;
package fr.insa.ocm.controller.misc;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.OCLController;
import javafx.application.Platform;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.StringProperty;
@ -64,19 +64,19 @@ public class FastForwardWaitingView {
}
public void bindCurrentOperation(StringProperty currentOpration){
labelCurrentOperation.textProperty().bind(currentOpration);
Platform.runLater(() -> labelCurrentOperation.textProperty().bind(currentOpration));
}
public void bindCurrentTime(StringProperty remainingTime){
labelTime.textProperty().bind(remainingTime);
Platform.runLater(() -> labelTime.textProperty().bind(remainingTime));
}
public void bindProgressMining(DoubleProperty progressMining){
progressBarMining.progressProperty().bind(progressMining);
Platform.runLater(() -> progressBarMining.progressProperty().bind(progressMining));
}
public void bindProgressLearning(DoubleProperty progressLearning) {
progressBarRound.progressProperty().bind(progressLearning);
Platform.runLater(() -> progressBarRound.progressProperty().bind(progressLearning));
}
private void buttonAbortFinishPressed(){

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.misc;
package fr.insa.ocm.controller.misc;
import org.jetbrains.annotations.NotNull;
import javafx.fxml.FXML;

View File

@ -1,6 +1,6 @@
package fr.insa.ocm.view.misc.menus;
package fr.insa.ocm.controller.misc.menus;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.OCLController;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;

View File

@ -1,11 +1,11 @@
package fr.insa.ocm.view.misc.menus;
package fr.insa.ocm.controller.misc.menus;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.model.utils.serialize.OCMDeserializer;
import fr.insa.ocm.view.misc.ErrorView;
import fr.insa.ocm.view.misc.InfoView;
import fr.insa.ocm.view.mainuis.MainView;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.misc.ErrorView;
import fr.insa.ocm.controller.misc.InfoView;
import fr.insa.ocm.controller.mainuis.MainView;
import fr.insa.ocm.controller.OCLController;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.concurrent.Task;

View File

@ -1,8 +1,8 @@
package fr.insa.ocm.view.misc.menus;
package fr.insa.ocm.controller.misc.menus;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.viewmodel.Monitor;
import fr.insa.ocm.controller.Monitor;
import javafx.beans.property.SimpleStringProperty;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;

View File

@ -1,13 +1,12 @@
package fr.insa.ocm.view.misc.menus;
package fr.insa.ocm.controller.misc.menus;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.model.oneclicklearning.cache.set.CacheSet;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.misc.parts.settings.library.SettingsRealKDView;
import fr.insa.ocm.view.misc.parts.settings.library.SettingsSPMFView;
import fr.insa.ocm.view.misc.parts.settings.pattern.SettingsPatternView;
import fr.insa.ocm.viewmodel.OCLController;
import fr.insa.ocm.controller.misc.parts.settings.library.SettingsRealKDView;
import fr.insa.ocm.controller.misc.parts.settings.library.SettingsSPMFView;
import fr.insa.ocm.controller.misc.parts.settings.pattern.SettingsPatternView;
import fr.insa.ocm.controller.OCLController;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;

View File

@ -1,7 +1,7 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.model.DebugLogger;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;

View File

@ -1,7 +1,7 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import fr.insa.ocm.model.utils.fastforward.condition.ConditionAlgorithm;
import javafx.fxml.FXML;

View File

@ -1,8 +1,8 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.model.OCMManager;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import fr.insa.ocm.model.utils.fastforward.condition.ConditionAttribute;
import javafx.fxml.FXML;

View File

@ -1,7 +1,7 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import fr.insa.ocm.model.utils.fastforward.condition.ConditionMeasureBetween;
import javafx.fxml.FXML;

View File

@ -1,7 +1,7 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import fr.insa.ocm.model.utils.fastforward.condition.ConditionMeasureDynamic;
import javafx.fxml.FXML;

View File

@ -1,7 +1,7 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import fr.insa.ocm.model.utils.fastforward.condition.ConditionMeasureStatic;
import javafx.fxml.FXML;

View File

@ -1,6 +1,6 @@
package fr.insa.ocm.view.misc.parts.fastforward;
package fr.insa.ocm.controller.misc.parts.fastforward;
import fr.insa.ocm.view.mainuis.FastForwardView;
import fr.insa.ocm.controller.mainuis.FastForwardView;
import fr.insa.ocm.model.utils.fastforward.condition.Condition;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.misc.parts.mining;
package fr.insa.ocm.controller.misc.parts.mining;
import org.jetbrains.annotations.NotNull;
import fr.insa.ocm.model.DebugLogger;

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.misc.parts.settings.library;
package fr.insa.ocm.controller.misc.parts.settings.library;
import javafx.fxml.FXML;

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.misc.parts.settings.library;
package fr.insa.ocm.controller.misc.parts.settings.library;
import fr.insa.ocm.model.DebugLogger;

View File

@ -1,4 +1,4 @@
package fr.insa.ocm.view.misc.parts.settings.pattern;
package fr.insa.ocm.controller.misc.parts.settings.pattern;
import fr.insa.ocm.model.wrapper.api.Pattern;
import fr.insa.ocm.model.wrapper.spmf.AlgorithmLauncherSPMF;