|
@@ -10,20 +10,32 @@ import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.io.OutputStreamWriter;
|
|
import java.io.OutputStreamWriter;
|
|
|
|
+import java.math.RoundingMode;
|
|
|
|
+import java.text.NumberFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.LinkedList;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Locale;
|
|
|
|
+import java.util.function.Consumer;
|
|
|
|
+import java.util.function.DoubleConsumer;
|
|
|
|
+import java.util.function.IntConsumer;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import javax.swing.BorderFactory;
|
|
import javax.swing.BorderFactory;
|
|
|
|
+import javax.swing.Box;
|
|
|
|
+import javax.swing.BoxLayout;
|
|
import javax.swing.ImageIcon;
|
|
import javax.swing.ImageIcon;
|
|
import javax.swing.JButton;
|
|
import javax.swing.JButton;
|
|
|
|
+import javax.swing.JCheckBox;
|
|
import javax.swing.JFileChooser;
|
|
import javax.swing.JFileChooser;
|
|
|
|
+import javax.swing.JFormattedTextField;
|
|
|
|
+import javax.swing.JLabel;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JProgressBar;
|
|
import javax.swing.JProgressBar;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JSplitPane;
|
|
import javax.swing.JSplitPane;
|
|
|
|
+import javax.swing.text.NumberFormatter;
|
|
|
|
|
|
import classes.AbstractCpsObject;
|
|
import classes.AbstractCpsObject;
|
|
import classes.CpsUpperNode;
|
|
import classes.CpsUpperNode;
|
|
@@ -45,6 +57,7 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
//Panel
|
|
//Panel
|
|
private JPanel content = new JPanel();
|
|
private JPanel content = new JPanel();
|
|
protected Console console = new Console();
|
|
protected Console console = new Console();
|
|
|
|
+ private JPanel borderPanel = new JPanel();
|
|
|
|
|
|
|
|
|
|
//Settings groupNode
|
|
//Settings groupNode
|
|
@@ -61,7 +74,6 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
private long startTime;
|
|
private long startTime;
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
private RunProgressBar runProgressbar = new RunProgressBar();
|
|
private RunProgressBar runProgressbar = new RunProgressBar();
|
|
|
|
|
|
|
|
|
|
@@ -76,6 +88,10 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
|
|
|
|
//printing
|
|
//printing
|
|
protected RunDataBase db;
|
|
protected RunDataBase db;
|
|
|
|
+ private RunPrinter printer = new RunPrinter("plott.txt");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
public AlgorithmFramework(){
|
|
public AlgorithmFramework(){
|
|
@@ -92,7 +108,7 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- public JPanel createOptionPanel() {
|
|
|
|
|
|
+ private JPanel createOptionPanel() {
|
|
JPanel optionPanel = new JPanel(new BorderLayout());
|
|
JPanel optionPanel = new JPanel(new BorderLayout());
|
|
JScrollPane scrollPane = new JScrollPane(createParameterPanel());
|
|
JScrollPane scrollPane = new JScrollPane(createParameterPanel());
|
|
scrollPane.setBorder(BorderFactory.createTitledBorder("Parameter"));
|
|
scrollPane.setBorder(BorderFactory.createTitledBorder("Parameter"));
|
|
@@ -104,22 +120,27 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
private Component createParameterPanel() {
|
|
private Component createParameterPanel() {
|
|
JPanel parameterPanel = new JPanel(null);
|
|
JPanel parameterPanel = new JPanel(null);
|
|
parameterPanel.setPreferredSize(new Dimension(510,300));
|
|
parameterPanel.setPreferredSize(new Dimension(510,300));
|
|
|
|
+ borderPanel.setLayout(new BoxLayout(borderPanel, BoxLayout.PAGE_AXIS));
|
|
|
|
+ addIntParameter("Rounds", rounds, intInput -> rounds = intInput, 1);
|
|
|
|
+ JScrollPane scrollPane = new JScrollPane(borderPanel);
|
|
|
|
+ scrollPane.setBounds(10, 0, 450, 292);
|
|
|
|
+ scrollPane.setBorder(BorderFactory.createEmptyBorder());
|
|
|
|
+ parameterPanel.add(scrollPane);
|
|
|
|
+
|
|
|
|
|
|
- JProgressBar progressBar = runProgressbar.getJProgressBar();
|
|
|
|
- progressBar.setBounds(350, 155, 185, 20);
|
|
|
|
- progressBar.setStringPainted(true);
|
|
|
|
- parameterPanel.add(progressBar);
|
|
|
|
|
|
|
|
JButton selectGroupNodeButton = new JButton("Select GroupNode");
|
|
JButton selectGroupNodeButton = new JButton("Select GroupNode");
|
|
- selectGroupNodeButton.setBounds(350, 120, 185, 30);
|
|
|
|
|
|
+ selectGroupNodeButton.setBounds(500, 0, 185, 30);
|
|
selectGroupNodeButton.addActionListener(actionEvent -> selectGroupNode());
|
|
selectGroupNodeButton.addActionListener(actionEvent -> selectGroupNode());
|
|
parameterPanel.add(selectGroupNodeButton);
|
|
parameterPanel.add(selectGroupNodeButton);
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ JProgressBar progressBar = runProgressbar.getJProgressBar();
|
|
|
|
+ progressBar.setBounds(500, 35, 185, 20);
|
|
|
|
+ progressBar.setStringPainted(true);
|
|
|
|
+ parameterPanel.add(progressBar);
|
|
|
|
|
|
return parameterPanel;
|
|
return parameterPanel;
|
|
}
|
|
}
|
|
- public JPanel createButtonPanel() {
|
|
|
|
|
|
+ private JPanel createButtonPanel() {
|
|
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
|
|
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
|
|
|
|
|
|
JButton resetButton = new JButton("Reset");
|
|
JButton resetButton = new JButton("Reset");
|
|
@@ -131,6 +152,10 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
cancelButton.addActionListener(actionEvent -> cancel());
|
|
cancelButton.addActionListener(actionEvent -> cancel());
|
|
buttonPanel.add(cancelButton);
|
|
buttonPanel.add(cancelButton);
|
|
|
|
|
|
|
|
+ JButton plottButton = new JButton("Plott");
|
|
|
|
+ plottButton.addActionListener(actionEvent -> plott());
|
|
|
|
+ buttonPanel.add(plottButton);
|
|
|
|
+
|
|
JButton fitnessButton = new JButton("Fitness");
|
|
JButton fitnessButton = new JButton("Fitness");
|
|
fitnessButton.setToolTipText("Fitness for the current state.");
|
|
fitnessButton.setToolTipText("Fitness for the current state.");
|
|
fitnessButton.addActionListener(actionEvent -> fitness());
|
|
fitnessButton.addActionListener(actionEvent -> fitness());
|
|
@@ -150,6 +175,93 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+ //ParameterImports
|
|
|
|
+
|
|
|
|
+ //int
|
|
|
|
+ protected void addIntParameter(String parameterName, int parameterValue, IntConsumer setter) {
|
|
|
|
+ this.addIntParameter(parameterName, parameterValue, setter, Integer.MIN_VALUE, Integer.MAX_VALUE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void addIntParameter(String parameterName, int parameterValue, IntConsumer setter, int parameterMinValue) {
|
|
|
|
+ this.addIntParameter(parameterName, parameterValue, setter, parameterMinValue, Integer.MAX_VALUE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void addIntParameter(String parameterName, int parameterValue, IntConsumer setter, int parameterMinValue, int parameterMaxValue) {
|
|
|
|
+ JPanel singleParameterPanel = new JPanel();
|
|
|
|
+ singleParameterPanel.setLayout(new BoxLayout(singleParameterPanel, BoxLayout.LINE_AXIS));
|
|
|
|
+ singleParameterPanel.setAlignmentX(0.0f);
|
|
|
|
+ singleParameterPanel.add(new JLabel(parameterName + ": "));
|
|
|
|
+ singleParameterPanel.add(Box.createHorizontalGlue());
|
|
|
|
+ NumberFormat format = NumberFormat.getIntegerInstance();
|
|
|
|
+ format.setGroupingUsed(false);
|
|
|
|
+ format.setParseIntegerOnly(true);
|
|
|
|
+ NumberFormatter integerFormatter = new NumberFormatter(format);
|
|
|
|
+ integerFormatter.setMinimum(parameterMinValue);
|
|
|
|
+ integerFormatter.setMaximum(parameterMaxValue);
|
|
|
|
+ integerFormatter.setCommitsOnValidEdit(true);
|
|
|
|
+ JFormattedTextField singleParameterTextField = new JFormattedTextField(integerFormatter);
|
|
|
|
+ singleParameterTextField.setValue(parameterValue);
|
|
|
|
+ String minValue = (parameterMinValue == Integer.MIN_VALUE)?"Integer.MIN_VALUE":String.valueOf(parameterMinValue);
|
|
|
|
+ String maxValue = (parameterMaxValue == Integer.MAX_VALUE)?"Integer.MAX_VALUE":String.valueOf(parameterMaxValue);
|
|
|
|
+ singleParameterTextField.setToolTipText("Only integer \u2208 [" + minValue + "," + maxValue + "]");
|
|
|
|
+ singleParameterTextField.addPropertyChangeListener(actionEvent -> setter.accept(Integer.parseInt(singleParameterTextField.getValue().toString())));
|
|
|
|
+ singleParameterTextField.setMaximumSize(new Dimension(200, 30));
|
|
|
|
+ singleParameterTextField.setPreferredSize(new Dimension(200, 30));
|
|
|
|
+ singleParameterPanel.add(singleParameterTextField);
|
|
|
|
+ borderPanel.add(singleParameterPanel);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //double
|
|
|
|
+ protected void addDoubleParameter(String parameterName, double parameterValue, DoubleConsumer setter) {
|
|
|
|
+ this.addDoubleParameter(parameterName, parameterValue, setter, Double.MIN_VALUE, Double.MAX_VALUE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ protected void addDoubleParameter(String parameterName, double parameterValue, DoubleConsumer setter, double parameterMinValue) {
|
|
|
|
+ this.addDoubleParameter(parameterName, parameterValue, setter, parameterMinValue, Double.MAX_VALUE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ protected void addDoubleParameter(String parameterName, double parameterValue, DoubleConsumer setter, double parameterMinValue, double parameterMaxValue) {
|
|
|
|
+ JPanel singleParameterPanel = new JPanel();
|
|
|
|
+ singleParameterPanel.setLayout(new BoxLayout(singleParameterPanel, BoxLayout.LINE_AXIS));
|
|
|
|
+ singleParameterPanel.setAlignmentX(0.0f);
|
|
|
|
+ singleParameterPanel.add(new JLabel(parameterName + ": "));
|
|
|
|
+ singleParameterPanel.add(Box.createHorizontalGlue());
|
|
|
|
+ NumberFormat doubleFormat = NumberFormat.getNumberInstance(Locale.US);
|
|
|
|
+ doubleFormat.setMinimumFractionDigits(1);
|
|
|
|
+ doubleFormat.setMaximumFractionDigits(10);
|
|
|
|
+ doubleFormat.setRoundingMode(RoundingMode.HALF_UP);
|
|
|
|
+ NumberFormatter doubleFormatter = new NumberFormatter(doubleFormat);
|
|
|
|
+ doubleFormatter.setMinimum(parameterMinValue);
|
|
|
|
+ doubleFormatter.setMaximum(parameterMaxValue);
|
|
|
|
+ JFormattedTextField singleParameterTextField = new JFormattedTextField(doubleFormatter);
|
|
|
|
+ singleParameterTextField.setValue(parameterValue);
|
|
|
|
+ String minValue = (parameterMinValue == Double.MIN_VALUE)?"Double.MIN_VALUE":String.valueOf(parameterMinValue);
|
|
|
|
+ String maxValue = (parameterMaxValue == Double.MAX_VALUE)?"Double.MAX_VALUE":String.valueOf(parameterMaxValue);
|
|
|
|
+ singleParameterTextField.setToolTipText("Only double \u2208 [" + minValue + "," + maxValue + "]");
|
|
|
|
+ singleParameterTextField.addPropertyChangeListener(actionEvent -> setter.accept(Double.parseDouble(singleParameterTextField.getValue().toString())));
|
|
|
|
+ singleParameterTextField.setMaximumSize(new Dimension(200, 30));
|
|
|
|
+ singleParameterTextField.setPreferredSize(new Dimension(200, 30));
|
|
|
|
+ singleParameterPanel.add(singleParameterTextField);
|
|
|
|
+ borderPanel.add(singleParameterPanel);
|
|
|
|
+ }
|
|
|
|
+ //boolean
|
|
|
|
+ protected void addBooleanParameter(String parameterName, boolean parameterValue, Consumer<Boolean> setter){
|
|
|
|
+ JPanel singleParameterPanel = new JPanel();
|
|
|
|
+ singleParameterPanel.setLayout(new BoxLayout(singleParameterPanel, BoxLayout.LINE_AXIS));
|
|
|
|
+ singleParameterPanel.setAlignmentX(0.0f);
|
|
|
|
+ singleParameterPanel.add(new JLabel(parameterName + ": "));
|
|
|
|
+ singleParameterPanel.add(Box.createHorizontalGlue());
|
|
|
|
+ JCheckBox useGroupNodeCheckBox = new JCheckBox();
|
|
|
|
+ useGroupNodeCheckBox.setSelected(parameterValue);
|
|
|
|
+ useGroupNodeCheckBox.addActionListener(actionEvent -> setter.accept(useGroupNodeCheckBox.isSelected()));
|
|
|
|
+ singleParameterPanel.add(useGroupNodeCheckBox);
|
|
|
|
+ borderPanel.add(singleParameterPanel);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
private void startTimer(){
|
|
private void startTimer(){
|
|
startTime = System.currentTimeMillis();
|
|
startTime = System.currentTimeMillis();
|
|
@@ -159,7 +271,14 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
console.println("Execution Time of Algo in Milliseconds:" + elapsedMilliSeconds);
|
|
console.println("Execution Time of Algo in Milliseconds:" + elapsedMilliSeconds);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+ private void plott() {
|
|
|
|
+ if(db!=null) {
|
|
|
|
+ console.println("Plott..");
|
|
|
|
+ printer.print("");
|
|
|
|
+ }else {
|
|
|
|
+ console.println("No run inistialized.");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
private void cancel() {
|
|
private void cancel() {
|
|
@@ -394,7 +513,7 @@ public abstract class AlgorithmFramework implements AddOn{
|
|
public RunPrinter(String filename, boolean append){
|
|
public RunPrinter(String filename, boolean append){
|
|
this.append = append;
|
|
this.append = append;
|
|
fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
|
|
fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
|
|
- fileChooser.setSelectedFile(new File(filename));
|
|
|
|
|
|
+ setFilename(filename);
|
|
}
|
|
}
|
|
//public methods
|
|
//public methods
|
|
public void enableAppend(boolean enable) {
|
|
public void enableAppend(boolean enable) {
|