package ui.view; import classes.AbstractCpsObject; import classes.HolonElement; import classes.HolonObject; import classes.StorageElement; import ui.model.Model; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** * popup for adding an Holon Element to a holon Object. * * @author Gruppe14 * @author improved by A.T.M.-B. (Gruppe007) */ public class AddStorageElementPopUp extends JDialog { /** * Serial. */ private static final long serialVersionUID = 1L; /* Data */ /** Holon Object the Element should be added to */ private AbstractCpsObject tempCps; /** Holon Element that should be edited (if in edit Modus */ private StorageElement hl; /* GUI */ /** Panel containing everything */ private final JPanel contentPanel = new JPanel(); /** Textfield for entering a Name for the Element */ private JTextField elementName; /** Textfield for the energy the Element consumes/produces */ private JTextField capacity; /** Element is active if checked */ JCheckBox checkBoxActive; /** Textfield to enter the amount of this Element */ private JTextField amount; /** Textfield to enter the flexible Energy of the Element */ private JTextField maxInRatio; private JTextField maxOutRatio; /** Flexible if checkbox is checked */ JCheckBox checkboxFlexible; /** Model which is used */ private Model model; /** * Create the AddElementPopup Dialog * @param parentFrame */ AddStorageElementPopUp(JFrame parentFrame, Model model) { super((java.awt.Frame) null, true); this.model = model; this.setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30)); setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL); setBounds(100, 100, 400, 245); setLocationRelativeTo(parentFrame); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); contentPanel.setLayout(null); this.setTitle(Languages.getLanguage()[64]); /* Element Name Textfield and Label */ elementName = new JTextField(); elementName.addKeyListener(new KeyListener() { @Override public void keyPressed(KeyEvent arg0) { } @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { elementName.setBackground(Color.WHITE); } }); JLabel lblElementName = new JLabel(Languages.getLanguage()[65]); lblElementName.setBounds(10, 10, 100, 20); contentPanel.add(lblElementName); elementName.setBounds(130, 10, 110, 20); contentPanel.add(elementName); elementName.setColumns(10); elementName.setText("Storage"); /* Add Provided Energy Label and Textfield */ JLabel lblCapacity = new JLabel("Capacity in kWh"); lblCapacity.setBounds(10, 50, 120, 20); contentPanel.add(lblCapacity); capacity = new JTextField(); capacity.setBounds(130, 50, 110, 20); contentPanel.add(capacity); capacity.setColumns(10); capacity.setText("13.5"); checkBoxActive = new JCheckBox("Active"); checkBoxActive.setSelected(true); checkBoxActive.setBounds(250, 50, 115, 20); contentPanel.add(checkBoxActive); /* Add Flexible Energy Textfield and CheckBox */ JLabel lblinRatio = new JLabel("maxInRatio in kW"); lblinRatio.setBounds(10, 90, 100, 20); contentPanel.add(lblinRatio); maxInRatio = new JTextField(); maxInRatio.setText("5000"); maxInRatio.setColumns(10); maxInRatio.setBounds(130, 90, 110, 20); contentPanel.add(maxInRatio); JLabel lbloutRatio = new JLabel("maxOutRatio in kW"); lbloutRatio.setBounds(10, 130, 100, 20); contentPanel.add(lbloutRatio); maxOutRatio = new JTextField(); maxOutRatio.setText("5000"); maxOutRatio.setColumns(10); maxOutRatio.setBounds(130, 130, 110, 20); contentPanel.add(maxOutRatio); // checkboxFlexible = new JCheckBox("Flexible"); // checkboxFlexible.setBounds(250, 90, 115, 20); // contentPanel.add(checkboxFlexible); /* Add Amount Textfield and Checkbox */ JLabel lblAmount = new JLabel(Languages.getLanguage()[67]); lblAmount.setBounds(10, 170, 100, 14); contentPanel.add(lblAmount); amount = new JTextField(); amount.setBounds(130, 170, 110, 20); contentPanel.add(amount); amount.setColumns(10); amount.setText("1"); /* Add Buttons and Actions */ JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); JButton okButton = new JButton("OK"); okButton.addActionListener(arg0 -> okAction()); okButton.setActionCommand("OK"); buttonPane.add(okButton); getRootPane().setDefaultButton(okButton); JButton cancelButton = new JButton(Languages.getLanguage()[71]); cancelButton.setActionCommand("Cancel"); buttonPane.add(cancelButton); cancelButton.addActionListener(e -> dispose()); } /** * Sets the actual Cps. * * @param cps * actual Cps */ void setActualCps(AbstractCpsObject cps) { this.tempCps = cps; } /** * Returns the created Element. * * @return the Element */ public StorageElement getElement() { return hl; } /** * setElement that should be edited * @param storageElement */ public void setElement(StorageElement storageElement) { hl = storageElement; elementName.setText(hl.getEleName()); amount.setText(""+hl.getAmount()); capacity.setText(""+hl.getEnergyPerElement()); checkBoxActive.setSelected(hl.isActive()); } /** * Trys to create/edit the Element */ private void okAction() { boolean repeated = false; for (HolonElement e : ((HolonObject) tempCps).getElements()) { if (elementName.getText().equals(e.getEleName())&&(hl == null || hl.getId()!=e.getId())) { repeated = true; break; } } if (elementName.getText().length() != 0 && !repeated) { try { float elementCapacity = Float.parseFloat(capacity.getText())*1000; float maxIn = Float.parseFloat(maxInRatio.getText()); float maxOut = Float.parseFloat(maxOutRatio.getText()); int elementAmount = Integer.parseInt(amount.getText()); if(hl == null){ hl = new StorageElement(elementName.getText(), elementAmount, 0, model, elementCapacity, maxIn, maxOut); } else { hl.setEleName(elementName.getText()); hl.setAmount(elementAmount); hl.setEnergyPerElement(0); hl.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0 ,0); } hl.setActive(checkBoxActive.isSelected()); dispose(); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(new JFrame(), Languages.getLanguage()[68]); } } else { if (elementName.getText().length() == 0) { JLabel errorString = new JLabel(Languages.getLanguage()[69]); errorString.setBounds(240, 8, 100, 20); contentPanel.add(errorString); } else if (repeated) { JLabel errorString = new JLabel(Languages.getLanguage()[70]); errorString.setBounds(250, 8, 100, 20); contentPanel.add(errorString); } elementName.setBackground(new Color(255, 50, 50)); } } }