Browse Source

Add/Delete HolonElements, TotalEnergy of each HolonObject

Edgardo Palza 8 years ago
parent
commit
19b62d35e1
4 changed files with 107 additions and 32 deletions
  1. 22 1
      src/classes/HolonElement.java
  2. 12 2
      src/classes/HolonObject.java
  3. 27 25
      src/ui/view/AddElementPopUp.java
  4. 46 4
      src/ui/view/GUI.java

+ 22 - 1
src/classes/HolonElement.java

@@ -16,6 +16,11 @@ public class HolonElement {
 	String image;
 	/* +: for Consumers and -: Producers */
 	char sign;
+	/*
+	 * Energy at each point of the graph with 50 predefined points. At the
+	 * beginning, it starts with all values at energy
+	 */
+	float[] energyAt = new float[49];
 
 	public HolonElement(String eleName, float energy, int amount) {
 		setEleName(eleName);
@@ -23,14 +28,30 @@ public class HolonElement {
 		setEnergy(energy);
 		setActive(true);
 		setSign(energy);
+		setEnergyAt(energy);
 	}
-	
+
 	public HolonElement(HolonElement element) {
 		setEleName(element.getEleName());
 		setAmount(element.getAmount());
 		setEnergy(element.getEnergy());
 		setActive(element.getActive());
 		setSign(element.getEnergy());
+		setEnergyAt(element.getEnergy());
+	}
+
+	public float[] getEnergyAt() {
+		return energyAt;
+	}
+
+	public void setEnergyAt(float energy) {
+		for (int i = 0; i < 49; i++) {
+			this.energyAt[i] = energy;
+		}
+	}
+
+	public void setEnergyAt(int pos, float energy) {
+		this.energyAt[pos] = energy;
 	}
 
 	/**

+ 12 - 2
src/classes/HolonObject.java

@@ -49,10 +49,19 @@ public class HolonObject extends CpsObject {
 		this.elements = elements;
 	}
 
+	public void addElements(HolonElement element) {
+		elements.add(element);
+	}
+
 	/**
 	 * @return the currentEnergy
 	 */
 	public float getCurrentEnergy() {
+		float temp = 0;
+		for (HolonElement e : getElements()) {
+			temp = temp + e.getTotalEnergy();
+		}
+		currentEnergy = temp;
 		return currentEnergy;
 	}
 
@@ -93,11 +102,12 @@ public class HolonObject extends CpsObject {
 		}
 		return objString;
 	}
-	
+
 	/**
 	 * Copys the ArrayList
 	 * 
-	 * @param the ArrayList to Copy
+	 * @param the
+	 *            ArrayList to Copy
 	 * 
 	 * @return the currentEnergy
 	 */

+ 27 - 25
src/ui/view/AddElementPopUp.java

@@ -50,25 +50,25 @@ public class AddElementPopUp extends JDialog {
 	public AddElementPopUp() {
 		super((java.awt.Frame) null, true);
 		setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
-		setBounds(100, 100, 300, 190);
+		setBounds(100, 100, 400, 190);
 		getContentPane().setLayout(new BorderLayout());
 		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
 		getContentPane().add(contentPanel, BorderLayout.CENTER);
 		contentPanel.setLayout(null);
 		this.setTitle("Add default Element to Object");
-		
+
 		JLabel lblElementName = new JLabel("Element Name:");
-		lblElementName.setBounds(10, 11, 79, 14);
+		lblElementName.setBounds(10, 11, 100, 14);
 		contentPanel.add(lblElementName);
-		
+
 		JLabel lblProvidedEnergy = new JLabel("Provided Energy:");
-		lblProvidedEnergy.setBounds(10, 49, 90, 14);
+		lblProvidedEnergy.setBounds(10, 49, 120, 14);
 		contentPanel.add(lblProvidedEnergy);
-		
+
 		JLabel lblAmount = new JLabel("Amount:");
-		lblAmount.setBounds(10, 84, 46, 14);
+		lblAmount.setBounds(10, 84, 100, 14);
 		contentPanel.add(lblAmount);
-		
+
 		elementName = new JTextField();
 		elementName.addKeyListener(new KeyListener() {
 			@Override
@@ -88,23 +88,23 @@ public class AddElementPopUp extends JDialog {
 				elementName.setBackground(Color.WHITE);
 			}
 		});
-		elementName.setBounds(140, 8, 110, 20);
+		elementName.setBounds(130, 8, 110, 20);
 		contentPanel.add(elementName);
 		elementName.setColumns(10);
-		
+
 		final JComboBox sign = new JComboBox();
-		sign.setModel(new DefaultComboBoxModel(new String[] {"+", "-"}));
-		sign.setBounds(100, 46, 33, 20);
+		sign.setModel(new DefaultComboBoxModel(new String[] { "+", "-" }));
+		sign.setBounds(240, 46, 60, 20);
 		contentPanel.add(sign);
-		
+
 		providedEnergy = new JTextField();
-		providedEnergy.setBounds(140, 46, 110, 20);
+		providedEnergy.setBounds(130, 46, 110, 20);
 		contentPanel.add(providedEnergy);
 		providedEnergy.setColumns(10);
 		providedEnergy.setText("0");
-		
+
 		amount = new JTextField();
-		amount.setBounds(140, 81, 110, 20);
+		amount.setBounds(130, 81, 110, 20);
 		contentPanel.add(amount);
 		amount.setColumns(10);
 		amount.setText("0");
@@ -116,20 +116,22 @@ public class AddElementPopUp extends JDialog {
 				JButton okButton = new JButton("OK");
 				okButton.addActionListener(new ActionListener() {
 					public void actionPerformed(ActionEvent arg0) {
-						if(elementName.getText().length() != 0){
-							try{
+						if (elementName.getText().length() != 0) {
+							try {
 								float energy = Float.parseFloat(providedEnergy.getText().toString());
 								int elementAmount = Integer.parseInt(amount.getText().toString());
-								if(sign.getSelectedItem().toString().equals("-")){
+								if (sign.getSelectedItem().toString().equals("-")) {
 									energy = energy * -1;
 								}
 								hl = new HolonElement(elementName.getText().toString(), energy, elementAmount);
 								dispose();
-							} catch(NumberFormatException e){
-								JOptionPane.showMessageDialog(new JFrame(),"Please enter numbers in the Fields amount and providedEnergy");
+							} catch (NumberFormatException e) {
+								JOptionPane.showMessageDialog(new JFrame(),
+										"Please enter numbers in the Fields amount and providedEnergy");
 							}
-						}else{
-							//JOptionPane.showMessageDialog(new JFrame(), "Please enter a Name");
+						} else {
+							// JOptionPane.showMessageDialog(new JFrame(),
+							// "Please enter a Name");
 							elementName.setBackground(new Color(255, 50, 50));
 						}
 					}
@@ -145,8 +147,8 @@ public class AddElementPopUp extends JDialog {
 			}
 		}
 	}
-	
-	public HolonElement getElement(){
+
+	public HolonElement getElement() {
 		return hl;
 	}
 }

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

@@ -42,6 +42,7 @@ import java.awt.Graphics;
 import java.awt.Image;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.ScrollPane;
 import java.awt.Shape;
 import java.awt.Toolkit;
 import java.awt.BorderLayout;
@@ -134,21 +135,27 @@ public class GUI implements CategoryListener {
 	// Pop up Windows
 	private AddObjectPopUp addObjectPopUP;
 	private AboutUsPopUp aboutUsPopUp;
+	private AddElementPopUp addElementPopUp;
 
 	private final JPanel panel = new JPanel();
+	private final JPanel panel_HolonEl = new JPanel();
 	private final JComboBox comboBox = new JComboBox();
 
 	// Buttons
 	private final JButton btnAdd = new JButton("+");
 	private final JButton btnDel = new JButton("-");
+	private final JButton btnAddHolEL = new JButton("+");
+	private final JButton btnDelHolEL = new JButton("-");
 
 	private final JToolBar toolBar = new JToolBar();
+	private final JToolBar toolBarHolonEl = new JToolBar();
 
 	// variables
 	private boolean dragging = false;
 	private String actualObjectClicked;
 	private Image img = null;
 	private CpsObject tempCps = null;
+	private HolonElement tempElement = null;
 
 	private MyCanvas canvas;
 	private UnitGraph testgraph; // for testing, remove later
@@ -273,6 +280,40 @@ public class GUI implements CategoryListener {
 		scrollElements.setViewportView(tableHolonElement);
 		scrollGraph.setViewportView(testgraph);
 
+		scrollElements.setRowHeaderView(panel_HolonEl);
+		panel_HolonEl.setLayout(new BoxLayout(panel_HolonEl, BoxLayout.X_AXIS));
+		toolBarHolonEl.setFloatable(false);
+
+		panel_HolonEl.add(toolBarHolonEl);
+		toolBarHolonEl.add(btnAddHolEL);
+		btnAddHolEL.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (tempCps != null && tempCps.getClass() == HolonObject.class) {
+					addElementPopUp = new AddElementPopUp();
+					addElementPopUp.setVisible(true);
+					((HolonObject) tempCps).addElements(addElementPopUp.getElement());
+				}
+			}
+		});
+		toolBarHolonEl.add(btnDelHolEL);
+		btnDelHolEL.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (tempElement != null) {
+					((HolonObject) tempCps).getElements().remove(tempElement);
+				}
+			}
+		});
+
+		tableHolonElement.addMouseListener(new MouseAdapter() {
+			public void mousePressed(MouseEvent e) {
+				int rowSelected = (int) Math.floor(e.getY() / 16);
+				if (tableHolonElement.getSelectedColumn() == 0 && tableHolonElement.getRowCount() >= rowSelected) {
+					tempElement = ((HolonObject) tempCps).getElements().get(rowSelected);
+				} else {
+					tempElement = null;
+				}
+			}
+		});
 		frmCyberPhysical.getContentPane().setLayout(new BorderLayout(0, 0));
 
 		TreeCellRenderer customRenderer = new TreeCellRenderer() {
@@ -514,7 +555,7 @@ public class GUI implements CategoryListener {
 
 					tempCps = controller.searchByID(model.getSelectedObjectID());
 					if (tempCps != null) {
-						System.out.println("change: " + tempCps.toString());
+						// System.out.println("change: " + tempCps.toString());
 						for (int r = 0; r < tableModelHolonElement.getRowCount(); r++) {
 							ArrayList<Object> temp = new ArrayList<>();
 							for (int c = 0; c < tableModelHolonElement.getColumnCount(); c++) {
@@ -532,8 +573,9 @@ public class GUI implements CategoryListener {
 							((HolonObject) tempCps).getElements().get(r).setSign(ch);
 							((HolonObject) tempCps).getElements().get(r).setEnergy(fa);
 							((HolonObject) tempCps).getElements().get(r).setAmount(i);
-							System.out.println(tableHolonElement.getRowCount() + " " + temp.get(0) + " " + ch + " " + fa
-									+ " " + i);
+							// System.out.println(tableHolonElement.getRowCount()
+							// + " " + temp.get(0) + " " + ch + " " + fa
+							// + " " + i);
 						}
 						if (tableModelHolonElement.getRowCount() > 0) {
 							for (int i = tableModelHolonElement.getRowCount() - 1; i > -1; i--) {
@@ -591,6 +633,7 @@ public class GUI implements CategoryListener {
 			}
 		});
 		toolBar.add(btnDel);
+
 		frmCyberPhysical.getContentPane().add(splitPane);
 
 		mntmOpen.addActionListener(new java.awt.event.ActionListener() {
@@ -643,7 +686,6 @@ public class GUI implements CategoryListener {
 
 		timePanel.add(playBtn, BorderLayout.WEST);
 		timePanel.add(timeSlider);
-
 		frmCyberPhysical.getContentPane().add(timePanel, BorderLayout.SOUTH);
 	}