Browse Source

Refactor Counters

TomTroppmann 2 years ago
parent
commit
590ee88c02

+ 3 - 2
src/api/TopologieAlgorithmFramework.java

@@ -46,8 +46,9 @@ import classes.Edge;
 import classes.GroupNode;
 import classes.HolonObject;
 import classes.HolonSwitch;
-import classes.IdCounterElem;
+import classes.IdCounter;
 import classes.Node;
+import classes.IdCounter.CounterType;
 import ui.controller.Control;
 import ui.model.DecoratedGroupNode;
 import ui.model.DecoratedState;
@@ -880,7 +881,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 			int middleX = (fromObject.getPosition().x +   toObject.getPosition().x)/2;
 			int middleY = (fromObject.getPosition().y +   toObject.getPosition().y)/2;
 			HolonSwitch newSwitch = new HolonSwitch("AddedSwitch");
-			newSwitch.setId(IdCounterElem.nextId());
+			newSwitch.setId(IdCounter.nextId(CounterType.Element));
 			newSwitch.setPosition(middleX, middleY);
 			//If fromObject is in Group
 			if(accessGroupNode.containsKey(fromObject)) {

+ 3 - 1
src/classes/AbstractCanvasObject.java

@@ -2,6 +2,8 @@ package classes;
 
 import com.google.gson.annotations.Expose;
 
+import classes.IdCounter.CounterType;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
@@ -65,7 +67,7 @@ public abstract class AbstractCanvasObject {
 		setObjName(obj.getObjName());
 		setName(obj.getObjName());
 		setConnections(new ArrayList<>());
-		setId(IdCounter.nextId());
+		setId(IdCounter.nextId(CounterType.Object));
 		setImage(obj.getImage());
 	}
 	

+ 3 - 1
src/classes/GroupNode.java

@@ -2,6 +2,8 @@ package classes;
 
 import com.google.gson.annotations.Expose;
 
+import classes.IdCounter.CounterType;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -26,7 +28,7 @@ public class GroupNode extends AbstractCanvasObject {
 		this.setConnections(new ArrayList<>());
 		this.setImage("/Images/upper_node.png");
 		this.setSav("CVS");
-		this.setId(IdCounter.nextId());
+		this.setId(IdCounter.nextId(CounterType.Object));
 		this.setNodes(new ArrayList<>());
 		this.setNodesIdx(new HashMap<>());
 	}

+ 3 - 2
src/classes/HolonElement.java

@@ -2,6 +2,7 @@ package classes;
 
 import com.google.gson.annotations.Expose;
 
+import classes.IdCounter.CounterType;
 import interfaces.GraphEditable;
 import interfaces.LocalMode;
 import ui.controller.FlexManager;
@@ -91,7 +92,7 @@ public class HolonElement implements LocalMode, GraphEditable{
      */
     public HolonElement(HolonObject parentObject, String eleName, int amount, float energy) {
     	
-    	this(parentObject, eleName, amount, energy, IdCounterElem.nextId());
+    	this(parentObject, eleName, amount, energy, IdCounter.nextId(CounterType.Element));
     }
     
 
@@ -133,7 +134,7 @@ public class HolonElement implements LocalMode, GraphEditable{
         }
         sampleGraph();
         setSaving(null);
-        setId(IdCounterElem.nextId());
+        setId(IdCounter.nextId(CounterType.Element));
 
     }
 

+ 39 - 10
src/classes/IdCounter.java

@@ -10,15 +10,25 @@ import com.google.gson.annotations.Expose;
  */
 public class IdCounter {
 	@Expose
-	private static int counter = 1;
+	private static int counterObjects = 1;
+	@Expose
+	private static int counterElements = 1;
 
+	public enum CounterType {
+		Object, Element
+	}
 	/**
 	 * Return the next ID and increment the ID counter by 1.
 	 * @return the next ID
 	 */
-	public static synchronized int nextId() {
-		return counter++;
-
+	public static synchronized int nextId(CounterType type) {
+		switch(type){
+			case Element:
+				return counterObjects++;
+			case Object:
+			default:
+				return counterElements++;
+		}
 	}
 
 	/**
@@ -26,8 +36,14 @@ public class IdCounter {
 	 * 
 	 * @return the counter
 	 */
-	public static int getCounter() {
-		return counter;
+	public static int actualId(CounterType type) {
+		switch(type){
+			case Element:
+				return counterObjects;
+			case Object:
+			default:
+				return counterElements;
+		}
 	}
 
 	/**
@@ -36,14 +52,27 @@ public class IdCounter {
 	 * @param counter
 	 *            the counter to set
 	 */
-	public static void setCounter(int counter) {
-		IdCounter.counter = counter;
+	public static void setCounter(int counter, CounterType type) {
+		
+		switch(type){
+		case Element:
+			counterElements = counter;
+		case Object:
+		default:
+			counterObjects = counter;
+	}
 	}
 
 	/**
 	 * Reset the Counter.
 	 */
-	public static void resetCounter() {
-		counter = 1;
+	public static void resetObjectCounter(CounterType type) {
+		switch(type){
+			case Element:
+				counterObjects = 1;
+			case Object:
+			default:
+				counterElements = 1;
+		}
 	}
 }

+ 0 - 50
src/classes/IdCounterElem.java

@@ -1,50 +0,0 @@
-package classes;
-
-import com.google.gson.annotations.Expose;
-
-/**
- * ID-Counter for all Holon Elements.
- * 
- * @author Gruppe14
- */
-public class IdCounterElem {
-	@Expose
-	private static int counter = 1;
-
-	/**
-	 * Return the next ID and increment the ID counter by 1.
-	 * 
-	 * @return the next ID
-	 */
-	public static synchronized int nextId() {
-		return counter++;
-
-	}
-
-	/**
-	 * Return the Counter.
-	 * 
-	 * @return the counter
-	 */
-	public static int getCounter() {
-		return counter;
-	}
-
-	/**
-	 * Set the Counter.
-	 * 
-	 * @param counter
-	 *            the counter to set
-	 */
-	public static void setCounter(int counter) {
-		IdCounterElem.counter = counter;
-	}
-
-	/**
-	 * Reset the Counter.
-	 */
-	public static void resetCounter() {
-		counter = 1;
-	}
-
-}

+ 3 - 1
src/classes/Node.java

@@ -2,6 +2,8 @@ package classes;
 
 import java.util.ArrayList;
 
+import classes.IdCounter.CounterType;
+
 /**
  * The class "CpsNode" represents empty Objects in the system. They are just
  * nodes between Objects
@@ -22,7 +24,7 @@ public class Node extends AbstractCanvasObject {
 		this.setConnections(new ArrayList<Edge>());
 		this.setImage("/Images/node.png");
 		this.setSav("CVS");
-		this.setId(IdCounter.nextId());
+		this.setId(IdCounter.nextId(CounterType.Object));
 	}
 	
 	public Node(Node node){

+ 4 - 2
src/ui/controller/ClipboardController.java

@@ -1,6 +1,8 @@
 package ui.controller;
 
 import classes.*;
+import classes.IdCounter.CounterType;
+
 import com.google.gson.*;
 import ui.controller.SaveController.EDGETYPE;
 import ui.controller.SaveController.GRAPHTYPE;
@@ -403,7 +405,7 @@ public class ClipboardController {
      */
     private void objIDMapper(AbstractCanvasObject temp) {
         int id = temp.getId();
-        temp.setId(IdCounter.nextId());
+        temp.setId(IdCounter.nextId(CounterType.Object));
         // oldID -> currentID
         objIDMap.put(id, temp.getId());
     }
@@ -413,7 +415,7 @@ public class ClipboardController {
      */
     private void eleIDMapper(HolonElement temp) {
         int id = temp.getId();
-        temp.setId(IdCounterElem.nextId());
+        temp.setId(IdCounter.nextId(CounterType.Element));
         // oldID -> currentID
         eleIDMap.put(id, temp.getId());
 

+ 5 - 4
src/ui/controller/LoadController.java

@@ -1,6 +1,7 @@
 package ui.controller;
 
 import classes.*;
+import classes.IdCounter.CounterType;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
@@ -198,8 +199,8 @@ public class LoadController {
                 model.setHashcodeMap(new HashMap<>());
                 model.setCanvasX(json.get("CANVAS_SIZE_X").getAsInt());
                 model.setCanvasX(json.get("CANVAS_SIZE_Y").getAsInt());
-                IdCounter.setCounter(json.get("IDCOUNTER").getAsInt());
-                IdCounterElem.setCounter(json.get("IDCOUNTERELEMENT").getAsInt());
+                IdCounter.setCounter(json.get("IDCOUNTER").getAsInt(), CounterType.Object);
+                IdCounter.setCounter(json.get("IDCOUNTERELEMENT").getAsInt(), CounterType.Element);
                 break;
             case PARTIAL:
                 model.setCvsObjIdx(new HashMap<>());
@@ -208,8 +209,8 @@ public class LoadController {
                 model.setHashcodeMap(new HashMap<>());
                 model.setCanvasX(json.get("CANVAS_SIZE_X").getAsInt());
                 model.setCanvasX(json.get("CANVAS_SIZE_Y").getAsInt());
-                IdCounter.setCounter(json.get("IDCOUNTER").getAsInt());
-                IdCounterElem.setCounter(json.get("IDCOUNTERELEMENT").getAsInt());
+                IdCounter.setCounter(json.get("IDCOUNTER").getAsInt(), CounterType.Object);
+                IdCounter.setCounter(json.get("IDCOUNTERELEMENT").getAsInt(), CounterType.Element);
                 break;
             case CATEGORY:
                 model.setCgIdx(new HashMap<>());

+ 6 - 4
src/ui/controller/SaveController.java

@@ -1,6 +1,8 @@
 package ui.controller;
 
 import classes.*;
+import classes.IdCounter.CounterType;
+
 import com.google.gson.JsonObject;
 import com.google.gson.JsonPrimitive;
 import com.google.gson.reflect.TypeToken;
@@ -134,15 +136,15 @@ public class SaveController {
         switch (mode) {
             case COMPLETE:
                 file.add("MODE", new JsonPrimitive(mode.name()));
-                file.add("IDCOUNTER", new JsonPrimitive(IdCounter.getCounter()));
-                file.add("IDCOUNTERELEMENT", new JsonPrimitive(IdCounterElem.getCounter()));
+                file.add("IDCOUNTER", new JsonPrimitive(IdCounter.actualId(CounterType.Object)));
+                file.add("IDCOUNTERELEMENT", new JsonPrimitive(IdCounter.actualId(CounterType.Element)));
                 file.add("CANVAS_SIZE_X", new JsonPrimitive(model.getCanvasX()));
                 file.add("CANVAS_SIZE_Y", new JsonPrimitive(model.getCanvasY()));
                 break;
             case PARTIAL:
                 file.add("MODE", new JsonPrimitive(mode.name()));
-                file.add("IDCOUNTER", new JsonPrimitive(IdCounter.getCounter()));
-                file.add("IDCOUNTERELEMENT", new JsonPrimitive(IdCounterElem.getCounter()));
+                file.add("IDCOUNTER", new JsonPrimitive(IdCounter.actualId(CounterType.Object)));
+                file.add("IDCOUNTERELEMENT", new JsonPrimitive(IdCounter.actualId(CounterType.Element)));
                 file.add("CANVAS_SIZE_X", new JsonPrimitive(model.getCanvasX()));
                 file.add("CANVAS_SIZE_Y", new JsonPrimitive(model.getCanvasY()));
                 break;

+ 6 - 6
src/ui/view/GUI.java

@@ -84,7 +84,7 @@ import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.IdCounter;
-import classes.IdCounterElem;
+import classes.IdCounter.CounterType;
 import interfaces.GraphEditable;
 import ui.controller.Control;
 import ui.controller.UpdateController;
@@ -2058,8 +2058,8 @@ public class GUI{
 			elementGraph.setText("None");
 			canvas.tempCps = null;
 			canvas.repaint();
-			IdCounter.resetCounter();
-			IdCounterElem.resetCounter();
+			IdCounter.resetObjectCounter(CounterType.Object);
+			IdCounter.resetObjectCounter(CounterType.Element);
 		});
 
 		mntmOpen.addActionListener(new ActionListener() {
@@ -2295,21 +2295,21 @@ public class GUI{
 		openMenu.addActionListener(actionEvent -> {
 			new AddOnWindow(holegJFrame, controller);
 		});
-		openMenu.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()));
+		openMenu.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMaskEx()));
 		menuWindow.add(openMenu);
 		//Outliner
 		JMenuItem openOutliner =  new JMenuItem("Open Outliner", new ImageIcon(ImageImport.loadImage("/Button_Images/iconOutliner.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
 		openOutliner.addActionListener(actionEvent -> {
 			outlinerList.add(new Outliner(holegJFrame, model, controller));
 		});
-		openOutliner.setAccelerator(KeyStroke.getKeyStroke('O', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()));
+		openOutliner.setAccelerator(KeyStroke.getKeyStroke('O', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMaskEx()));
 		menuWindow.add(openOutliner);
 		//FlexWindow
 		JMenuItem openFlexMenuItem =  new JMenuItem("Open Flexibility Panel", new ImageIcon(ImageImport.loadImage("/Button_Images/iconAlgo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
 		openFlexMenuItem.addActionListener(actionEvent -> {
 			flexList.add(new FlexWindow(holegJFrame, controller));
 		});
-		openFlexMenuItem.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()));
+		openFlexMenuItem.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMaskEx()));
 		menuWindow.add(openFlexMenuItem);
 	}
 

+ 0 - 3
src/utility/ImageImport.java

@@ -1,9 +1,6 @@
 package utility;
 
 import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.WritableRaster;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;

+ 3 - 2
tests/tests/PraktikumHolonsAdapter.java

@@ -7,7 +7,8 @@ import classes.Category;
 import classes.AbstractCanvasObject;
 import classes.HolonElement;
 import classes.HolonObject;
-import classes.IdCounterElem;
+import classes.IdCounter;
+import classes.IdCounter.CounterType;
 
 /**
  * This Class Generates Stuff for the Tests.
@@ -43,7 +44,7 @@ public class PraktikumHolonsAdapter {
 	 */
 	public void generateElements(ArrayList<HolonElement> arr) {
 		for (int i = 1; i < 18279; i++) {
-			arr.add(new HolonElement(null, generate(i), 1, 10, IdCounterElem.nextId()));
+			arr.add(new HolonElement(null, generate(i), 1, 10, IdCounter.nextId(CounterType.Element)));
 		}
 	}
 	

+ 2 - 1
tests/tests/PraktikumHolonsTestCanvasController.java

@@ -5,6 +5,7 @@ import classes.Edge;
 import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.IdCounter;
+import classes.IdCounter.CounterType;
 import ui.controller.CanvasController;
 import ui.controller.CategoryController;
 import ui.controller.Control;
@@ -39,7 +40,7 @@ public class PraktikumHolonsTestCanvasController {
 		mp = new MultiPurposeController(model);
 		cg = new CategoryController(model, mp, new Control(model));
 		controller = new CanvasController(model, mp);
-		IdCounter.setCounter(1); 
+		IdCounter.resetObjectCounter(CounterType.Object); 
 	}
 
 	/**

+ 5 - 3
tests/tests/PraktikumHolonsTestClasses.java

@@ -1,6 +1,8 @@
 package tests;
 
 import classes.*;
+import classes.IdCounter.CounterType;
+
 import org.junit.Test;
 
 import java.util.ArrayList;
@@ -51,7 +53,7 @@ public class PraktikumHolonsTestClasses {
 		HolonObject test1 = new HolonObject("Test1");
 		HolonObject test2 = new HolonObject("Test2");
 		HolonObject test3 = new HolonObject(test1);
-		HolonElement ele = new HolonElement(test1, "Element", 1, 10, IdCounterElem.nextId());
+		HolonElement ele = new HolonElement(test1, "Element", 1, 10, IdCounter.nextId(CounterType.Element));
 		ArrayList<HolonElement> arr = new ArrayList<>();
 		assertTrue("Should be Empty", test1.getElements().isEmpty());
 		test1.setElements(arr);
@@ -134,8 +136,8 @@ public class PraktikumHolonsTestClasses {
 	 */
 	@Test
 	public void testHolonElement() {
-		HolonElement ele1 = new HolonElement(null, "TV", 2, -20f, IdCounterElem.nextId());
-		HolonElement ele2 = new HolonElement(null, "Fridge", 1, -50f, IdCounterElem.nextId());
+		HolonElement ele1 = new HolonElement(null, "TV", 2, -20f, IdCounter.nextId(CounterType.Element));
+		HolonElement ele2 = new HolonElement(null, "Fridge", 1, -50f, IdCounter.nextId(CounterType.Element));
         assertTrue("Array not empty",  ele1.getEnergyAtTimeStep(0) == -40);
         assertTrue("Array not empty", ele1.getEnergyAtTimeStep(2) == -40);
         assertTrue("Name not correct", ele1.getEleName().equals("TV"));