Explorar o código

Merge branch 'updateInProgress' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons.git into updateInProgress2

Rolf Egert %!s(int64=6) %!d(string=hai) anos
pai
achega
fec18ab155

+ 2 - 1
.gitignore

@@ -12,6 +12,7 @@ build/
 .metadata
 bin/
 tmp/
+*.class
 *.tmp
 *.bak
 *.swp
@@ -134,4 +135,4 @@ nbdist/
 ### added manually ###
 .idea/
 praktikum-holons.iml
-/gb_singlerun.txt
+/gb_singlerun.txt

+ 0 - 1
0

@@ -1 +0,0 @@
-{"CVSE5":["CVS",1,"Original",1,100.0,1],"CVSE6":["CVS",2,"Power",1,100.0,1],"CVSE7":["CVS",2,"Zero",10,100.0,1],"CVSE8":["CVS",2,"Rehab",10,100.0,1],"CVSE9":["CVS",2,"The Doctor",40,100.0,1],"CVSE10":["CVS",2,"Original",1,100.0,1],"CVSE1":["CVS",1,"Power",1,100.0,1],"CVSE2":["CVS",1,"Zero",10,100.0,1],"CVSE3":["CVS",1,"Rehab",10,100.0,1],"CVSE4":["CVS",1,"The Doctor",40,100.0,1],"CVSO1":["HolonObject","Power Plant","Power Plant",1,"\/Images\/power-plant.png",169,130],"ID":4,"CVSO2":["HolonObject","Power Plant","Power Plant",2,"\/Images\/power-plant.png",158,242],"CVSO3":["CpsNode","Node","Node",3,"\/Images\/node.png",311,187],"CG":["Energy","Building","Component"],"CGE5":["Energy","Power Plant","Original",1,100.0],"CGE4":["Energy","Power Plant","The Doctor",40,100.0],"CGE3":["Energy","Power Plant","Rehab",10,100.0],"CGE2":["Energy","Power Plant","Zero",10,100.0],"CGE1":["Energy","Power Plant","Power",1,100.0],"CGO4":["HolonSwitch","Component","Switch","\/Images\/switch-on.png"],"CGO3":["HolonTransformer","Component","Transformer","\/Images\/transformer-1.png"],"CGO2":["HolonObject","Building","House","\/Images\/home-2.png"],"EDGE1":[1,2,100.0,12400.0],"CGO1":["HolonObject","Energy","Power Plant","\/Images\/power-plant.png"],"EDGE2":[3,2,100.0,0.0]}

+ 52 - 0
src/classes/Constrain.java

@@ -0,0 +1,52 @@
+package classes;
+
+import java.util.function.Predicate;
+
+import com.google.gson.annotations.Expose;
+
+public class Constrain {
+	private Predicate<Flexibility> constrainFunction;
+	@Expose
+	private String name;
+	
+	public Constrain(Predicate<Flexibility> constrainFunction,String name) {
+		this.constrainFunction = constrainFunction;
+		this.name = name;
+	}
+	
+	public Predicate<Flexibility> getConstrainFunction() {
+		return constrainFunction;
+	}
+	public String getName() {
+		return name;
+	}
+	
+	
+	//Example Constrains:
+	/** Flexibility should be offered when Element is active.*/
+	public static Predicate<Flexibility> onConstrain = f 	-> 	f.getElement().isActive();
+	/** Flexibility should be offered when Element is inactive.*/
+	public static Predicate<Flexibility> offConstrain = f	-> 	!f.getElement().isActive();
+	
+	public static Constrain createOnConstrain() {
+		return new Constrain( onConstrain, "onConstrain");
+	}
+	public static Constrain createOffConstrain() {
+		return new Constrain( offConstrain, "offConstrain");
+	}
+	/**
+	 * Delete me ....
+	 * @return
+	 */
+	public boolean fixJson() {
+		if(name.compareTo("onConstrain") == 0) {
+			constrainFunction = onConstrain;
+			return false;
+		}else if(name.compareTo("offConstrain") == 0){
+			constrainFunction = offConstrain;
+			return false;
+		}else {
+			return false;
+		}
+	}
+}

+ 24 - 11
src/classes/Flexibility.java

@@ -3,27 +3,41 @@ package classes;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Predicate;
+
+import com.google.gson.annotations.Expose;
 /**
  * Representative of a flexibility for a HolonElement.
  *
  */
 public class Flexibility {
 	/** The Name of a Flexibility.*/
+	@Expose
 	public String name;
 	/** How fast in TimeSteps the Flexibility can be activated. */
+	@Expose
 	public int speed;
 	/** How high the cost for a activation are. */
+	@Expose
 	public float cost;
 	/** SHould this Flexibility be Offered when is constrainList is fulfilled the flexibility can be activated.*/
+	@Expose
 	public boolean offered;
 	/** The Duration in TimeSteps how long the Flexibility is activated.*/
+	@Expose
 	private int duration;
 	/** The Duration after a successful activation between the next possible activation.*/
+	@Expose
 	private int cooldown;
 	/** The Element this flexibility is assigned.*/
 	private HolonElement element;
+
+
+
+
+
 	/** The List of Constrains the Flexibility */
-	public List<Predicate<Flexibility>> constrainList;
+	@Expose
+	public List<Constrain> constrainList;
 	
 	
 	public Flexibility(HolonElement element){
@@ -36,18 +50,22 @@ public class Flexibility {
 		setCooldown(cooldown);
 		this.offered=offered;
 		this.element = element;
-		constrainList = new ArrayList<Predicate<Flexibility>>();		
+		constrainList = new ArrayList<Constrain>();		
 	}
 	
 	
 	/** Checks if all assigned constrains are fulfilled. When no constrains assigned returns true.*/
 	public boolean fulfillsConstrains() {
-		return constrainList.stream().reduce(Predicate::and).orElse(f -> true).test(this);
+		//System.out.println("Fix me when other is fixed");
+		return constrainList.stream().map(constrain -> constrain.getConstrainFunction()).reduce(Predicate::and).orElse(f -> true).test(this);
 	}
 	
 	public HolonElement getElement() {
 		return element;
 	}
+	public void setElement(HolonElement element) {
+		this.element = element;
+	}
 
 	public int getDuration() {
 		return duration;
@@ -79,15 +97,10 @@ public class Flexibility {
 		return "Flexibility: " + name + " from [HolonElement: " + element.getEleName() + " ID:" + element.getId()+"]";
 	}
 
+	
+	
 
-
-
-
-	//Example Constrains:
-	/** Flexibility should be offered when Element is active.*/
-	public static Predicate<Flexibility> onConstrain = f 	-> 	f.getElement().isActive();
-	/** Flexibility should be offered when Element is inactive.*/
-	public static Predicate<Flexibility> offConstrain = f	-> 	!f.getElement().isActive();
+	
 	
 	
 	

+ 1 - 1
src/classes/HolonElement.java

@@ -48,7 +48,7 @@ public class HolonElement implements LocalMode, GraphEditable{
     /** Gives us whether this element is flexible and can flexibly use any part of the energy in flexibleEnergyAvailable */
 
     
-    
+    @Expose
     private Priority priority;
 
 	public enum Priority {

+ 1 - 1
src/ui/controller/FlexManager.java

@@ -56,7 +56,7 @@ public class FlexManager {
 		List<HolonObject> list = new ArrayList<HolonObject>();
 		for(AbstractCpsObject aCps :  objectsOnCanvas) {
 			if(aCps instanceof HolonObject) list.add((HolonObject) aCps);
-			else list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
+			else if(aCps instanceof CpsUpperNode)list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
 		}
 		return list;
 	}

+ 13 - 3
src/ui/controller/LoadController.java

@@ -5,6 +5,7 @@ import classes.*;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
+import com.google.gson.reflect.TypeToken;
 
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveException;
@@ -298,9 +299,18 @@ public class LoadController {
                                     HashMap<Integer, HolonElement> eleDispatch) {
 
         JsonObject object = jsonElement.getAsJsonObject();
-        System.out.println("loadCanvasElements");
         HolonElement temp = model.getGson().fromJson(object.get("properties"), HolonElement.class);
         initElements(temp);
+        temp.flexList = model.getGson().fromJson(object.get("FlexList"), new TypeToken<List<Flexibility>>() {}.getType());
+        //object.get("FlexList").getAsJsonArray().forEach(jo -> System.out.println("Hallo"));
+        //object.get("FlexList").getAsJsonArray().forEach(flexJson -> flexJson.getAsJsonObject().get("constrainList").getAsJsonArray().forEach(constrainJson -> System.out.println("Constrain:" + constrainJson.getAsJsonObject().get("name").getAsString())));
+        temp.flexList.stream().forEach(flex -> {
+        	flex.setElement(temp);
+        	flex.constrainList.forEach(con -> con.fixJson());
+        	
+        });
+        
+        
         // id which Object it was stored before
         int stored = object.get("ID").getAsInt();
         // lookup that object
@@ -372,7 +382,7 @@ public class LoadController {
      */
     private void loadUnitGraph(GRAPHTYPE type, JsonElement jsonElement, HashMap<Integer, AbstractCpsObject> objDispatch,
                                HashMap<Integer, HolonElement> eleDispatch) {
-    	//TODO Make UnitGraph unterscheidung hinfällig!!!!
+    	//TODO Make UnitGraph unterscheidung hinf�llig!!!!
         JsonObject object = jsonElement.getAsJsonObject();
         List<String> keys = getKeys(object);
         String p;
@@ -526,7 +536,7 @@ public class LoadController {
      * @param ele the element to be initialized
      */
     void initElements(HolonElement ele) {
-        
+        ele.flexList = new ArrayList<Flexibility>();
         ele.setGraphPoints(new LinkedList<>());
         ele.reset();
     }

+ 0 - 2
src/ui/controller/ObjectController.java

@@ -133,8 +133,6 @@ public class ObjectController {
      */
     public void addSelectedObject(AbstractCpsObject obj) {
         model.getSelectedCpsObjects().add(obj);
-        
-        System.out.println("Add Object");
     }
 
     /**

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

@@ -3,6 +3,8 @@ package ui.controller;
 import classes.*;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonPrimitive;
+import com.google.gson.reflect.TypeToken;
+
 import org.apache.commons.compress.archivers.ArchiveException;
 import org.apache.commons.compress.archivers.ArchiveOutputStream;
 import org.apache.commons.compress.archivers.ArchiveStreamFactory;
@@ -254,6 +256,8 @@ public class SaveController {
         for (HolonElement ele : ((HolonObject) obj).getElements()) {
             temp.add("properties", model.getGson().toJsonTree(ele));
             temp.add("ID", new JsonPrimitive(obj.getId()));
+            temp.add("FlexList", model.getGson().toJsonTree(ele.flexList,  new TypeToken<List<Flexibility>>() {
+            }.getType()));
             // switch for deciding the key
             switch (type) {
                 case CANVAS:

+ 4 - 3
src/ui/controller/UpdateController.java

@@ -81,7 +81,7 @@ public class UpdateController {
 			}
 			for (HolonElement e1 : elemList) {
 				Object[] temp2 = { e1.getObjName(), e1.getId(), e1.getEleName(), e1.getEnergyPerElement(),
-						controller.getSimManager().getActualFlexManager().isAFlexInUseOfHolonElement(e1), e1.getAmount(), e1.isActive(), false };
+						controller.getSimManager().getActualFlexManager().isAFlexInUseOfHolonElement(e1), e1.getAmount(), e1.isActive()};
 				table.addRow(temp2);
 			}
 
@@ -95,7 +95,7 @@ public class UpdateController {
 				
 				for (HolonElement e1 : elemList) {
 					Object[] temp2 = { e1.getId(), e1.getEleName(), e1.getEnergyPerElement(),
-							controller.getSimManager().getActualFlexManager().isAFlexInUseOfHolonElement(e1), e1.getAmount(), e1.isActive(), false };
+							controller.getSimManager().getActualFlexManager().isAFlexInUseOfHolonElement(e1), e1.getAmount(), e1.isActive()};
 					table.addRow(temp2);
 				}
 			}
@@ -146,6 +146,7 @@ public class UpdateController {
 	public void refreshTableHolonElement(PropertyTable multiTable, PropertyTable singleTable) {
 		// Update of the Information about the HolonElements - only for
 		// HolonObjects
+		if(multiTable == null || singleTable == null ) return;
 		if (model.getSelectedCpsObjects().size() > 1) {
 			deleteRows(multiTable);
 			fillElementTable(model.getSelectedCpsObjects(), multiTable);
@@ -300,7 +301,7 @@ public class UpdateController {
 				Object[] tempFlex = { "Flexibility", ((HolonObject) obj).getTotalFlex() };
 				model.getPropertyTable().addRow(tempEnergy);
 				model.getPropertyTable().addRow(tempFlex);
-				model.getPropertyTable().setCellEditable(0, 1, true);
+				model.getPropertyTable().setCellEditable(0, 1, false);
 				model.getPropertyTable().setCellEditable(2, 1, false);
 				model.getPropertyTable().setCellEditable(3, 1, false);
 				model.getPropertyTable().setCellEditable(4, 1, false);

+ 81 - 5
src/ui/view/FlexWindow.java

@@ -10,6 +10,8 @@ import java.awt.Insets;
 import java.awt.Dialog.ModalityType;
 import java.awt.Dimension;
 import java.awt.event.ItemEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 import java.awt.image.BufferedImage;
 import java.math.RoundingMode;
 import java.text.NumberFormat;
@@ -35,18 +37,23 @@ import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTree;
+import javax.swing.SwingUtilities;
 import javax.swing.border.EmptyBorder;
 import javax.swing.text.NumberFormatter;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
 
 import classes.AbstractCpsObject;
+import classes.Constrain;
 import classes.CpsUpperNode;
 import classes.Flexibility;
 import classes.HolonElement;
+import classes.HolonElement.Priority;
 import classes.HolonObject;
 import ui.controller.Control;
 import ui.controller.FlexManager;
@@ -249,6 +256,7 @@ public class FlexWindow extends JFrame {
 				controller.calculateStateAndVisualForCurrentTimeStep();
 				controller.updateCanvas();
 			});
+			labelButton.setToolTipText(createToolTipp(actual));
 		}
 		//AddSpacer
 		JLabel spacer = new JLabel();
@@ -264,6 +272,22 @@ public class FlexWindow extends JFrame {
 	}
 
 
+	private String createToolTipp(FlexWrapper actual) {
+		String tooltipString = "<html>" +
+	"<b>" + actual.getFlex().name + "( </b>" + actual.getFlex().getElement().getEleName() + "<b> )</b><br>"
+	+ ((actual.remainingDuration() != 0)?"<i>Remaining Duration:"+ actual.remainingDuration()+"</i><br>":"") 
+	+ ((actual.remainingTimeTillActivation() != 0)?"<i>Remaining TimeTillActivation:"+ actual.remainingTimeTillActivation()+"</i><br>":"")
+	+ "Duration: " + actual.getFlex().getDuration()  + "<br>"
+	+ "Cooldown: " + actual.getFlex().getCooldown() + "<br>"
+	+ "Speed: " + actual.getFlex().speed + "<br>"
+	+ "Constrains: " + actual.getFlex().constrainList.stream().map(constrain -> constrain.getName()).collect(Collectors.joining( "," )) + "<br>"
+	+ "</html>";
+		
+		return tooltipString;
+	}
+
+
+
 	public void updateFlexOrderMenu() {
 		createUsageViewPanel();
 		contentPanel.setComponentAt(contentPanel.indexOfTab("Order"), usageViewPanel);
@@ -278,6 +302,7 @@ public class FlexWindow extends JFrame {
 		listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
 		treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
 		stateTree = new JTree(treeModel);
+		stateTree.setComponentPopupMenu(new PopUpDemo(stateTree, treeModel));
 		selectedPanel = new JPanel(new BorderLayout());
 		selectedPanel.add(new JScrollPane(stateTree));
 	}
@@ -311,10 +336,19 @@ public class FlexWindow extends JFrame {
 			if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
 			if(aCps instanceof CpsUpperNode)expandTreeUpperNode((CpsUpperNode)aCps, newObjectChild);
 			listOfAllSelectedHolonObjects.add(newObjectChild);
-			System.out.println("Added: " + aCps.getName());
 		}
 		treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
+	
 		stateTree.revalidate();
+//		stateTree.addMouseListener(new MouseAdapter() {
+//
+//		    @Override
+//		    public void mousePressed(MouseEvent e) {
+//		    	System.out.println("MouseEvent");
+//		    	if (!SwingUtilities.isRightMouseButton(e)) return;
+//		    	
+//		    }
+//		});
 		expandAll(stateTree);
 		selectedPanel.revalidate();
 		contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
@@ -347,7 +381,7 @@ public class FlexWindow extends JFrame {
 
 	private void expandTreeHolonObject(HolonObject hObject, DefaultMutableTreeNode root) {
 		for(HolonElement hElement: hObject.getElements()) {
-			DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(hElement.getEleName());
+			DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(new ElementInfo(hElement));
 			expandTreeFlex(hElement, newChild);
 			root.add(newChild);
 		}
@@ -391,7 +425,7 @@ public class FlexWindow extends JFrame {
 		List<HolonObject> list = new ArrayList<HolonObject>();
 		for(AbstractCpsObject aCps :  objectsOnCanvas) {
 			if(aCps instanceof HolonObject) list.add((HolonObject) aCps);
-			else list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
+			else if (aCps instanceof CpsUpperNode) list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
 		}
 		return list;
 	}
@@ -573,8 +607,8 @@ public class FlexWindow extends JFrame {
 			toCreateFlex.cost = intermediateFlex.cost;
 			toCreateFlex.setCooldown(intermediateFlex.getCooldown());
 			toCreateFlex.offered=offeredCheckBox.isSelected();
-			if(onConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Flexibility.onConstrain);
-			if(offConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Flexibility.offConstrain);
+			if(onConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Constrain.createOnConstrain());
+			if(offConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Constrain.createOffConstrain());
 			
 			ele.flexList.add(toCreateFlex);
 			//save checkboxes
@@ -602,5 +636,47 @@ public class FlexWindow extends JFrame {
 		addDialog.setVisible(true);
 	}
 	
+	class PopUpDemo extends JPopupMenu {
+	    JMenuItem anItem;
+	    public PopUpDemo(JTree jTree, DefaultTreeModel model) {
+	        anItem = new JMenuItem("EditPriorities");
+	        anItem.addActionListener( clicked -> {
+	        	TreePath[] paths = jTree.getSelectionPaths();
+	        	if(paths == null) {
+	        		jTree.setSelectionInterval(0, jTree.getRowCount());
+	        		paths = jTree.getSelectionPaths();
+	        	}
+	        	Priority prio = null;
+                for (TreePath path : jTree.getSelectionPaths()) {
+                    Object treeNodeUserObject = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
+                    if(treeNodeUserObject instanceof ElementInfo)
+                    {	
+                    	if(prio == null) prio = makePriorityDialog();
+                    	if(prio == null) break;
+                    	ElementInfo eleInfo = (ElementInfo)treeNodeUserObject;
+                    	eleInfo.ele.setPriority(prio);
+                    	model.reload((DefaultMutableTreeNode)path.getLastPathComponent());
+                    }
+                }
+	        });
+	        add(anItem);
+	    }
+		private Priority makePriorityDialog() {
+			return (Priority) JOptionPane.showInputDialog(this, "Select the Priority:", "Priority?",  JOptionPane.OK_OPTION,new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) , Priority.values(), "");
+		}
+	}
+	
+	class ElementInfo {
+		HolonElement ele;
+		public ElementInfo(HolonElement ele) {
+			this.ele = ele;
+		}
+		@Override
+		public String toString() {
+			return ele.getEleName() + " Priority:" + ele.getPriority();
+		}
+	}
+	
+	
 	
 }

+ 14 - 4
src/ui/view/GUI.java

@@ -1378,6 +1378,7 @@ public class GUI implements CategoryListener {
 									model.getMultiTable()) != null) {
 								// For active column (boolean with a checkbox)
 								if (selectedValueBX == 6) {
+									System.out.println("selectedValueBX == 6");
 									HolonElement eleBTemp = updCon
 											.getActualHolonElement(null,
 													yBMouse, 0, tables);
@@ -1392,6 +1393,7 @@ public class GUI implements CategoryListener {
 								// For activeFlex column (boolean with a
 								// checkbox)
 								else if (selectedValueBX == 7) {
+									System.out.println("selectedValueBX == 7");
 									HolonElement eleBTemp = updCon
 											.getActualHolonElement(null,
 													yBMouse, 0, tables);
@@ -1401,7 +1403,7 @@ public class GUI implements CategoryListener {
 													selectedValueBX).toString();
 									Boolean bTemp = Boolean
 											.parseBoolean(newBStuff);
-									//TODO: delete here more
+									eleBTemp.setActive(bTemp);
 								} else {
 									// Update of HolonElement
 									HolonElement eleTemp = updCon
@@ -1417,6 +1419,7 @@ public class GUI implements CategoryListener {
 									}
 									// Energy Update
 									else if (selectedValueX == 3) {
+										System.out.println("selectedValueX == 3");
 										Float ftemp = Float
 												.parseFloat(newStuff);
 										eleTemp.setEnergyPerElement(ftemp);
@@ -1433,6 +1436,9 @@ public class GUI implements CategoryListener {
 												.parseInt(newStuff);
 										eleTemp.setAmount(iTemp);
 									}
+									else if (selectedValueX == 6) {
+										System.out.println("Test");
+									}
 								}
 							}
 						} // ------------------ single-selection mode
@@ -1452,6 +1458,7 @@ public class GUI implements CategoryListener {
 
 								// For active column (boolean with a checkbox)
 								if (selectedValueBX == 5) {
+									System.out.println("hierC?");
 									eleTemp = updCon.getActualHolonElement(
 											(HolonObject) updCon.getActualCps(),
 											yBMouse, 0, tables);
@@ -1472,12 +1479,14 @@ public class GUI implements CategoryListener {
 									String newBStuff = model
 											.getSingleTable()
 											.getValueAt(selectedValueBY,
-													selectedValueBX).toString();
+													selectedValueBX -1).toString();
 									Boolean bTemp = Boolean
 											.parseBoolean(newBStuff);
+									eleTemp.setActive(bTemp);
 									//TODO: delete Boolean bTemp = Boolean.parseBoolean(newBStuff);
 
 								} else {
+									System.out.println("hierB?");
 									// Update of HolonElement
 									eleTemp = updCon.getActualHolonElement(
 											(HolonObject) updCon.getActualCps(),
@@ -3047,8 +3056,8 @@ public class GUI implements CategoryListener {
 	 */
 	private void updateElementTableAfterChange(HolonElement eleBTemp,
 			int selectedValueBY) {
-		model.getSingleTable().setValueAt(false,
-				selectedValueBY, 6);
+//		model.getSingleTable().setValueAt(false,
+//				selectedValueBY, 6);
 		model.getSingleTable().setValueAt(eleBTemp.isActive(), selectedValueBY,
 				5);
 		model.getSingleTable().setValueAt(eleBTemp.getAmount(),
@@ -3061,6 +3070,7 @@ public class GUI implements CategoryListener {
 	}
 
 	public void triggerUpdateController(AbstractCpsObject temp) {
+		if(model != null) { return;}
 		if (temp != null) {
 			updCon.paintProperties(temp);
 		}

+ 12 - 20
src/ui/view/PropertyTable.java

@@ -9,38 +9,30 @@ import javax.swing.table.DefaultTableModel;
  */
 public class PropertyTable extends DefaultTableModel {
 
+	private final int maxColumns = 7;
+	
 	@Override
 	public Class<?> getColumnClass(int columnIndex) {
-		Class clazz = String.class;
-		if(columnIndex == 3) {
-			clazz = Boolean.class;
-			return clazz;
-		}
-		
-		
-		if (getColumnCount() == 8) {
+		//System.out.println("getColumnClass(" + "index:" + columnIndex+ ", ColumnCount:" + getColumnCount() + ")");
+		if (getColumnCount() == maxColumns) {
 			switch (columnIndex) {
+			case 4:
 			case 6:
-				clazz = Boolean.class;
-			case 7:
-				clazz = Boolean.class;
-				break;
+				return Boolean.class;
 			}
-		} else if (getColumnCount() == 7) {
+		} else if (getColumnCount() == maxColumns - 1) {
 			switch (columnIndex) {
+			case 3:
 			case 5:
-				clazz = Boolean.class;
-			case 6:
-				clazz = Boolean.class;
-				break;
+				return Boolean.class;
 			}
 		}
-		return clazz;
+		return String.class;
 	}
 	
 	@Override
 	public boolean isCellEditable(int row, int column) {
-		return getColumnCount() == 8 && column > 1
-				|| getColumnCount() == 7 && column > 0;
+		return getColumnCount() == maxColumns && column > 1
+				|| getColumnCount() == maxColumns -1  && column > 0;
 	}
 }