dominik.rieder 8 years ago
parent
commit
21c1c2fae6

+ 9 - 1
src/ui/controller/Control.java

@@ -213,7 +213,11 @@ public class Control {
 	public void initListener(CategoryListener catLis) {
 		categoryController.addCategoryListener(catLis);
 	}
-
+	
+	public void calculateStateForCurrentTimeStep(){
+		simulationManager.reset();
+		simulationManager.calculateStateForTimeStep(MODEL.getCurIteration());
+	}
 	public void calculateStateForTimeStep(int x) {
 		simulationManager.reset();
 		simulationManager.calculateStateForTimeStep(x);
@@ -267,5 +271,9 @@ public class Control {
 	public Model getModel() {
 		return MODEL;
 	}
+	
+	public SimulationManager getSimManager(){
+		return simulationManager;
+	}
 
 }

+ 14 - 22
src/ui/controller/SimulationManager.java

@@ -15,6 +15,7 @@ import ui.view.MyCanvas;
 public class SimulationManager {
 	private Model model;
 	private ArrayList<CpsObject> objectsToHandle;
+	private ArrayList<CpsEdge> allConnections;
 	private ArrayList<subNet> subNets;
 	private MyCanvas canvas;
 	private int timeStep;
@@ -33,19 +34,19 @@ public class SimulationManager {
 	public void calculateStateForTimeStep(int x){
 		timeStep = x;
 		searchForSubNets();
+		for(subNet singleSubNet: subNets){
+			ResetConnections(singleSubNet.getObjects().get(0), new ArrayList<Integer>(), new ArrayList<CpsEdge>());
+		}
 		for(subNet singleSubNet: subNets){
 			float production = calculateEnergy("prod", singleSubNet, x);
 			float consumption = calculateEnergy("cons", singleSubNet, x);
 			float minConsumption = calculateMinimumEnergy( singleSubNet, x);
-			for(CpsEdge e: singleSubNet.getEdges()){
-				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() && edge.getFlow() > 0){
+						if(edge.getState() && edge.getFlow() > 0 || edge.getCapacity() == -1){
 							// 0 = no energy, 1 = not supplied, 2 = supplied, 3 = producer, 4 = partially supplied
 							if((production + consumption) >= 0){
 								hl.setState(2);
@@ -72,7 +73,6 @@ public class SimulationManager {
 		for(HolonObject hl: sN.getObjects()){
 			float energy = hl.getCurrentEnergyAtTimeStep(timeStep);
 			if(energy > 0){
-				//fillConnectionsFor(hl, new ArrayList<Integer>(), new ArrayList<CpsEdge>(), hl.getCurrentEnergyAtTimeStep(timeStep));
 				for(CpsEdge e : sN.getEdges()){
 					e.setFlow(e.getFlow() + energy);
 				}
@@ -80,26 +80,18 @@ public class SimulationManager {
 		}
 	}
 	
-	public void fillConnectionsFor(subNet sN, float energy){
-		for(CpsEdge e : sN.getEdges()){
-			e.setFlow(e.getFlow() + energy);
-		}
-	}
-	
-	public void fillConnectionsFor(CpsObject cps, ArrayList<Integer> visitedObj, ArrayList<CpsEdge> visitedEdges ,float energy ){
+	public void ResetConnections(CpsObject cps, ArrayList<Integer> visitedObj, ArrayList<CpsEdge> visitedEdges){
 		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);
-					}
-			}
+				e.setFlow(0);
+				visitedEdges.add(e);
+				if(!(visitedObj.contains(e.getA().getID()))){
+					ResetConnections(e.getA(), visitedObj, visitedEdges);
+				}
+				if(!(visitedObj.contains(e.getB().getID()))){
+					ResetConnections(e.getB(), visitedObj, visitedEdges);
+				}
 			}
 		}
 	}

+ 3 - 2
src/ui/view/EditEdgesPopUp.java

@@ -131,8 +131,7 @@ public class EditEdgesPopUp extends JDialog{
 						JOptionPane.showMessageDialog(new JFrame(),
 							"Please enter a number greater or equal 0 in the Field for Maximum Capacity");
 					}
-				}
-			}
+				}			}
 		});
 		btnOk_1.setBounds(186, 147, 89, 23);
 		contentPanel.add(btnOk_1);
@@ -162,10 +161,12 @@ public class EditEdgesPopUp extends JDialog{
 		for(CpsEdge edge : controller.getModel().getEdgesOnCanvas()){
 			edge.setCapacity(cap);
 		}
+		controller.calculateStateForCurrentTimeStep();
 		canvas.repaint();
 	}
 	public void changeForExAndNew(float cap){
 		changeForNew(cap);
 		changeForExisting(cap);
 	}
+
 }