Przeglądaj źródła

GUI Optimizer woking

Willi Zschiebsch 4 lat temu
rodzic
commit
c69aadc28b

+ 4 - 7
src/main/java/mdd/client/Client.java

@@ -51,13 +51,12 @@ public class Client implements IGUIEventClient
                 if (jobj != null){
                     if (jobj.containsKey("GUI")){
                         _eventHandler.publishEvent(5,"change", jchange);
+                        return;
                     }
                 }
             }
         }
-        else {
-            _eventHandler.publishEvent("change", jchange);
-        }
+        _eventHandler.publishEvent("change", jchange);
     }
 
     private void listen(){
@@ -92,9 +91,6 @@ public class Client implements IGUIEventClient
                                                   JSONObject jchange = (JSONObject) finalJmsg.get("change");
                                                   processChangeResponse(jchange);
                                               }
-
-                                              //System.out.println("[Client] " + "change: " + finalJmsg.toString());
-                                              ++msg_counter;
                                           }
                                       });
                     //<--reopen Thread
@@ -107,7 +103,8 @@ public class Client implements IGUIEventClient
                      });
                 }
             }
-            System.out.println(address + " : " + content);
+            System.out.println("[Client]: listen: " + address + " : " + content);//Todo
+            ++msg_counter;
         }
     }
 

+ 1 - 0
src/main/java/mdd/client/GUIEventHandler.java

@@ -39,6 +39,7 @@ public class GUIEventHandler {
     }
 
     public void publishEvent(Integer level, String event, JSONObject args){
+        //System.out.println("EventHandler: " + event + " | " + args.toString());
         Integer start_key = _priorities.ceilingKey(level);
         if (start_key != null){
             for (Map.Entry<Integer,Vector<IGUIEventClient>> entry : _priorities.entrySet()){

+ 41 - 15
src/main/java/mdd/client/Optimizer.java

@@ -1,30 +1,54 @@
 package mdd.client;
 
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.geometry.Bounds;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
 import javafx.scene.Group;
 import javafx.scene.Scene;
-import javafx.scene.control.Label;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.layout.HBox;
+import javafx.scene.control.*;
 import javafx.scene.layout.VBox;
 import javafx.stage.Stage;
+import mdd.client.optimization.Permutation;
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 
 public class Optimizer extends Stage implements IGUIEventClient {
-private HBox generations = new HBox();
+private Group generations = new Group();
 protected GUIEventHandler _eventHandler;
+private ScrollPane scrollpane = new ScrollPane();
 
     public Optimizer(){
         super();
         _eventHandler = GUIEventHandler.getEventHandler();
         _eventHandler.addEventListener(this, 5);
-        generations.setSpacing(30);
+
         setTitle("Optimizer");
-        Scene scene = new Scene(new ScrollPane(generations), 450, 450);
+        Scene scene = new Scene(new VBox(), 450, 450);
         scene.getStylesheets().add(String.valueOf(getClass().getResource("dark-theme.css")));
+
+        MenuBar menuBar = new MenuBar();
+
+        scrollpane.setContent(generations);
+        // --- Menu View
+        Menu menuView = new Menu("View");
+        MenuItem mi_list = new MenuItem("List");
+        mi_list.setOnAction(new EventHandler<ActionEvent>() {
+            public void handle(ActionEvent t) {
+                scrollpane.setContent(generations);
+            }
+        });
+
+        MenuItem mi_dia = new MenuItem("Diagramm");
+        mi_list.setOnAction(new EventHandler<ActionEvent>() {
+            public void handle(ActionEvent t) {
+                scrollpane.setContent(generations);
+            }
+        });
+
+        menuView.getItems().addAll(mi_list, mi_dia);
+
+        menuBar.getMenus().addAll(menuView);
+        ((VBox) scene.getRoot()).getChildren().addAll(menuBar, scrollpane);
+
         setScene(scene);
     }
 
@@ -48,19 +72,21 @@ protected GUIEventHandler _eventHandler;
             JSONObject jobj = (JSONObject) jargs.get("object");
             switch((String) args.get("operation")){
                 case "add":
-                    if (jobj.containsKey("individuals")){
-                        JSONArray indis= (JSONArray)jobj.get("individuals");
-                        if (generations.getChildren().size() == (int)jobj.get("generation") +1){
+                    if (jobj.containsKey("permutations")){
+                        JSONArray indis= (JSONArray)jobj.get("permutations");
+                        long lgen = (long)jobj.get("step");
+                        if (generations.getChildren().size() ==  lgen){
                             VBox gen = new VBox();
-                            gen.getChildren().add(new Label("Generation: " + jobj.get("generation").toString()));
+                            gen.getChildren().add(new Label("Step: " + lgen));
                             gen.setSpacing(10);
                             for (int i = 0; i < indis.size(); ++i){
-                                gen.getChildren().add(new Permutation((JSONObject)indis.get(i)));
+                                gen.getChildren().add(new Permutation(lgen, (JSONObject)indis.get(i)));
                             }
                             generations.getChildren().add(gen);
                         }else{
+                            ((Group)generations.getChildren().get((int)lgen)).getChildren().clear();
                             for (int i = 0; i < indis.size(); ++i){
-                                ((Group)generations.getChildren().get(i)).getChildren().add(new Permutation((JSONObject)indis.get(i)));
+                                ((Group)generations.getChildren().get((int)lgen)).getChildren().add(new Permutation(lgen, (JSONObject)indis.get(i)));
                             }
                         }
                     }else if(jobj.containsKey("best")){

+ 0 - 98
src/main/java/mdd/client/Permutation.java

@@ -1,98 +0,0 @@
-package mdd.client;
-
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.geometry.Bounds;
-import javafx.scene.Group;
-import javafx.scene.control.Label;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.VBox;
-import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-
-public class Permutation extends Group implements IGUIEventClient, ChangeListener<Bounds> {
-    private GridPane header = new GridPane();
-    private VBox dna = new VBox();
-    private Rectangle titlebar;
-    private Rectangle background;
-
-    protected GUIEventHandler _eventHandler;
-
-    /*
-    staus: " " | fitness: | time:
-    dna:
-     */
-    public Permutation(JSONObject json){
-        _eventHandler = GUIEventHandler.getEventHandler();
-        _eventHandler.addEventListener(this, 5);
-        setFocusTraversable(true);
-        dna.setSpacing(10);
-        dna.setTranslateX(5);
-        dna.setTranslateY(30);
-
-        titlebar = new Rectangle(0.0f, 0.0f, 1.0, 20f);
-        titlebar.setArcWidth(10.0f);
-        titlebar.setArcHeight(10.0f);
-
-        //background = new Rectangle(0.0f, 0.0f, 150-20, 150 + 40);
-        background = new Rectangle(0.0f, 0.0f, 1.0, 1.0);
-        background.setArcWidth(10.0f);
-        background.setArcHeight(10.0f);
-        background.setFill(Color.GRAY);
-        header.setTranslateX(10);
-        Color color = Color.DARKCYAN;
-        titlebar.setFill(color);
-        configure(json);
-        getChildren().clear();
-        getChildren().addAll( background, titlebar, header, dna);
-        dna.layoutBoundsProperty().addListener(this);
-        header.layoutBoundsProperty().addListener(this);
-    }
-
-    protected void configure(JSONObject json){
-        if(json.containsKey("status")){
-            header.add(new Label("status: "+ json.get("status").toString()),0,0);
-        }
-        if(json.containsKey("fitness")){
-            header.add(new Label("fitness: "+ json.get("fitness").toString()),0,1);
-        }
-        if(json.containsKey("time")){
-            header.add(new Label("time: "+ json.get("time").toString()),0,2);
-        }
-        if(json.containsKey("dna")){
-            dna.getChildren().clear();
-            JSONArray jarray = (JSONArray)json.get("dna");
-            for (int i = 0; i < jarray.size(); ++i){
-                dna.getChildren().add(new Label(jarray.get(i).toString()));
-            }
-        }
-    }
-
-    @Override
-    public void changed(ObservableValue<? extends Bounds> observableValue, Bounds oldValue, Bounds newValue) {
-        double width = header.getWidth();
-        if (newValue.getWidth() > width){
-            width =newValue.getWidth();
-            width += 10;
-        }else{
-            width += 10;
-            width +=10;
-        }
-        titlebar.setWidth(width);
-        titlebar.setHeight(20.0f);
-        background.setWidth(width);
-        background.setHeight(newValue.getHeight()+dna.getTranslateY()+10);
-    }
-
-    @Override
-    public void processGUIEvent(String event, JSONObject args) {
-
-    }
-
-    @Override
-    public void close() throws Exception {
-
-    }
-}

+ 5 - 0
src/main/java/mdd/client/optimization/IPPlot.java

@@ -0,0 +1,5 @@
+package mdd.client.optimization;
+
+public interface IPPlot {
+    void update(Permutation per);
+}

+ 4 - 0
src/main/java/mdd/client/optimization/PDiagramm.java

@@ -0,0 +1,4 @@
+package mdd.client.optimization;
+
+public class PDiagramm {
+}

+ 13 - 0
src/main/java/mdd/client/optimization/PList.java

@@ -0,0 +1,13 @@
+package mdd.client.optimization;
+
+import javafx.scene.Group;
+import javafx.scene.layout.HBox;
+
+public class PList extends HBox {
+    private Group _pers = new Group();
+
+    public PList(Group permutation){
+        _pers = permutation;
+        setSpacing(30);
+    }
+}

+ 159 - 0
src/main/java/mdd/client/optimization/Permutation.java

@@ -0,0 +1,159 @@
+package mdd.client.optimization;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.geometry.Bounds;
+import javafx.scene.Group;
+import javafx.scene.control.Label;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import mdd.client.GUIEventHandler;
+import mdd.client.IGUIEventClient;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+public class Permutation extends Group implements IGUIEventClient, ChangeListener<Bounds> {
+    private GridPane header = new GridPane();
+    private VBox dna = new VBox();
+    private Rectangle titlebar;
+    private Rectangle background;
+
+    protected GUIEventHandler _eventHandler;
+    protected JSONObject _jprocessor;
+    protected JSONArray _dna;
+    protected long _gen;
+
+    Label _status = new Label();
+    Label _fitness = new Label();
+    Label _time = new Label();
+
+    /*
+    staus: " " | fitness: | time:
+    dna:
+     */
+    public Permutation(long gen, JSONObject json){
+        _gen = gen;
+        _eventHandler = GUIEventHandler.getEventHandler();
+        _eventHandler.addEventListener(this, 5);
+        setFocusTraversable(true);
+        dna.setSpacing(10);
+        dna.setTranslateX(5);
+        dna.setTranslateY(30);
+
+        titlebar = new Rectangle(0.0f, 0.0f, 1.0, 20f);
+        titlebar.setArcWidth(10.0f);
+        titlebar.setArcHeight(10.0f);
+
+        //background = new Rectangle(0.0f, 0.0f, 150-20, 150 + 40);
+        background = new Rectangle(0.0f, 0.0f, 1.0, 1.0);
+        background.setArcWidth(10.0f);
+        background.setArcHeight(10.0f);
+        background.setFill(Color.GRAY);
+        header.setTranslateX(10);
+        Color color = Color.DARKCYAN;
+        titlebar.setFill(color);
+
+        header.add(_status,0,0);
+        header.add(_fitness,1,0);
+        header.add(_time,2,0);
+
+        header.setHgap(5.0f);
+
+        configure(json);
+        getChildren().clear();
+        getChildren().addAll( background, titlebar, header, dna);
+        dna.layoutBoundsProperty().addListener(this);
+        header.layoutBoundsProperty().addListener(this);
+    }
+
+    protected void configure(JSONObject json){
+        if(json.containsKey("status")){
+            _status.setText("status: "+ json.get("status").toString());
+        }
+        if(json.containsKey("fitness")){
+            _fitness.setText("fitness: "+ json.get("fitness").toString());
+        }
+        if(json.containsKey("time")){
+            _time.setText("time: "+ json.get("time").toString());
+        }
+        if (_dna == null){
+            if(json.containsKey("dna")){
+                dna.getChildren().clear();
+                _dna = (JSONArray)json.get("dna");
+                for (int i = 0; i < _dna.size(); ++i){
+                    dna.getChildren().add(new Label(_dna.get(i).toString()));
+                }
+            }
+        }
+        if(json.containsKey("processor")){
+            _jprocessor = (JSONObject) json.get("processor");
+        }
+    }
+
+    @Override
+    public void changed(ObservableValue<? extends Bounds> observableValue, Bounds oldValue, Bounds newValue) {
+        double width = header.getWidth();
+        if (newValue.getWidth() > width){
+            width =newValue.getWidth();
+            width += 10;
+        }else{
+            width += 10;
+            width +=10;
+        }
+        titlebar.setWidth(width);
+        titlebar.setHeight(20.0f);
+        background.setWidth(width);
+        background.setHeight(dna.getTranslateY()+dna.getHeight()+10);
+    }
+
+    @Override
+    public void processGUIEvent(String event, JSONObject args) {
+        if (event.equals("change")) {
+            if (!args.containsKey("args")) {
+                return;
+            }
+            JSONObject jargs = (JSONObject) args.get("args");
+            if (!jargs.containsKey("subject")) {
+                return;
+            }
+            JSONObject jsub = (JSONObject) jargs.get("subject");
+            if (!jsub.get("type").equals("optimizer")) {
+                return;
+            }
+            if (!args.containsKey("operation")) {
+                return;
+            }
+            if (!"change".equals((String) args.get("operation"))) {
+                return;
+            }
+            JSONObject jobj = (JSONObject) jargs.get("object");
+            if (!jobj.containsKey("step")) {
+                return;
+            }
+            if (_gen!=(long)jobj.get("step")){
+                return;
+            }
+            if (!jobj.containsKey("permutation")) {
+                return;
+            }
+            JSONObject jind = (JSONObject)jobj.get("permutation");
+            //System.out.println("Permutation: " + _dna.toString());
+            if (!_dna.equals((JSONArray)jind.get("dna"))) {
+                return;
+            }else{
+                if (!_dna.toString().equals(jind.get("dna").toString())){
+                    System.out.println("It happened!");
+                }
+                configure(jind);
+            }
+
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+
+    }
+}