Browse Source

Cable Update intern for Algos

Tom Troppmann 5 years ago
parent
commit
92e7f48e2b

+ 0 - 16
src/api/CpsAlgorithm.java

@@ -1,16 +0,0 @@
-package api;
-
-import ui.controller.Control;
-import ui.model.Model;
-
-/**
- * API Class for the CpsAlgorithm.
- * 
- * @author Gruppe14
- */
-public interface CpsAlgorithm {
-	/**
-	 * This Method will be called in each Iteration.
-	 */
-	public void runAlgorithm(Model model, Control controller);
-}

+ 2 - 0
src/classes/AbstractCpsObject.java

@@ -75,6 +75,8 @@ public abstract class AbstractCpsObject {
 		setId(IdCounter.nextId());
 		setImage(obj.getImage());
 	}
+	
+	public abstract AbstractCpsObject makeCopy();
 
 	/**
 	 * Getter for the type of the Object.

+ 23 - 1
src/classes/CpsEdge.java

@@ -16,7 +16,7 @@ public class CpsEdge {
     // Max. capacity of the Edge, if flow is greater than the status --> is
     // Working would be false
     @Expose
-    float maxCapacity;
+    private float maxCapacity;
     ArrayList<Integer> tags;
     // for internal use --> flow of electricity (simulation state)
     ArrayList<Integer> pseudoTags;
@@ -25,6 +25,12 @@ public class CpsEdge {
     // Destination
     AbstractCpsObject b;
 
+    @Expose
+    private boolean breakedManuel = false;
+    @Expose
+    private boolean unlimitedCapacity = false;
+    
+    
     /**
      * Constructor without max. capacity (by default as 100)
      *
@@ -207,4 +213,20 @@ public class CpsEdge {
     	return "CpsEdge: " + A + " to " + B;
     }
 
+	public boolean isBreakedManuel() {
+		return breakedManuel;
+	}
+
+	public void setBreakedManuel(boolean breakedManuel) {
+		this.breakedManuel = breakedManuel;
+	}
+
+	public boolean isUnlimitedCapacity() {
+		return unlimitedCapacity;
+	}
+
+	public void setUnlimitedCapacity(boolean unlimitedCapacity) {
+		this.unlimitedCapacity = unlimitedCapacity;
+	}
+
 }

+ 10 - 0
src/classes/CpsNode.java

@@ -24,7 +24,17 @@ public class CpsNode extends AbstractCpsObject {
 		this.setSav("CVS");
 		this.setId(IdCounter.nextId());
 	}
+	
+	public CpsNode(CpsNode node){
+		super(node);
+	}
+	
 	public String toString(){
 		return "Node ID:" + super.id;
 	}
+	
+	@Override
+	public AbstractCpsObject makeCopy() {
+		return new CpsNode(this);
+	}
 }

+ 5 - 0
src/classes/CpsUpperNode.java

@@ -205,5 +205,10 @@ public class CpsUpperNode extends AbstractCpsObject {
 		this.leftBorder = leftBorder;
 	}
 
+	@Override
+	public AbstractCpsObject makeCopy() {
+		return this;
+	}
+
 
 }

+ 5 - 0
src/classes/HolonBattery.java

@@ -184,4 +184,9 @@ public class HolonBattery extends AbstractCpsObject{
 		setImage(battery);
 		return battery;
 	}
+	
+	@Override
+	public HolonBattery makeCopy(){
+		return new HolonBattery(this);
+	}
 }

+ 5 - 0
src/classes/HolonObject.java

@@ -360,6 +360,11 @@ public class HolonObject extends AbstractCpsObject {
 
         return sb.toString();
     }
+    
+    @Override
+	public HolonObject makeCopy(){
+		return new HolonObject(this);
+	}
 
 	public int getNumberOfActiveElements() {
 		return (int) elements.stream().filter(ele -> ele.isActive()).count();

+ 5 - 0
src/classes/HolonSwitch.java

@@ -309,4 +309,9 @@ public class HolonSwitch extends AbstractCpsObject implements LocalMode, GraphEd
 	public void setUseLocalPeriod(boolean state) {
 		this.localPeriodActive=state;
 	}
+	
+	@Override
+	public HolonSwitch makeCopy(){
+		return new HolonSwitch(this);
+	}
 }

+ 10 - 4
src/ui/controller/SimulationManager.java

@@ -49,7 +49,7 @@ public class SimulationManager {
 	 * @param m
 	 *            Model
 	 */
-	SimulationManager(Model m) {
+	public SimulationManager(Model m) {
 		model = m;
 	}
 	/**
@@ -58,7 +58,7 @@ public class SimulationManager {
 	 * @param timestep
 	 *            current Iteration
 	 */
-	void calculateStateForTimeStep(int timestep) {
+	public void calculateStateForTimeStep(int timestep) {
 		
 		
 		HashMap<CpsEdge, CableState> map = new HashMap<CpsEdge, CableState>();
@@ -66,6 +66,7 @@ public class SimulationManager {
 		{
 			//make cable hastmap
 			DecoratedState theStateBefore = saves.get(timestep-1);
+			//edges without HolonObjects or burned
 			for(DecoratedCable edge : theStateBefore.getLeftOverEdges())
 			{
 				map.put(edge.getModel(), edge.getState());
@@ -74,7 +75,12 @@ public class SimulationManager {
 		timeStep = timestep;
 		ArrayList<MinimumNetwork> list =  new ArrayList<MinimumNetwork>();
 		MinimumModel minimumModel = new MinimumModel(model.getObjectsOnCanvas(), model.getEdgesOnCanvas());
-		//set all working:
+		//set all BreakedManuel Cable Burned:
+		for(IntermediateCableWithState cable : minimumModel.getEdgeList()) {
+			if(cable.getModel().isBreakedManuel()) cable.setState(CableState.Burned);
+		}
+		
+		//set all the state before:
 		for(IntermediateCableWithState cable : minimumModel.getEdgeList()) {
 			if(map.containsKey(cable.getModel())) cable.setState(map.get(cable.getModel()));
 		}
@@ -86,7 +92,7 @@ public class SimulationManager {
 			for(MinimumNetwork net : list) {
 				float energyOnCables = net.getHolonObjectList().stream().filter(object -> object.getEnergyAtTimeStep(timestep) > 0.0f).map(object -> object.getEnergyAtTimeStep(timestep)).reduce(0.0f, ((a,b) -> a + b));
 				//find the cable with the energy supplied from his two connected objects are the biggest, from all cables that the network give more energy than the cablecapacity. 
-				IntermediateCableWithState cable = net.getEdgeList().stream().filter(aCable -> energyOnCables > aCable.getModel().getCapacity()).max((lhs,rhs) -> Float.compare(lhs.getEnergyFromConnetedAtTimestep(timestep), rhs.getEnergyFromConnetedAtTimestep(timestep))).orElse(null);
+				IntermediateCableWithState cable = net.getEdgeList().stream().filter(aCable -> energyOnCables > aCable.getModel().getCapacity() && !aCable.getModel().isUnlimitedCapacity()).max((lhs,rhs) -> Float.compare(lhs.getEnergyFromConnetedAtTimestep(timestep), rhs.getEnergyFromConnetedAtTimestep(timestep))).orElse(null);
 				if(cable != null) {
 					cable.setState(CableState.Burned);
 					doAnotherLoop = true;

+ 1 - 21
src/ui/view/EditEdgesPopUp.java

@@ -44,7 +44,7 @@ public class EditEdgesPopUp extends JDialog {
         super((java.awt.Frame) null, true);
 		setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
 		this.setTitle(Languages.getLanguage()[46]);
-		setBounds(100, 100, 600, 220);
+		setBounds(100, 100, 400, 220);
         setLocationRelativeTo(parentFrame);
         getContentPane().setLayout(new BorderLayout());
 		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
@@ -86,21 +86,6 @@ public class EditEdgesPopUp extends JDialog {
 		JButton btnOk1 = new JButton("OK");
 		btnOk1.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
-				if (capacityField.getText().equals("infinite")) {
-					capacity = -1;
-					if (rdbtnChangeForAll.isSelected()) {
-						changeForExisting(capacity);
-						dispose();
-					} else if (rdbtnChangeForNew.isSelected()) {
-						changeForNew(capacity);
-						dispose();
-					} else if (rdbtnChangeForAll1.isSelected()) {
-						changeForExAndNew(capacity);
-						dispose();
-					} else {
-						JOptionPane.showMessageDialog(new JFrame(), Languages.getLanguage()[52]);
-					}
-				} else {
 					try {
 						capacity = Float.parseFloat(capacityField.getText().toString());
 						if (capacity < 0) {
@@ -121,7 +106,6 @@ public class EditEdgesPopUp extends JDialog {
 					} catch (NumberFormatException eex) {
 						JOptionPane.showMessageDialog(new JFrame(), Languages.getLanguage()[53]);
 					}
-				}
 			}
 		});
 		btnOk1.setBounds(186, 147, 89, 23);
@@ -131,10 +115,6 @@ public class EditEdgesPopUp extends JDialog {
 		bG.add(rdbtnChangeForAll1);
 		bG.add(rdbtnChangeForNew);
 		bG.add(rdbtnChangeForAll);
-
-		lblenterinfiniteFor = new JLabel(Languages.getLanguage()[55]);
-		lblenterinfiniteFor.setBounds(237, 11, 360, 14);
-		contentPanel.add(lblenterinfiniteFor);
 	}
 
 	/**

+ 6 - 15
src/ui/view/MyCanvas.java

@@ -417,6 +417,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		Position end =  cable.getModel().getB().getPosition();
 		float currentEnergy = cable.getFlowEnergy();
 		float capacity = cable.getModel().getCapacity();
+		boolean unlimited = cable.getModel().isUnlimitedCapacity();
 		switch(cable.getState()) {
 		case Burned:
 			g.setColor(Color.RED);
@@ -424,7 +425,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 			break;
 		case Working:
 			g.setColor(new Color(13, 175, 28));
-			g.setStroke(new BasicStroke((currentEnergy / capacity* 2f) + 1));
+			g.setStroke(new BasicStroke(unlimited?2f:(currentEnergy / capacity * 2f) + 1));
 			break;
 		}
 		if(isSelected){
@@ -433,7 +434,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		g.drawLine(start.x, start.y, end.x, end.y);
 		Position middle = new Position((start.x + end.x) / 2, (start.y + end.y) / 2);
 		g.setFont(new Font("TimesRoman", Font.PLAIN, Math.max((int) (controller.getScale() / 3.5f), 10) )); 
-		g.drawString(currentEnergy + "/" + capacity , middle.x, middle.y);
+		g.drawString(currentEnergy + "/" + (unlimited?"\u221E":capacity) , middle.x, middle.y);
 	}
 	private void paintSwitch(Graphics2D g, DecoratedSwitch dSwitch)
 	{
@@ -445,6 +446,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 		Position end = eCable.getFinish().getPosition();
 		float currentEnergy = eCable.getCable().getFlowEnergy();
 		float capacity = eCable.getCable().getModel().getCapacity();
+		boolean unlimited = eCable.getCable().getModel().isUnlimitedCapacity();
 		switch(eCable.getCable().getState()) {
 		case Burned:
 			g.setColor(Color.RED);
@@ -452,24 +454,13 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 			break;
 		case Working:
 			g.setColor(new Color(13, 175, 28));
-			g.setStroke(new BasicStroke((currentEnergy / capacity* 2f) + 1));
+			g.setStroke(new BasicStroke(unlimited?2f:(currentEnergy / capacity * 2f) + 1));
 			break;
 		}
 		g.drawLine(start.x, start.y, end.x, end.y);
 		Position middle = new Position((start.x + end.x) / 2, (start.y + end.y) / 2);
 		g.setFont(new Font("TimesRoman", Font.PLAIN, Math.max((int) (controller.getScale() / 3.5f), 10) )); 
-		g.drawString(currentEnergy + "/" + capacity , middle.x, middle.y);
-		switch(eCable.getState()) {
-		case DOWN:
-			break;
-		case DOWNDOWN:
-			break;
-		case DOWNUP:
-		case UP:
-		default:
-			System.out.println("Error");
-			break;
-		}
+		g.drawString(currentEnergy + "/" + (unlimited?"\u221E":capacity) , middle.x, middle.y);
 	}
 	private void paintGroupNode(Graphics2D g, DecoratedGroupNode dGroupNode, CpsUpperNode onThisGroupNodeModel) {
 //		for(ExitCable exitCable : dGroupNode.getExitCableList()) {

+ 7 - 5
src/ui/view/UpperNodeCanvas.java

@@ -403,6 +403,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 		Position end =  cable.getModel().getB().getPosition();
 		float currentEnergy = cable.getFlowEnergy();
 		float capacity = cable.getModel().getCapacity();
+		boolean unlimited = cable.getModel().isUnlimitedCapacity();
 		switch(cable.getState()) {
 		case Burned:
 			g.setColor(Color.RED);
@@ -410,7 +411,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 			break;
 		case Working:
 			g.setColor(new Color(13, 175, 28));
-			g.setStroke(new BasicStroke((currentEnergy / capacity* 2f) + 1));
+			g.setStroke(new BasicStroke(unlimited?2f:(currentEnergy / capacity * 2f) + 1));
 			break;
 		}
 		if(isSelected){
@@ -419,7 +420,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 		g.drawLine(start.x, start.y, end.x, end.y);
 		Position middle = new Position((start.x + end.x) / 2, (start.y + end.y) / 2);
 		g.setFont(new Font("TimesRoman", Font.PLAIN, Math.max((int) (controller.getScale() / 3.5f), 10) )); 
-		g.drawString(currentEnergy + "/" + capacity , middle.x, middle.y);
+		g.drawString(currentEnergy + "/" + (unlimited?"\u221E":capacity) , middle.x, middle.y);
 	}
 	private void paintSwitch(Graphics2D g, DecoratedSwitch dSwitch)
 	{
@@ -436,6 +437,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 		Position end = eCable.getFinish().getPosition();
 		float currentEnergy = eCable.getCable().getFlowEnergy();
 		float capacity = eCable.getCable().getModel().getCapacity();
+		boolean unlimited = eCable.getCable().getModel().isUnlimitedCapacity();
 		switch(eCable.getCable().getState()) {
 		case Burned:
 			g.setColor(Color.RED);
@@ -443,7 +445,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 			break;
 		case Working:
 			g.setColor(new Color(13, 175, 28));
-			g.setStroke(new BasicStroke((currentEnergy / capacity* 2f) + 1));
+			g.setStroke(new BasicStroke(unlimited?2f:(currentEnergy / capacity * 2f) + 1));
 			break;
 		}
 		switch(eCable.getState()) {
@@ -452,7 +454,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 			g.drawLine(start.x, start.y, end.x, end.y);
 			Position middle = new Position((start.x + end.x) / 2, (start.y + end.y) / 2);
 			g.setFont(new Font("TimesRoman", Font.PLAIN, Math.max((int) (controller.getScale() / 3.5f), 10) )); 
-			g.drawString(currentEnergy + "/" + capacity , middle.x, middle.y);
+			g.drawString(currentEnergy + "/" + (unlimited?"\u221E":capacity) , middle.x, middle.y);
 			break;
 		case DOWNUP:
 		case UP:
@@ -465,7 +467,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 			g.drawLine(start.x, start.y, result.x, result.y);
 			Position middle1 = new Position((start.x +result.x) / 2, (start.y + +result.y) / 2);
 			g.setFont(new Font("TimesRoman", Font.PLAIN, Math.max((int) (controller.getScale() / 3.5f), 10) )); 
-			g.drawString(currentEnergy + "/" + capacity , middle1.x, middle1.y);
+			g.drawString(currentEnergy + "/" + (unlimited?"\u221E":capacity) , middle1.x, middle1.y);
 			drawCanvasObject(g, "/Images/arrowUp.png" , result);
 			break;
 		default: