Browse Source

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

Teh-Hai Julian Zheng 8 years ago
parent
commit
0a865da289

+ 9 - 0
src/classes/CpsEdge.java

@@ -5,6 +5,7 @@ public class CpsEdge {
 	float maxCapacity;
 	float flow;
 	boolean isWorking;
+	boolean infinite;
 	
 	CpsObject A;
 	CpsObject B;
@@ -97,5 +98,13 @@ public class CpsEdge {
 	public boolean getState(){
 		return isWorking;
 	}
+	
+	public void setInfinite(boolean inf){
+		infinite = inf;
+	}
+	
+	public boolean getInfinite(){
+		return infinite;
+	}
 
 }

+ 26 - 16
src/classes/HolonObject.java

@@ -10,7 +10,7 @@ public class HolonObject extends CpsObject {
 
 	/* Array of all consumers */
 	private ArrayList<HolonElement> elements;
-	/* Array of all Indices of Elements*/
+	/* Array of all Indices of Elements */
 	private HashMap<String, Integer> EleIdx;
 	/* Total of consumption */
 	private float currentEnergy;
@@ -27,7 +27,7 @@ public class HolonObject extends CpsObject {
 	public HolonObject(String ObjName) {
 		super(ObjName);
 		setElements(new ArrayList<HolonElement>());
-		setEleIdx(new HashMap<String,Integer>());
+		setEleIdx(new HashMap<String, Integer>());
 		setState();
 	}
 
@@ -35,26 +35,26 @@ public class HolonObject extends CpsObject {
 		super(ObjName);
 		super.setName(obj);
 		setElements(new ArrayList<HolonElement>());
-		setEleIdx(new HashMap<String,Integer>());
+		setEleIdx(new HashMap<String, Integer>());
 		setState();
 	}
 
 	public HolonObject(CpsObject obj) {
 		super(obj);
 		setEleIdx(MultiPurposeController.copyHashMap(((HolonObject) obj).getEleIdx()));
-		setElements(copyElements(((HolonObject)obj).getElements()));
+		setElements(copyElements(((HolonObject) obj).getElements()));
 		setState();
 	}
-	
+
 	/**
-	 * sets the State, wether object is a producer, zero Energy, supplied or not supplied
+	 * sets the State, wether object is a producer, zero Energy, supplied or not
+	 * supplied
 	 */
-	public void setState(){
-		if(getCurrentEnergy() > 0){
+	public void setState() {
+		if (getCurrentEnergy() > 0) {
 			setState(3);
-		}
-		else{
-			if(getCurrentEnergy() == 0){
+		} else {
+			if (getCurrentEnergy() == 0) {
 				setState(0);
 			}
 		}
@@ -92,7 +92,7 @@ public class HolonObject extends CpsObject {
 		currentEnergy = temp;
 		return currentEnergy;
 	}
-	
+
 	public float getCurrentEnergyAtTimeStep(int x) {
 		float temp = 0;
 		for (HolonElement e : getElements()) {
@@ -103,7 +103,6 @@ public class HolonObject extends CpsObject {
 		currentEnergy = temp;
 		return currentEnergy;
 	}
-	
 
 	/**
 	 * @param currentEnergy
@@ -138,8 +137,6 @@ public class HolonObject extends CpsObject {
 		}
 		return objString;
 	}
-	
-	
 
 	/**
 	 * @return the eleIdx
@@ -149,13 +146,16 @@ public class HolonObject extends CpsObject {
 	}
 
 	/**
-	 * @param eleIdx the eleIdx to set
+	 * @param eleIdx
+	 *            the eleIdx to set
 	 */
 	public void setEleIdx(HashMap<String, Integer> eleIdx) {
 		EleIdx = eleIdx;
 	}
+
 	/**
 	 * Copy all Elements into a New Array
+	 * 
 	 * @param arr
 	 * @return
 	 */
@@ -181,4 +181,14 @@ public class HolonObject extends CpsObject {
 	public void setState(int st) {
 		this.state = st;
 	}
+
+	public HolonElement searchElement(String name) {
+		HolonElement ele = null;
+		for (HolonElement e : getElements()) {
+			if (e.getEleName().equals(name)) {
+				ele = e;
+			}
+		}
+		return ele;
+	}
 }

+ 29 - 5
src/ui/controller/SimulationManager.java

@@ -38,13 +38,14 @@ public class SimulationManager {
 			float consumption = calculateEnergy("cons", singleSubNet, x);
 			float minConsumption = calculateMinimumEnergy( singleSubNet, x);
 			for(CpsEdge e: singleSubNet.getEdges()){
-				e.setFlow(production);
+				e.setFlow(0);
 			}
+			setFlow(singleSubNet);
 			for(HolonObject hl: singleSubNet.getObjects()){
 				if(!(hl.getState() == 0) && !(hl.getState() == 3)){
 					for(int i = 0; i < hl.getConnections().size(); i++){
 						CpsEdge edge = hl.getConnectedTo().get(i);
-						if(edge.getState()){
+						if(edge.getState() && edge.getFlow() > 0){
 							// 0 = no energy, 1 = not supplied, 2 = supplied
 							if((production + consumption) >= 0){
 								hl.setState(2);
@@ -52,10 +53,8 @@ public class SimulationManager {
 							if((production + consumption) < 0){
 								if((production + minConsumption) >= 0){
 									hl.setState(4);
-									System.out.println("yellow");
 								}else{
 									hl.setState(1);
-									System.out.println("orange");
 								}
 							}
 							break;
@@ -69,6 +68,32 @@ public class SimulationManager {
 		canvas.repaint();
 	}
 	
+	public void setFlow(subNet sN){
+		for(HolonObject hl: sN.getObjects()){
+			if(hl.getCurrentEnergyAtTimeStep(timeStep) > 0){
+				fillConnectionsFor(hl, new ArrayList<Integer>(), new ArrayList<CpsEdge>(), hl.getCurrentEnergyAtTimeStep(timeStep));
+			}
+		}
+	}
+	
+	public void fillConnectionsFor(CpsObject cps, ArrayList<Integer> visitedObj, ArrayList<CpsEdge> visitedEdges ,float energy ){
+		visitedObj.add(cps.getID());
+		for(CpsEdge e: cps.getConnections()){
+			if(!(visitedEdges.contains(e))){
+				e.setFlow(e.getFlow() + energy);
+				if(e.getState()){
+					visitedEdges.add(e);
+					if(!(visitedObj.contains(e.getA().getID()))){
+					fillConnectionsFor(e.getA(), visitedObj, visitedEdges, energy);
+					}
+					if(!(visitedObj.contains(e.getB().getID()))){
+						fillConnectionsFor(e.getB(), visitedObj, visitedEdges, energy);
+					}
+			}
+			}
+		}
+	}
+	
 	/**
 	 * calculates the energy of either all producers or consumers
 	 * @param type
@@ -109,7 +134,6 @@ public class SimulationManager {
 					minElement = he.getTotalEnergyAtTimeStep(x);
 				}
 			}
-			System.out.println(minElement);
 			min = min + minElement;
 		}
 		return min;

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

@@ -10,6 +10,10 @@ import java.awt.Point;
 import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.beans.PropertyChangeEvent;
@@ -18,12 +22,16 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
 import javax.swing.BoxLayout;
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.ImageIcon;
+import javax.swing.InputMap;
 import javax.swing.JButton;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JComboBox;
+import javax.swing.JComponent;
 import javax.swing.JEditorPane;
 import javax.swing.JFileChooser;
 import javax.swing.JFrame;
@@ -42,6 +50,7 @@ import javax.swing.JTable;
 import javax.swing.JTextField;
 import javax.swing.JToolBar;
 import javax.swing.JTree;
+import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 import javax.swing.border.LineBorder;
 import javax.swing.event.ChangeEvent;
@@ -230,6 +239,24 @@ public class GUI<E> implements CategoryListener {
 			}
 		});
 
+		
+
+		JPanel contentPane = (JPanel) frmCyberPhysical.getContentPane();
+
+		int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
+		InputMap inputMap = contentPane.getInputMap(condition);
+		ActionMap actionMap = contentPane.getActionMap();
+
+		String zDown = "z";
+		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0), zDown);
+		actionMap.put(zDown, new AbstractAction() {
+			@Override
+			public void actionPerformed(ActionEvent arg0) {
+				System.out.println("z");
+			}
+		});
+		
+
 		frmCyberPhysical.setJMenuBar(menuBar);
 
 		frmCyberPhysical.setIconImage(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage()
@@ -421,8 +448,16 @@ public class GUI<E> implements CategoryListener {
 		tableHolonElement.addMouseListener(new MouseAdapter() {
 			public void mousePressed(MouseEvent e) {
 				HolonObject obj = (HolonObject) getActualCps();
+				;
 				yValueElements = e.getY();
-				HolonElement ele = getActualHolonElement(obj, yValueElements);
+				HolonElement ele = null;
+				if (model.getSelectedCpsObjects().size() == 1) {
+					ele = getActualHolonElement(obj, yValueElements);
+				} else {
+					ele = getActualHolonElement(null, yValueElements);
+				}
+
+				// System.out.println(ele.getEleName());
 				if (e.isControlDown() && ele != null) {
 					if (!selectedElements.contains(ele)) {
 						selectedElements.add(ele);
@@ -790,7 +825,6 @@ public class GUI<E> implements CategoryListener {
 				// Update of the Information about the Properties - only for
 				// CpsObjects
 				// Erase old data
-				System.out.println(model.getSelectedCpsObjects());
 				if (tableModelProperties.getRowCount() > 0) {
 					for (int i = tableModelProperties.getRowCount() - 1; i > -1; i--) {
 						tableModelProperties.removeRow(i);
@@ -1226,9 +1260,18 @@ public class GUI<E> implements CategoryListener {
 	public HolonElement getActualHolonElement(HolonObject obj, int yValue) {
 		final int yTemp = (int) Math.floor(yValue / 16);
 		int rowsTotal = tableModelHolonElement.getRowCount();
+		HolonObject obtTemp = null;
 		if (rowsTotal != 0 && rowsTotal > yTemp) {
-			model.setSelectedHolonElement(obj.getElements().get(yTemp));
-			return obj.getElements().get(yTemp);
+			if (obj == null) {
+				String temp = tableModelHolonElement.getValueAt(yTemp, 0).toString();
+				int idTemp = Integer.parseInt(temp.split(", ")[1]);
+				obtTemp = (HolonObject) controller.searchByID(idTemp);
+			} else {
+				obtTemp = obj;
+			}
+			String eleTempName = tableModelHolonElement.getValueAt(yTemp, 1).toString();
+			model.setSelectedHolonElement(obtTemp.searchElement(eleTempName));
+			return obtTemp.searchElement(eleTempName);
 		} else {
 			model.setSelectedHolonElement(null);
 			return null;
@@ -1244,7 +1287,6 @@ public class GUI<E> implements CategoryListener {
 		// HolonObjects
 
 		deleteRows();
-		System.out.println(model.getSelectedCpsObjects());
 		if (model.getSelectedCpsObjects() != null) {
 			fillElementTable(model.getSelectedCpsObjects());
 		}
@@ -1273,7 +1315,8 @@ public class GUI<E> implements CategoryListener {
 		for (CpsObject o : objects) {
 			if (o instanceof HolonObject) {
 				for (HolonElement he : ((HolonObject) o).getElements()) {
-					Object[] temp = { o.getName(), he.getEleName(), he.getEnergy(), he.getAmount(), he.getActive() };
+					Object[] temp = { o.getName() + ", " + o.getID(), he.getEleName(), he.getEnergy(), he.getAmount(),
+							he.getActive() };
 					tableModelHolonElement.addRow(temp);
 				}
 			}

+ 4 - 5
src/ui/view/MyCanvas.java

@@ -77,7 +77,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		this.controller = control;
 		this.model = model;
 
-		edgeCapacity = 100;
+		edgeCapacity = 10000;
 		popmenu.add(itemDelete);
 		itemDelete.setEnabled(false);
 		itemDelete.addActionListener(new ActionListener() {
@@ -349,7 +349,6 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 				controller.addSelectedObject(tempCps);
 			}
 		}
-		System.out.println("test");
 		if (dragging) {
 			try {
 				dragged = true;
@@ -390,7 +389,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 							x = 0;
 						else if (x > this.getWidth() - controller.getScale())
 							x = this.getWidth() - controller.getScale();
-						if (y <=0)
+						if (y <= 0)
 							y = 0;
 						else if (y > this.getHeight() - controller.getScale())
 							y = this.getHeight() - controller.getScale();
@@ -405,7 +404,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		}
 
 		// Mark Objects
-		if (doMark){
+		if (doMark) {
 			for (CpsObject cps : model.getObjectsOnCanvas()) {
 				int x1 = sx, x2 = x, y1 = sy, y2 = y;
 
@@ -552,7 +551,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 			e = new CpsEdge(n, tempCps, edgeCapacity);
 
 			controller.AddEdgeOnCanvas(e);
-			System.out.println("node ID: " + n.getID());
+//			System.out.println("node ID: " + n.getID());
 		}
 
 		// Wenn ein Node ohne Connections da ist