init
This commit is contained in:
59
src/org/fog/gui/dialog/About.java
Normal file
59
src/org/fog/gui/dialog/About.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JLabel;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
class About extends JDialog {
|
||||
|
||||
public About() {
|
||||
initUI();
|
||||
}
|
||||
|
||||
public final void initUI() {
|
||||
|
||||
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
|
||||
|
||||
add(Box.createRigidArea(new Dimension(0, 10)));
|
||||
|
||||
ImageIcon icon = new ImageIcon("src/logo.png");
|
||||
JLabel label = new JLabel(icon);
|
||||
label.setAlignmentX(0.5f);
|
||||
add(label);
|
||||
|
||||
add(Box.createRigidArea(new Dimension(0, 10)));
|
||||
|
||||
JLabel name = new JLabel("CloudSim SDN, 1.00");
|
||||
name.setFont(new Font("Serif", Font.BOLD, 15));
|
||||
name.setAlignmentX(0.5f);
|
||||
add(name);
|
||||
|
||||
add(Box.createRigidArea(new Dimension(0, 50)));
|
||||
|
||||
JButton close = new JButton("Close");
|
||||
close.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
dispose();
|
||||
}
|
||||
});
|
||||
|
||||
close.setAlignmentX(0.5f);
|
||||
add(close);
|
||||
|
||||
setModalityType(ModalityType.APPLICATION_MODAL);
|
||||
|
||||
setTitle("About CloudSim");
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
setLocationRelativeTo(null);
|
||||
setSize(350, 300);
|
||||
}
|
||||
}
|
||||
136
src/org/fog/gui/dialog/AddActuator.java
Normal file
136
src/org/fog/gui/dialog/AddActuator.java
Normal file
@@ -0,0 +1,136 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.ActuatorGui;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
public class AddActuator extends JDialog {
|
||||
private static final long serialVersionUID = -511667786177319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JTextField actuatorName;
|
||||
private JTextField actuatorType;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param frame the parent frame
|
||||
*/
|
||||
public AddActuator(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Actuator");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 400));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (actuatorName.getText() == null || actuatorName.getText().length() < 1) {
|
||||
prompt("Please type Actuator name", "Error");
|
||||
} else {
|
||||
if(!catchedError){
|
||||
ActuatorGui actuator = new ActuatorGui(actuatorName.getText(),
|
||||
actuatorType.getText().toString());
|
||||
graph.addNode(actuator);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
JLabel lName = new JLabel("Name: ");
|
||||
springPanel.add(lName);
|
||||
actuatorName = new JTextField();
|
||||
lName.setLabelFor(actuatorName);
|
||||
springPanel.add(actuatorName);
|
||||
|
||||
JLabel lType = new JLabel("Actuator Type : ");
|
||||
springPanel.add(lType);
|
||||
actuatorType = new JTextField();
|
||||
lName.setLabelFor(actuatorType);
|
||||
springPanel.add(actuatorType);
|
||||
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
2, 2, //rows, columns
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddActuator.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
134
src/org/fog/gui/dialog/AddActuatorModule.java
Normal file
134
src/org/fog/gui/dialog/AddActuatorModule.java
Normal file
@@ -0,0 +1,134 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.ActuatorModule;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
public class AddActuatorModule extends JDialog {
|
||||
private static final long serialVersionUID = -5116677861770319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JTextField actuatorType;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param frame the parent frame
|
||||
*/
|
||||
public AddActuatorModule(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Sensor Module");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 400));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (actuatorType.getText() == null || actuatorType.getText().length() < 1) {
|
||||
prompt("Please enter Actuator Type", "Error");
|
||||
} else {
|
||||
try {
|
||||
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
Node node = new ActuatorModule(actuatorType.getText().toString());
|
||||
graph.addNode(node);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
JLabel lName = new JLabel("Sensor Type: ");
|
||||
springPanel.add(lName);
|
||||
actuatorType = new JTextField();
|
||||
lName.setLabelFor(actuatorType);
|
||||
springPanel.add(actuatorType);
|
||||
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
1, 2, //rows, columns
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddActuatorModule.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
244
src/org/fog/gui/dialog/AddAppEdge.java
Normal file
244
src/org/fog/gui/dialog/AddAppEdge.java
Normal file
@@ -0,0 +1,244 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Label;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
|
||||
import org.fog.gui.core.Edge;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.NodeCellRenderer;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
/** A dialog to add a new edge */
|
||||
public class AddAppEdge extends JDialog {
|
||||
private static final long serialVersionUID = 4794808969864918000L;
|
||||
|
||||
private final Graph graph;
|
||||
private JComboBox sourceNode;
|
||||
private JComboBox targetNode;
|
||||
private JTextField tupleType;
|
||||
private JTextField tupleCpuLen;
|
||||
private JTextField tupleNwLen;
|
||||
|
||||
|
||||
public AddAppEdge(final Graph graph, final JFrame frame) {
|
||||
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanel(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Application edge");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(400, 250));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame); // must be called between pack and setVisible to work properly
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private JPanel createInputPanel() {
|
||||
|
||||
Component rigid = Box.createRigidArea(new Dimension(10, 0));
|
||||
|
||||
JPanel inputPanelWrapper = new JPanel();
|
||||
inputPanelWrapper.setLayout(new BoxLayout(inputPanelWrapper, BoxLayout.PAGE_AXIS));
|
||||
|
||||
JPanel inputPanel = new JPanel();
|
||||
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JPanel textAreaPanel = new JPanel();
|
||||
textAreaPanel.setLayout(new BoxLayout(textAreaPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JPanel textAreaPanel2 = new JPanel();
|
||||
textAreaPanel2.setLayout(new BoxLayout(textAreaPanel2, BoxLayout.LINE_AXIS));
|
||||
|
||||
ComboBoxModel sourceNodeModel = new DefaultComboBoxModel(graph.getAdjacencyList().keySet().toArray());
|
||||
|
||||
sourceNodeModel.setSelectedItem(null);
|
||||
|
||||
sourceNode = new JComboBox(sourceNodeModel);
|
||||
targetNode = new JComboBox();
|
||||
sourceNode.setMaximumSize(sourceNode.getPreferredSize());
|
||||
sourceNode.setMinimumSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
sourceNode.setPreferredSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
targetNode.setMaximumSize(targetNode.getPreferredSize());
|
||||
targetNode.setMinimumSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
targetNode.setPreferredSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
|
||||
NodeCellRenderer renderer = new NodeCellRenderer();
|
||||
|
||||
sourceNode.setRenderer(renderer);
|
||||
targetNode.setRenderer(renderer);
|
||||
|
||||
sourceNode.addItemListener(new ItemListener() {
|
||||
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
// only display nodes which do not have already an edge
|
||||
|
||||
targetNode.removeAllItems();
|
||||
Node selectedNode = (Node) sourceNode.getSelectedItem();
|
||||
|
||||
if (selectedNode != null) {
|
||||
|
||||
List<Node> nodesToDisplay = new ArrayList<Node>();
|
||||
Set<Node> allNodes = graph.getAdjacencyList().keySet();
|
||||
|
||||
// get edged for selected node and throw out all target nodes where already an edge exists
|
||||
List<Edge> edgesForSelectedNode = graph.getAdjacencyList().get(selectedNode);
|
||||
Set<Node> nodesInEdges = new HashSet<Node>();
|
||||
for (Edge edge : edgesForSelectedNode) {
|
||||
nodesInEdges.add(edge.getNode());
|
||||
}
|
||||
|
||||
for (Node node : allNodes) {
|
||||
if (!node.equals(selectedNode) && !nodesInEdges.contains(node)) {
|
||||
nodesToDisplay.add(node);
|
||||
}
|
||||
}
|
||||
|
||||
ComboBoxModel targetNodeModel = new DefaultComboBoxModel(nodesToDisplay.toArray());
|
||||
targetNode.setModel(targetNodeModel);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
inputPanel.add(sourceNode);
|
||||
inputPanel.add(new Label("--->"));
|
||||
inputPanel.add(targetNode);
|
||||
inputPanel.add(Box.createHorizontalGlue());
|
||||
inputPanelWrapper.add(inputPanel);
|
||||
|
||||
|
||||
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
//springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
|
||||
JLabel tupleTypeLabel = new JLabel("Tuple Type : ");
|
||||
springPanel.add(tupleTypeLabel);
|
||||
tupleType = new JTextField();
|
||||
tupleTypeLabel.setLabelFor(tupleType);
|
||||
springPanel.add(tupleType);
|
||||
|
||||
JLabel tupleCpuLenLabel = new JLabel("Tuple CPU Len : ");
|
||||
springPanel.add(tupleCpuLenLabel);
|
||||
tupleCpuLen = new JTextField();
|
||||
tupleCpuLenLabel.setLabelFor(tupleCpuLen);
|
||||
springPanel.add(tupleCpuLen);
|
||||
|
||||
JLabel tupleNwLenLabel = new JLabel("Tuple NW Len : ");
|
||||
springPanel.add(tupleNwLenLabel);
|
||||
tupleNwLen = new JTextField();
|
||||
tupleNwLenLabel.setLabelFor(tupleNwLen);
|
||||
springPanel.add(tupleNwLen);
|
||||
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
3, 2, //rows, cols
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
|
||||
inputPanelWrapper.add(springPanel);
|
||||
|
||||
return inputPanelWrapper;
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
String name = "default";
|
||||
long bandwidth = 0;
|
||||
boolean catchedError = false;
|
||||
|
||||
if (tupleType.getText() == null || tupleType.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please enter Tuple Type", "Error");
|
||||
} else if (tupleCpuLen.getText() == null || tupleCpuLen.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please enter Tuple CPU Length", "Error");
|
||||
} else if (tupleNwLen.getText() == null || tupleNwLen.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please enter Tuple NW Length", "Error");
|
||||
}
|
||||
else {
|
||||
name = ((Node)sourceNode.getSelectedItem()).getName()+"-"+((Node)sourceNode.getSelectedItem()).getName();
|
||||
}
|
||||
|
||||
|
||||
if (!catchedError) {
|
||||
if (sourceNode.getSelectedItem() == null || targetNode.getSelectedItem() == null) {
|
||||
prompt("Please select node", "Error");
|
||||
} else {
|
||||
|
||||
Node source = (Node) sourceNode.getSelectedItem();
|
||||
Node target = (Node) targetNode.getSelectedItem();
|
||||
|
||||
Edge edge = new Edge(target, name, bandwidth);
|
||||
graph.addEdge(source, edge);
|
||||
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddAppEdge.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
}
|
||||
134
src/org/fog/gui/dialog/AddApplicationModule.java
Normal file
134
src/org/fog/gui/dialog/AddApplicationModule.java
Normal file
@@ -0,0 +1,134 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.AppModule;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
public class AddApplicationModule extends JDialog {
|
||||
private static final long serialVersionUID = -5116677861770319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JTextField tfName;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param frame the parent frame
|
||||
*/
|
||||
public AddApplicationModule(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Application Module");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 400));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (tfName.getText() == null || tfName.getText().length() < 1) {
|
||||
prompt("Please type VM name", "Error");
|
||||
} else {
|
||||
try {
|
||||
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
Node node = new AppModule(tfName.getText().toString());
|
||||
graph.addNode(node);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
JLabel lName = new JLabel("Name: ");
|
||||
springPanel.add(lName);
|
||||
tfName = new JTextField();
|
||||
lName.setLabelFor(tfName);
|
||||
springPanel.add(tfName);
|
||||
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
1, 2, //rows, columns
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddApplicationModule.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
201
src/org/fog/gui/dialog/AddFogDevice.java
Normal file
201
src/org/fog/gui/dialog/AddFogDevice.java
Normal file
@@ -0,0 +1,201 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.FogDeviceGui;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
public class AddFogDevice extends JDialog {
|
||||
private static final long serialVersionUID = -5116677861770319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JLabel deviceNameLabel;
|
||||
private JLabel upBwLabel;
|
||||
private JLabel downBwLabel;
|
||||
private JLabel mipsLabel;
|
||||
private JLabel ramLabel;
|
||||
private JLabel levelLabel;
|
||||
private JLabel rateLabel;
|
||||
|
||||
private JTextField deviceName;
|
||||
private JTextField upBw;
|
||||
private JTextField downBw;
|
||||
private JTextField mips;
|
||||
private JTextField ram;
|
||||
private JTextField level;
|
||||
private JTextField rate;
|
||||
|
||||
|
||||
public AddFogDevice(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Fog Device");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 380));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (deviceName.getText() == null || deviceName.getText().length() < 1) {
|
||||
prompt("Please type VM name", "Error");
|
||||
} else if (upBw.getText() == null || upBw.getText().length() < 1) {
|
||||
prompt("Please enter uplink BW", "Error");
|
||||
} else if (downBw.getText() == null || downBw.getText().length() < 1) {
|
||||
prompt("Please enter downlink BW", "Error");
|
||||
} else if (mips.getText() == null || mips.getText().length() < 1) {
|
||||
prompt("Please enter MIPS", "Error");
|
||||
} else if (ram.getText() == null || ram.getText().length() < 1) {
|
||||
prompt("Please enter RAM", "Error");
|
||||
} else if (level.getText() == null || level.getText().length() < 1) {
|
||||
prompt("Please enter Level", "Error");
|
||||
} else if (rate.getText() == null || rate.getText().length() < 1) {
|
||||
prompt("Please enter Rate", "Error");
|
||||
}
|
||||
long upBw_=-1, downBw_=-1, mips_=-1; int ram_=-1, level_=-1;double rate_ = -1;
|
||||
try {
|
||||
upBw_ = Long.parseLong(upBw.getText());
|
||||
downBw_ = Long.parseLong(downBw.getText());
|
||||
mips_ = Long.parseLong(mips.getText());
|
||||
ram_ = Integer.parseInt(ram.getText());
|
||||
level_ = Integer.parseInt(level.getText());
|
||||
rate_ = Double.parseDouble(rate.getText());
|
||||
catchedError = false;
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
FogDeviceGui fogDevice = new FogDeviceGui(deviceName.getText().toString(), mips_, ram_, upBw_, downBw_, level_, rate_);
|
||||
graph.addNode(fogDevice);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
//springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
deviceNameLabel = new JLabel("Name: ");
|
||||
springPanel.add(deviceNameLabel);
|
||||
deviceName = new JTextField();
|
||||
deviceNameLabel.setLabelFor(deviceName);
|
||||
springPanel.add(deviceName);
|
||||
|
||||
levelLabel = new JLabel("Level: ");
|
||||
springPanel.add(levelLabel);
|
||||
level = new JTextField();
|
||||
levelLabel.setLabelFor(level);
|
||||
springPanel.add(level);
|
||||
|
||||
upBwLabel = new JLabel("Uplink Bw: ");
|
||||
springPanel.add(upBwLabel);
|
||||
upBw = new JTextField();
|
||||
upBwLabel.setLabelFor(upBw);
|
||||
springPanel.add(upBw);
|
||||
|
||||
downBwLabel = new JLabel("Downlink Bw: ");
|
||||
springPanel.add(downBwLabel);
|
||||
downBw = new JTextField();
|
||||
downBwLabel.setLabelFor(downBw);
|
||||
springPanel.add(downBw);
|
||||
|
||||
/** switch and host */
|
||||
|
||||
mipsLabel = new JLabel("Mips: ");
|
||||
springPanel.add(mipsLabel);
|
||||
mips = new JTextField();
|
||||
mipsLabel.setLabelFor(mips);
|
||||
springPanel.add(mips);
|
||||
|
||||
ramLabel = new JLabel("Ram: ");
|
||||
springPanel.add(ramLabel);
|
||||
ram = new JTextField();
|
||||
ramLabel.setLabelFor(ram);
|
||||
springPanel.add(ram);
|
||||
|
||||
rateLabel = new JLabel("Rate/MIPS: ");
|
||||
springPanel.add(rateLabel);
|
||||
rate = new JTextField();
|
||||
rateLabel.setLabelFor(rate);
|
||||
springPanel.add(rate);
|
||||
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
7, 2, //rows, cols
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
//updatePanel("core");
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddFogDevice.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
222
src/org/fog/gui/dialog/AddLink.java
Normal file
222
src/org/fog/gui/dialog/AddLink.java
Normal file
@@ -0,0 +1,222 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Label;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
import org.fog.gui.core.Edge;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Link;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.NodeCellRenderer;
|
||||
|
||||
/** A dialog to add a new edge */
|
||||
public class AddLink extends JDialog {
|
||||
private static final long serialVersionUID = 4794808969864918000L;
|
||||
|
||||
private final Graph graph;
|
||||
private JComboBox sourceNode;
|
||||
private JComboBox targetNode;
|
||||
private JTextField tfLatency;
|
||||
|
||||
|
||||
public AddLink(final Graph graph, final JFrame frame) {
|
||||
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanel(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Link");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(400, 200));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame); // must be called between pack and setVisible to work properly
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private JPanel createInputPanel() {
|
||||
|
||||
Component rigid = Box.createRigidArea(new Dimension(10, 0));
|
||||
|
||||
JPanel inputPanelWrapper = new JPanel();
|
||||
inputPanelWrapper.setLayout(new BoxLayout(inputPanelWrapper, BoxLayout.PAGE_AXIS));
|
||||
|
||||
JPanel inputPanel = new JPanel();
|
||||
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JPanel textAreaPanel = new JPanel();
|
||||
textAreaPanel.setLayout(new BoxLayout(textAreaPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
ComboBoxModel sourceNodeModel = new DefaultComboBoxModel(graph.getAdjacencyList().keySet().toArray());
|
||||
|
||||
sourceNodeModel.setSelectedItem(null);
|
||||
|
||||
sourceNode = new JComboBox(sourceNodeModel);
|
||||
targetNode = new JComboBox();
|
||||
sourceNode.setMaximumSize(sourceNode.getPreferredSize());
|
||||
sourceNode.setMinimumSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
sourceNode.setPreferredSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
targetNode.setMaximumSize(targetNode.getPreferredSize());
|
||||
targetNode.setMinimumSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
targetNode.setPreferredSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
|
||||
NodeCellRenderer renderer = new NodeCellRenderer();
|
||||
|
||||
sourceNode.setRenderer(renderer);
|
||||
targetNode.setRenderer(renderer);
|
||||
|
||||
sourceNode.addItemListener(new ItemListener() {
|
||||
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
// only display nodes which do not have already an edge
|
||||
|
||||
targetNode.removeAllItems();
|
||||
Node selectedNode = (Node) sourceNode.getSelectedItem();
|
||||
|
||||
if (selectedNode != null) {
|
||||
|
||||
List<Node> nodesToDisplay = new ArrayList<Node>();
|
||||
Set<Node> allNodes = graph.getAdjacencyList().keySet();
|
||||
|
||||
// get edged for selected node and throw out all target nodes where already an edge exists
|
||||
List<Edge> edgesForSelectedNode = graph.getAdjacencyList().get(selectedNode);
|
||||
Set<Node> nodesInEdges = new HashSet<Node>();
|
||||
for (Edge edge : edgesForSelectedNode) {
|
||||
nodesInEdges.add(edge.getNode());
|
||||
}
|
||||
if(!(selectedNode.getType().equals("SENSOR")||selectedNode.getType().equals("ACTUATOR")) || edgesForSelectedNode.size()==0){
|
||||
for (Node node : allNodes) {
|
||||
if((selectedNode.getType().equals("SENSOR")||selectedNode.getType().equals("ACTUATOR")) && !node.getType().equals("FOG_DEVICE"))
|
||||
continue;
|
||||
if (!node.equals(selectedNode) && !nodesInEdges.contains(node)) {
|
||||
nodesToDisplay.add(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ComboBoxModel targetNodeModel = new DefaultComboBoxModel(nodesToDisplay.toArray());
|
||||
targetNode.setModel(targetNodeModel);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
inputPanel.add(sourceNode);
|
||||
inputPanel.add(new Label("---->"));
|
||||
inputPanel.add(targetNode);
|
||||
inputPanel.add(Box.createHorizontalGlue());
|
||||
inputPanelWrapper.add(inputPanel);
|
||||
|
||||
textAreaPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
textAreaPanel.add(new JLabel("Latency: "));
|
||||
tfLatency = new JTextField();
|
||||
tfLatency.setMaximumSize(tfLatency.getPreferredSize());
|
||||
tfLatency.setMinimumSize(new Dimension(150, tfLatency.getPreferredSize().height));
|
||||
tfLatency.setPreferredSize(new Dimension(150, tfLatency.getPreferredSize().height));
|
||||
|
||||
textAreaPanel.add(tfLatency);
|
||||
textAreaPanel.add(Box.createHorizontalGlue());
|
||||
|
||||
inputPanelWrapper.add(textAreaPanel);
|
||||
inputPanelWrapper.add(Box.createVerticalGlue());
|
||||
|
||||
inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return inputPanelWrapper;
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
double latency = 0;
|
||||
boolean catchedError = false;
|
||||
|
||||
if (tfLatency.getText() == null || tfLatency.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please type latency", "Error");
|
||||
}else {
|
||||
try {
|
||||
latency = Double.valueOf(tfLatency.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Latency should be double type", "Error");
|
||||
}
|
||||
}
|
||||
|
||||
if (!catchedError) {
|
||||
if (sourceNode.getSelectedItem() == null || targetNode.getSelectedItem() == null) {
|
||||
prompt("Please select node", "Error");
|
||||
} else {
|
||||
|
||||
Node source = (Node) sourceNode.getSelectedItem();
|
||||
Node target = (Node) targetNode.getSelectedItem();
|
||||
|
||||
Link edge = new Link(target, latency);
|
||||
graph.addEdge(source, edge);
|
||||
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddLink.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
}
|
||||
217
src/org/fog/gui/dialog/AddPhysicalEdge.java
Normal file
217
src/org/fog/gui/dialog/AddPhysicalEdge.java
Normal file
@@ -0,0 +1,217 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Label;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
import org.fog.gui.core.Edge;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.NodeCellRenderer;
|
||||
|
||||
/** A dialog to add a new edge */
|
||||
public class AddPhysicalEdge extends JDialog {
|
||||
private static final long serialVersionUID = 4794808969864918000L;
|
||||
|
||||
private final Graph graph;
|
||||
private JComboBox sourceNode;
|
||||
private JComboBox targetNode;
|
||||
private JTextField tfLatency;
|
||||
|
||||
|
||||
public AddPhysicalEdge(final Graph graph, final JFrame frame) {
|
||||
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanel(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Physical Topology edge");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(400, 200));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame); // must be called between pack and setVisible to work properly
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private JPanel createInputPanel() {
|
||||
|
||||
Component rigid = Box.createRigidArea(new Dimension(10, 0));
|
||||
|
||||
JPanel inputPanelWrapper = new JPanel();
|
||||
inputPanelWrapper.setLayout(new BoxLayout(inputPanelWrapper, BoxLayout.PAGE_AXIS));
|
||||
|
||||
JPanel inputPanel = new JPanel();
|
||||
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JPanel textAreaPanel = new JPanel();
|
||||
textAreaPanel.setLayout(new BoxLayout(textAreaPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
ComboBoxModel sourceNodeModel = new DefaultComboBoxModel(graph.getAdjacencyList().keySet().toArray());
|
||||
|
||||
sourceNodeModel.setSelectedItem(null);
|
||||
|
||||
sourceNode = new JComboBox(sourceNodeModel);
|
||||
targetNode = new JComboBox();
|
||||
sourceNode.setMaximumSize(sourceNode.getPreferredSize());
|
||||
sourceNode.setMinimumSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
sourceNode.setPreferredSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
targetNode.setMaximumSize(targetNode.getPreferredSize());
|
||||
targetNode.setMinimumSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
targetNode.setPreferredSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
|
||||
NodeCellRenderer renderer = new NodeCellRenderer();
|
||||
|
||||
sourceNode.setRenderer(renderer);
|
||||
targetNode.setRenderer(renderer);
|
||||
|
||||
sourceNode.addItemListener(new ItemListener() {
|
||||
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
// only display nodes which do not have already an edge
|
||||
|
||||
targetNode.removeAllItems();
|
||||
Node selectedNode = (Node) sourceNode.getSelectedItem();
|
||||
|
||||
if (selectedNode != null) {
|
||||
|
||||
List<Node> nodesToDisplay = new ArrayList<Node>();
|
||||
Set<Node> allNodes = graph.getAdjacencyList().keySet();
|
||||
|
||||
// get edged for selected node and throw out all target nodes where already an edge exists
|
||||
List<Edge> edgesForSelectedNode = graph.getAdjacencyList().get(selectedNode);
|
||||
Set<Node> nodesInEdges = new HashSet<Node>();
|
||||
for (Edge edge : edgesForSelectedNode) {
|
||||
nodesInEdges.add(edge.getNode());
|
||||
}
|
||||
|
||||
for (Node node : allNodes) {
|
||||
if (!node.equals(selectedNode) && !nodesInEdges.contains(node)) {
|
||||
nodesToDisplay.add(node);
|
||||
}
|
||||
}
|
||||
|
||||
ComboBoxModel targetNodeModel = new DefaultComboBoxModel(nodesToDisplay.toArray());
|
||||
targetNode.setModel(targetNodeModel);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
inputPanel.add(sourceNode);
|
||||
inputPanel.add(new Label(" <20><>"));
|
||||
inputPanel.add(targetNode);
|
||||
inputPanel.add(Box.createHorizontalGlue());
|
||||
inputPanelWrapper.add(inputPanel);
|
||||
|
||||
textAreaPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
textAreaPanel.add(new JLabel("Latency: "));
|
||||
tfLatency = new JTextField();
|
||||
tfLatency.setMaximumSize(tfLatency.getPreferredSize());
|
||||
tfLatency.setMinimumSize(new Dimension(150, tfLatency.getPreferredSize().height));
|
||||
tfLatency.setPreferredSize(new Dimension(150, tfLatency.getPreferredSize().height));
|
||||
|
||||
textAreaPanel.add(tfLatency);
|
||||
textAreaPanel.add(Box.createHorizontalGlue());
|
||||
|
||||
inputPanelWrapper.add(textAreaPanel);
|
||||
inputPanelWrapper.add(Box.createVerticalGlue());
|
||||
|
||||
inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return inputPanelWrapper;
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
double latency = 0;
|
||||
boolean catchedError = false;
|
||||
|
||||
if (tfLatency.getText() == null || tfLatency.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please type latency", "Error");
|
||||
}else {
|
||||
try {
|
||||
latency = Double.valueOf(tfLatency.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Latency should be double type", "Error");
|
||||
}
|
||||
}
|
||||
|
||||
if (!catchedError) {
|
||||
if (sourceNode.getSelectedItem() == null || targetNode.getSelectedItem() == null) {
|
||||
prompt("Please select node", "Error");
|
||||
} else {
|
||||
|
||||
Node source = (Node) sourceNode.getSelectedItem();
|
||||
Node target = (Node) targetNode.getSelectedItem();
|
||||
|
||||
Edge edge = new Edge(target, latency);
|
||||
graph.addEdge(source, edge);
|
||||
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddPhysicalEdge.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
}
|
||||
290
src/org/fog/gui/dialog/AddPhysicalNode.java
Normal file
290
src/org/fog/gui/dialog/AddPhysicalNode.java
Normal file
@@ -0,0 +1,290 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
import org.fog.gui.core.SwitchNode;
|
||||
import org.fog.gui.core.HostNode;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
public class AddPhysicalNode extends JDialog {
|
||||
private static final long serialVersionUID = -5116677861770319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JLabel lName;
|
||||
private JLabel lType;
|
||||
private JLabel lBw;
|
||||
private JLabel lop1;
|
||||
private JLabel lop2;
|
||||
private JLabel lop3;
|
||||
private JLabel lop4;
|
||||
|
||||
private JTextField tfName;
|
||||
private JComboBox cType;
|
||||
private JTextField tfBw;
|
||||
private JTextField top1;
|
||||
private JTextField top2;
|
||||
private JTextField top3;
|
||||
private JTextField top4;
|
||||
|
||||
|
||||
public AddPhysicalNode(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Physical Node");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 380));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (tfName.getText() == null || tfName.getText().length() < 1) {
|
||||
prompt("Please type VM name", "Error");
|
||||
} else if (tfBw.getText() == null || tfBw.getText().length() < 1) {
|
||||
prompt("Please type VM Bw", "Error");
|
||||
} else if(cType.getSelectedIndex() < 0) {
|
||||
prompt("Please type VM Type", "Error");
|
||||
}else{
|
||||
String type = (String)cType.getSelectedItem();
|
||||
if("host"==getType(type)){
|
||||
if (top1.getText() == null || top1.getText().length() < 1) {
|
||||
prompt("Please type pes", "Error");
|
||||
} else if (top2.getText() == null || top2.getText().length() < 1) {
|
||||
prompt("Please type VM mips", "Error");
|
||||
} else if (top3.getText() == null || top3.getText().length() < 1) {
|
||||
prompt("Please type VM RAM", "Error");
|
||||
} else if (top4.getText() == null || top4.getText().length() < 1) {
|
||||
prompt("Please type VM Storage", "Error");
|
||||
} else {
|
||||
long t1 = 0;
|
||||
long t2 = 0;
|
||||
int t3 = 0;
|
||||
long t4 = 0;
|
||||
long t5 = 0;
|
||||
try {
|
||||
t1 = Long.parseLong(top1.getText());
|
||||
t2 = Long.parseLong(top2.getText());
|
||||
t3 = Integer.parseInt(top3.getText());
|
||||
t4 = Long.parseLong(top4.getText());
|
||||
t5 = Long.parseLong(tfBw.getText());
|
||||
catchedError = false;
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
Node node = new HostNode(tfName.getText().toString(), type, t1, t2, t3, t4, t5);
|
||||
graph.addNode(node);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}else if("switch"==getType(type)){
|
||||
if (top1.getText() == null || top1.getText().length() < 1) {
|
||||
prompt("Please type Iops", "Error");
|
||||
} else if (top2.getText() == null || top2.getText().length() < 1) {
|
||||
prompt("Please type upports", "Error");
|
||||
} else if (top3.getText() == null || top3.getText().length() < 1) {
|
||||
prompt("Please type VM downports", "Error");
|
||||
} else {
|
||||
long t1 = 0;
|
||||
int t2 = 0;
|
||||
int t3 = 0;
|
||||
long t4 = 0;
|
||||
try {
|
||||
t1 = Long.parseLong(top1.getText());
|
||||
t2 = Integer.parseInt(top2.getText());
|
||||
t3 = Integer.parseInt(top3.getText());
|
||||
t4 = Long.parseLong(tfBw.getText());
|
||||
catchedError = false;
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
Node node = new SwitchNode(tfName.getText().toString(), type, t1, t2, t3, t4);
|
||||
graph.addNode(node);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private void updatePanel(String type){
|
||||
switch(type){
|
||||
case "core":
|
||||
case "edge":
|
||||
lop1.setText("Iops: ");
|
||||
lop2.setText("Upports: ");
|
||||
lop3.setText("Downports: ");
|
||||
lop4.setVisible(false);
|
||||
|
||||
top1.setText("");
|
||||
top2.setText("");
|
||||
top3.setText("");
|
||||
top4.setVisible(false);
|
||||
break;
|
||||
|
||||
case "host":
|
||||
lop1.setText("Pes: ");
|
||||
lop2.setText("Mips: ");
|
||||
lop3.setText("Ram: ");
|
||||
lop4.setVisible(true);
|
||||
lop4.setText("Storage: ");
|
||||
|
||||
top1.setText("");
|
||||
top2.setText("");
|
||||
top3.setText("");
|
||||
top4.setVisible(true);
|
||||
top4.setText("");
|
||||
break;
|
||||
}
|
||||
}
|
||||
private String getType(String type){
|
||||
if("core"==type || "edge"==type){
|
||||
return "switch";
|
||||
} else if("host"==type){
|
||||
return "host";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
private JPanel createInputPanelArea() {
|
||||
String[] vmType = {"core","edge","host"};
|
||||
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
lName = new JLabel("Name: ");
|
||||
springPanel.add(lName);
|
||||
tfName = new JTextField();
|
||||
lName.setLabelFor(tfName);
|
||||
springPanel.add(tfName);
|
||||
|
||||
lType = new JLabel("Type: "); //, JLabel.TRAILING);
|
||||
springPanel.add(lType);
|
||||
cType = new JComboBox(vmType);
|
||||
lType.setLabelFor(cType);
|
||||
cType.setSelectedIndex(0);
|
||||
cType.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
JComboBox ctype = (JComboBox)e.getSource();
|
||||
String item = (String)ctype.getSelectedItem();
|
||||
updatePanel(item);
|
||||
}
|
||||
});
|
||||
springPanel.add(cType);
|
||||
|
||||
lBw = new JLabel("Bw: ");
|
||||
springPanel.add(lBw);
|
||||
tfBw = new JTextField();
|
||||
lBw.setLabelFor(tfBw);
|
||||
springPanel.add(tfBw);
|
||||
|
||||
/** switch and host */
|
||||
lop1 = new JLabel("Pes: ");
|
||||
springPanel.add(lop1);
|
||||
top1 = new JTextField();
|
||||
lop1.setLabelFor(top1);
|
||||
springPanel.add(top1);
|
||||
|
||||
lop2 = new JLabel("Mips: ");
|
||||
springPanel.add(lop2);
|
||||
top2 = new JTextField();
|
||||
lop2.setLabelFor(top2);
|
||||
springPanel.add(top2);
|
||||
|
||||
lop3 = new JLabel("Ram: ");
|
||||
springPanel.add(lop3);
|
||||
top3 = new JTextField();
|
||||
lop3.setLabelFor(top3);
|
||||
springPanel.add(top3);
|
||||
|
||||
lop4 = new JLabel("Storage: ");
|
||||
springPanel.add(lop4);
|
||||
top4 = new JTextField();
|
||||
lop4.setLabelFor(top4);
|
||||
springPanel.add(top4);
|
||||
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
7, 2, //rows, cols
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
updatePanel("core");
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddPhysicalNode.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
270
src/org/fog/gui/dialog/AddSensor.java
Normal file
270
src/org/fog/gui/dialog/AddSensor.java
Normal file
@@ -0,0 +1,270 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.entities.Sensor;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.SensorGui;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
public class AddSensor extends JDialog {
|
||||
private static final long serialVersionUID = -511667786177319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JTextField sensorName;
|
||||
private JTextField sensorType;
|
||||
private JComboBox distribution;
|
||||
private JTextField uniformLowerBound;
|
||||
private JTextField uniformUpperBound;
|
||||
private JTextField deterministicValue;
|
||||
private JTextField normalMean;
|
||||
private JTextField normalStdDev;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param frame the parent frame
|
||||
*/
|
||||
public AddSensor(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Sensor");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 400));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (sensorName.getText() == null || sensorName.getText().length() < 1) {
|
||||
prompt("Please type Sensor name", "Error");
|
||||
} else if (sensorType.getText() == null || sensorType.getText().length() < 1) {
|
||||
prompt("Please type Sensor Type", "Error");
|
||||
} else if (distribution.getSelectedIndex() < 0) {
|
||||
prompt("Please select Emission time distribution", "Error");
|
||||
} else {
|
||||
double normalMean_ = -1;
|
||||
double normalStdDev_ = -1;
|
||||
double uniformLow_ = -1;
|
||||
double uniformUp_ = -1;
|
||||
double deterministicVal_ = -1;
|
||||
String _sensorType = sensorType.getText();
|
||||
String dist = (String)distribution.getSelectedItem();
|
||||
if(dist.equals("Normal")){
|
||||
try {
|
||||
normalMean_ = Double.parseDouble(normalMean.getText());
|
||||
normalStdDev_ = Double.parseDouble(normalStdDev.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
SensorGui sensor = new SensorGui(sensorName.getText().toString(), _sensorType, (String)distribution.getSelectedItem(),
|
||||
normalMean_, normalStdDev_, uniformLow_, uniformUp_, deterministicVal_);
|
||||
graph.addNode(sensor);
|
||||
setVisible(false);
|
||||
}
|
||||
} else if(dist.equals("Uniform")){
|
||||
try {
|
||||
uniformLow_ = Double.parseDouble(uniformLowerBound.getText());
|
||||
uniformUp_ = Double.parseDouble(uniformUpperBound.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
SensorGui sensor = new SensorGui(sensorName.getText().toString(), _sensorType, (String)distribution.getSelectedItem(),
|
||||
normalMean_, normalStdDev_, uniformLow_, uniformUp_, deterministicVal_);
|
||||
graph.addNode(sensor);
|
||||
setVisible(false);
|
||||
}
|
||||
} else if(dist.equals("Deterministic")){
|
||||
try {
|
||||
deterministicVal_ = Double.parseDouble(deterministicValue.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
SensorGui sensor = new SensorGui(sensorName.getText().toString(), _sensorType, (String)distribution.getSelectedItem(),
|
||||
normalMean_, normalStdDev_, uniformLow_, uniformUp_, deterministicVal_);
|
||||
graph.addNode(sensor);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
String[] distributionType = {"Normal", "Uniform", "Deterministic"};
|
||||
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
JLabel lName = new JLabel("Name: ");
|
||||
springPanel.add(lName);
|
||||
sensorName = new JTextField();
|
||||
lName.setLabelFor(sensorName);
|
||||
springPanel.add(sensorName);
|
||||
|
||||
JLabel lType = new JLabel("Type: ");
|
||||
springPanel.add(lType);
|
||||
sensorType = new JTextField();
|
||||
lType.setLabelFor(sensorType);
|
||||
springPanel.add(sensorType);
|
||||
|
||||
JLabel distLabel = new JLabel("Distribution Type: ", JLabel.TRAILING);
|
||||
springPanel.add(distLabel);
|
||||
distribution = new JComboBox(distributionType);
|
||||
distLabel.setLabelFor(distribution);
|
||||
distribution.setSelectedIndex(-1);
|
||||
distribution.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
JComboBox ctype = (JComboBox)e.getSource();
|
||||
String item = (String)ctype.getSelectedItem();
|
||||
updatePanel(item);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
springPanel.add(distribution);
|
||||
|
||||
JLabel normalMeanLabel = new JLabel("Mean: ");
|
||||
springPanel.add(normalMeanLabel);
|
||||
normalMean = new JTextField();
|
||||
normalMeanLabel.setLabelFor(normalMean);
|
||||
springPanel.add(normalMean);
|
||||
|
||||
JLabel normalStdDevLabel = new JLabel("StdDev: ");
|
||||
springPanel.add(normalStdDevLabel);
|
||||
normalStdDev = new JTextField();
|
||||
normalStdDevLabel.setLabelFor(normalStdDev);
|
||||
springPanel.add(normalStdDev);
|
||||
|
||||
JLabel uniformLowLabel = new JLabel("Min: ");
|
||||
springPanel.add(uniformLowLabel);
|
||||
uniformLowerBound = new JTextField();
|
||||
uniformLowLabel.setLabelFor(uniformLowerBound);
|
||||
springPanel.add(uniformLowerBound);
|
||||
|
||||
JLabel uniformUpLabel = new JLabel("Max: ");
|
||||
springPanel.add(uniformUpLabel);
|
||||
uniformUpperBound = new JTextField();
|
||||
uniformUpLabel.setLabelFor(uniformUpperBound);
|
||||
springPanel.add(uniformUpperBound);
|
||||
|
||||
JLabel deterministicValueLabel = new JLabel("Value: ");
|
||||
springPanel.add(deterministicValueLabel);
|
||||
deterministicValue = new JTextField();
|
||||
uniformLowLabel.setLabelFor(deterministicValue);
|
||||
springPanel.add(deterministicValue);
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
8, 2, //rows, columns
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
protected void updatePanel(String item) {
|
||||
switch(item){
|
||||
case "Normal":
|
||||
normalMean.setVisible(true);
|
||||
normalStdDev.setVisible(true);
|
||||
uniformLowerBound.setVisible(false);
|
||||
uniformUpperBound.setVisible(false);
|
||||
deterministicValue.setVisible(false);
|
||||
break;
|
||||
case "Uniform":
|
||||
normalMean.setVisible(false);
|
||||
normalStdDev.setVisible(false);
|
||||
uniformLowerBound.setVisible(true);
|
||||
uniformUpperBound.setVisible(true);
|
||||
deterministicValue.setVisible(false);
|
||||
break;
|
||||
case "Deterministic":
|
||||
normalMean.setVisible(false);
|
||||
normalStdDev.setVisible(false);
|
||||
uniformLowerBound.setVisible(false);
|
||||
uniformUpperBound.setVisible(false);
|
||||
deterministicValue.setVisible(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddSensor.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
134
src/org/fog/gui/dialog/AddSensorModule.java
Normal file
134
src/org/fog/gui/dialog/AddSensorModule.java
Normal file
@@ -0,0 +1,134 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.SensorModule;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
public class AddSensorModule extends JDialog {
|
||||
private static final long serialVersionUID = -5116677861770319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JTextField sensorType;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param frame the parent frame
|
||||
*/
|
||||
public AddSensorModule(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Sensor Module");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 400));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (sensorType.getText() == null || sensorType.getText().length() < 1) {
|
||||
prompt("Please entyer Sensor Type", "Error");
|
||||
} else {
|
||||
try {
|
||||
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
Node node = new SensorModule(sensorType.getText().toString());
|
||||
graph.addNode(node);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
JLabel lName = new JLabel("Sensor Type: ");
|
||||
springPanel.add(lName);
|
||||
sensorType = new JTextField();
|
||||
lName.setLabelFor(sensorType);
|
||||
springPanel.add(sensorType);
|
||||
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
1, 2, //rows, columns
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddSensorModule.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
241
src/org/fog/gui/dialog/AddVirtualEdge.java
Normal file
241
src/org/fog/gui/dialog/AddVirtualEdge.java
Normal file
@@ -0,0 +1,241 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Label;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
import org.fog.gui.core.Edge;
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.Node;
|
||||
import org.fog.gui.core.NodeCellRenderer;
|
||||
|
||||
|
||||
|
||||
/** A dialog to add a new edge */
|
||||
public class AddVirtualEdge extends JDialog {
|
||||
private static final long serialVersionUID = 4794808969864918000L;
|
||||
|
||||
private final Graph graph;
|
||||
private JComboBox sourceNode;
|
||||
private JComboBox targetNode;
|
||||
private JTextField tfName;
|
||||
private JTextField tfBandwidth;
|
||||
|
||||
|
||||
public AddVirtualEdge(final Graph graph, final JFrame frame) {
|
||||
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanel(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Virtual Topology edge");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(400, 250));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame); // must be called between pack and setVisible to work properly
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private JPanel createInputPanel() {
|
||||
|
||||
Component rigid = Box.createRigidArea(new Dimension(10, 0));
|
||||
|
||||
JPanel inputPanelWrapper = new JPanel();
|
||||
inputPanelWrapper.setLayout(new BoxLayout(inputPanelWrapper, BoxLayout.PAGE_AXIS));
|
||||
|
||||
JPanel inputPanel = new JPanel();
|
||||
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JPanel textAreaPanel = new JPanel();
|
||||
textAreaPanel.setLayout(new BoxLayout(textAreaPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JPanel textAreaPanel2 = new JPanel();
|
||||
textAreaPanel2.setLayout(new BoxLayout(textAreaPanel2, BoxLayout.LINE_AXIS));
|
||||
|
||||
ComboBoxModel sourceNodeModel = new DefaultComboBoxModel(graph.getAdjacencyList().keySet().toArray());
|
||||
|
||||
sourceNodeModel.setSelectedItem(null);
|
||||
|
||||
sourceNode = new JComboBox(sourceNodeModel);
|
||||
targetNode = new JComboBox();
|
||||
sourceNode.setMaximumSize(sourceNode.getPreferredSize());
|
||||
sourceNode.setMinimumSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
sourceNode.setPreferredSize(new Dimension(150, sourceNode.getPreferredSize().height));
|
||||
targetNode.setMaximumSize(targetNode.getPreferredSize());
|
||||
targetNode.setMinimumSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
targetNode.setPreferredSize(new Dimension(150, targetNode.getPreferredSize().height));
|
||||
|
||||
NodeCellRenderer renderer = new NodeCellRenderer();
|
||||
|
||||
sourceNode.setRenderer(renderer);
|
||||
targetNode.setRenderer(renderer);
|
||||
|
||||
sourceNode.addItemListener(new ItemListener() {
|
||||
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
// only display nodes which do not have already an edge
|
||||
|
||||
targetNode.removeAllItems();
|
||||
Node selectedNode = (Node) sourceNode.getSelectedItem();
|
||||
|
||||
if (selectedNode != null) {
|
||||
|
||||
List<Node> nodesToDisplay = new ArrayList<Node>();
|
||||
Set<Node> allNodes = graph.getAdjacencyList().keySet();
|
||||
|
||||
// get edged for selected node and throw out all target nodes where already an edge exists
|
||||
List<Edge> edgesForSelectedNode = graph.getAdjacencyList().get(selectedNode);
|
||||
Set<Node> nodesInEdges = new HashSet<Node>();
|
||||
for (Edge edge : edgesForSelectedNode) {
|
||||
nodesInEdges.add(edge.getNode());
|
||||
}
|
||||
|
||||
for (Node node : allNodes) {
|
||||
if (!node.equals(selectedNode) && !nodesInEdges.contains(node)) {
|
||||
nodesToDisplay.add(node);
|
||||
}
|
||||
}
|
||||
|
||||
ComboBoxModel targetNodeModel = new DefaultComboBoxModel(nodesToDisplay.toArray());
|
||||
targetNode.setModel(targetNodeModel);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
inputPanel.add(sourceNode);
|
||||
// inputPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
inputPanel.add(new Label(" <20><>"));
|
||||
inputPanel.add(targetNode);
|
||||
inputPanel.add(Box.createHorizontalGlue());
|
||||
inputPanelWrapper.add(inputPanel);
|
||||
|
||||
textAreaPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
textAreaPanel.add(new JLabel("Edge Name: "));
|
||||
tfName = new JTextField();
|
||||
tfName.setMaximumSize(tfName.getPreferredSize());
|
||||
tfName.setMinimumSize(new Dimension(180, tfName.getPreferredSize().height));
|
||||
tfName.setPreferredSize(new Dimension(180, tfName.getPreferredSize().height));
|
||||
textAreaPanel.add(tfName);
|
||||
textAreaPanel.add(Box.createHorizontalGlue());
|
||||
inputPanelWrapper.add(textAreaPanel);
|
||||
inputPanelWrapper.add(Box.createVerticalGlue());
|
||||
|
||||
textAreaPanel2.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
textAreaPanel2.add(new JLabel("Bandwidth: "));
|
||||
tfBandwidth = new JTextField();
|
||||
tfBandwidth.setMaximumSize(tfBandwidth.getPreferredSize());
|
||||
tfBandwidth.setMinimumSize(new Dimension(180, tfBandwidth.getPreferredSize().height));
|
||||
tfBandwidth.setPreferredSize(new Dimension(180, tfBandwidth.getPreferredSize().height));
|
||||
textAreaPanel2.add(tfBandwidth);
|
||||
textAreaPanel2.add(Box.createHorizontalGlue());
|
||||
inputPanelWrapper.add(textAreaPanel2);
|
||||
inputPanelWrapper.add(Box.createVerticalGlue());
|
||||
|
||||
inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return inputPanelWrapper;
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
String name = "default";
|
||||
long bandwidth = 0;
|
||||
boolean catchedError = false;
|
||||
|
||||
if (tfName.getText() == null || tfName.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please type Edge Name", "Error");
|
||||
}else {
|
||||
name = (String)tfName.getText();
|
||||
}
|
||||
|
||||
if (tfBandwidth.getText() == null || tfBandwidth.getText().isEmpty()) {
|
||||
catchedError = true;
|
||||
prompt("Please type Bandwidth", "Error");
|
||||
}else {
|
||||
try {
|
||||
bandwidth = Long.valueOf(tfBandwidth.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Bandwidth should be long type", "Error");
|
||||
}
|
||||
}
|
||||
|
||||
if (!catchedError) {
|
||||
if (sourceNode.getSelectedItem() == null || targetNode.getSelectedItem() == null) {
|
||||
prompt("Please select node", "Error");
|
||||
} else {
|
||||
|
||||
Node source = (Node) sourceNode.getSelectedItem();
|
||||
Node target = (Node) targetNode.getSelectedItem();
|
||||
|
||||
Edge edge = new Edge(target, name, bandwidth);
|
||||
graph.addEdge(source, edge);
|
||||
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddVirtualEdge.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
}
|
||||
198
src/org/fog/gui/dialog/AddVirtualNode.java
Normal file
198
src/org/fog/gui/dialog/AddVirtualNode.java
Normal file
@@ -0,0 +1,198 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpringLayout;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.fog.gui.core.Graph;
|
||||
import org.fog.gui.core.SpringUtilities;
|
||||
import org.fog.gui.core.VmNode;
|
||||
import org.fog.gui.core.Node;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
public class AddVirtualNode extends JDialog {
|
||||
private static final long serialVersionUID = -5116677861770319577L;
|
||||
|
||||
private final Graph graph;
|
||||
|
||||
private JTextField tfName;
|
||||
private JComboBox cType;
|
||||
private JTextField tfSize;
|
||||
private JTextField tfPes;
|
||||
private JTextField tfMips;
|
||||
private JTextField tfRam;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param frame the parent frame
|
||||
*/
|
||||
public AddVirtualNode(final Graph graph, final JFrame frame) {
|
||||
this.graph = graph;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(createInputPanelArea(), BorderLayout.CENTER);
|
||||
add(createButtonPanel(), BorderLayout.PAGE_END);
|
||||
// show dialog
|
||||
setTitle("Add Virtual Node");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(350, 400));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel() {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||
|
||||
JButton okBtn = new JButton("Ok");
|
||||
JButton cancelBtn = new JButton("Cancel");
|
||||
|
||||
cancelBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
okBtn.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean catchedError = false;
|
||||
if (tfName.getText() == null || tfName.getText().length() < 1) {
|
||||
prompt("Please type VM name", "Error");
|
||||
} else if (cType.getSelectedIndex() < 0) {
|
||||
prompt("Please select VM type", "Error");
|
||||
} else if (tfSize.getText() == null || tfSize.getText().length() < 1) {
|
||||
prompt("Please type VM size", "Error");
|
||||
} else if (tfPes.getText() == null || tfPes.getText().length() < 1) {
|
||||
prompt("Please type pes", "Error");
|
||||
} else if (tfMips.getText() == null || tfMips.getText().length() < 1) {
|
||||
prompt("Please type VM mips", "Error");
|
||||
} else if (tfRam.getText() == null || tfRam.getText().length() < 1) {
|
||||
prompt("Please type VM RAM", "Error");
|
||||
} else {
|
||||
long t1 = 0;
|
||||
int t2 = 0;
|
||||
long t3 = 0;
|
||||
int t4 = 0;
|
||||
try {
|
||||
t1 = Long.parseLong(tfSize.getText());
|
||||
t2 = Integer.parseInt(tfPes.getText());
|
||||
t3 = Long.parseLong(tfMips.getText());
|
||||
t4 = Integer.parseInt(tfRam.getText());
|
||||
} catch (NumberFormatException e1) {
|
||||
catchedError = true;
|
||||
prompt("Input should be numerical character", "Error");
|
||||
}
|
||||
if(!catchedError){
|
||||
Node node = new VmNode(tfName.getText().toString(), (String)cType.getSelectedItem(),
|
||||
t1, t2, t3, t4);
|
||||
graph.addNode(node);
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(Box.createHorizontalGlue());
|
||||
buttonPanel.add(okBtn);
|
||||
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
|
||||
buttonPanel.add(cancelBtn);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
private JPanel createInputPanelArea() {
|
||||
String[] vmType = {"vm"};
|
||||
|
||||
//Create and populate the panel.
|
||||
JPanel springPanel = new JPanel(new SpringLayout());
|
||||
springPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
JLabel lName = new JLabel("Name: ");
|
||||
springPanel.add(lName);
|
||||
tfName = new JTextField();
|
||||
lName.setLabelFor(tfName);
|
||||
springPanel.add(tfName);
|
||||
|
||||
JLabel lType = new JLabel("Type: ", JLabel.TRAILING);
|
||||
springPanel.add(lType);
|
||||
cType = new JComboBox(vmType);
|
||||
lType.setLabelFor(cType);
|
||||
cType.setSelectedIndex(-1);
|
||||
cType.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
|
||||
}
|
||||
});
|
||||
springPanel.add(cType);
|
||||
|
||||
JLabel lSize = new JLabel("Size: ");
|
||||
springPanel.add(lSize);
|
||||
tfSize = new JTextField();
|
||||
lSize.setLabelFor(tfSize);
|
||||
springPanel.add(tfSize);
|
||||
|
||||
JLabel lPes = new JLabel("Pes: ");
|
||||
springPanel.add(lPes);
|
||||
tfPes = new JTextField();
|
||||
lPes.setLabelFor(tfPes);
|
||||
springPanel.add(tfPes);
|
||||
|
||||
JLabel lMips = new JLabel("Mips: ");
|
||||
springPanel.add(lMips);
|
||||
tfMips = new JTextField();
|
||||
lMips.setLabelFor(tfMips);
|
||||
springPanel.add(tfMips);
|
||||
|
||||
JLabel lRam = new JLabel("Ram: ");
|
||||
springPanel.add(lRam);
|
||||
tfRam = new JTextField();
|
||||
lRam.setLabelFor(tfRam);
|
||||
springPanel.add(tfRam);
|
||||
|
||||
//Lay out the panel.
|
||||
SpringUtilities.makeCompactGrid(springPanel,
|
||||
6, 2, //rows, columns
|
||||
6, 6, //initX, initY
|
||||
6, 6); //xPad, yPad
|
||||
return springPanel;
|
||||
}
|
||||
|
||||
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||
while (keys.hasMoreElements()) {
|
||||
Object key = keys.nextElement();
|
||||
Object value = UIManager.get (key);
|
||||
if (value != null && value instanceof javax.swing.plaf.FontUIResource)
|
||||
UIManager.put (key, f);
|
||||
}
|
||||
}
|
||||
|
||||
private void prompt(String msg, String type){
|
||||
JOptionPane.showMessageDialog(AddVirtualNode.this, msg, type, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
174
src/org/fog/gui/dialog/SDNRun.java
Normal file
174
src/org/fog/gui/dialog/SDNRun.java
Normal file
@@ -0,0 +1,174 @@
|
||||
package org.fog.gui.dialog;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.SwingWorker;
|
||||
import javax.swing.Timer;
|
||||
|
||||
import org.cloudbus.cloudsim.sdn.graph.example.GraphicSDNExample;
|
||||
|
||||
public class SDNRun extends JDialog {
|
||||
private static final long serialVersionUID = -8313194085507492462L;
|
||||
|
||||
private String physicalTopologyFile = ""; //physical
|
||||
private String deploymentFile = ""; //virtual
|
||||
private String workloads_background = ""; //workload
|
||||
private String workloads = ""; //workload
|
||||
|
||||
private JPanel panel;
|
||||
private JScrollPane pane;
|
||||
private JTextArea outputArea;
|
||||
private JLabel imageLabel;
|
||||
private JLabel msgLabel;
|
||||
private JComponent space;
|
||||
private int counter = 0;
|
||||
private Timer timer;
|
||||
|
||||
private GraphicSDNExample sdn;
|
||||
|
||||
public SDNRun(final String phy, final String vir, final String wlbk, final String wl, final JFrame frame){
|
||||
physicalTopologyFile = phy;
|
||||
deploymentFile = vir;
|
||||
workloads_background = wlbk;
|
||||
workloads = wl;
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||
panel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
|
||||
|
||||
initUI();
|
||||
run();
|
||||
add(panel, BorderLayout.CENTER);
|
||||
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE );
|
||||
setTitle("Run Simulation");
|
||||
setModal(true);
|
||||
setPreferredSize(new Dimension(900, 600));
|
||||
setResizable(false);
|
||||
pack();
|
||||
setLocationRelativeTo(frame); // must be called between pack and setVisible to work properly
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
private void initUI(){
|
||||
ImageIcon ii = new ImageIcon(this.getClass().getResource("/src/1.gif"));
|
||||
imageLabel = new JLabel(ii);
|
||||
imageLabel.setAlignmentX(CENTER_ALIGNMENT);
|
||||
msgLabel = new JLabel("Simulation is executing");
|
||||
msgLabel.setAlignmentX(CENTER_ALIGNMENT);
|
||||
space = (JComponent)Box.createRigidArea(new Dimension(0, 200));
|
||||
panel.add(space);
|
||||
panel.add(msgLabel);
|
||||
panel.add(imageLabel);
|
||||
|
||||
pane = new JScrollPane();
|
||||
outputArea = new JTextArea();
|
||||
|
||||
outputArea.setLineWrap(true);
|
||||
outputArea.setWrapStyleWord(true);
|
||||
outputArea.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
|
||||
outputArea.setEditable(false);
|
||||
//outputArea.setText("wo ai bei jin tian an men");
|
||||
//readFile(physicalTopologyFile, outputArea);
|
||||
|
||||
pane.getViewport().add(outputArea);
|
||||
panel.add(pane);
|
||||
pane.setVisible(false);
|
||||
}
|
||||
|
||||
private void run(){
|
||||
|
||||
sdn = new GraphicSDNExample(physicalTopologyFile, deploymentFile, workloads_background, workloads, outputArea);
|
||||
|
||||
SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
|
||||
protected Boolean doInBackground() throws Exception {
|
||||
boolean success = false;
|
||||
success = sdn.simulate();
|
||||
if(success){
|
||||
sdn.output();
|
||||
append("<<<<<<<<<< Simulation completed >>>>>>>>>");
|
||||
}else{
|
||||
append("<<<<<<<<<< Running Error >>>>>>>>>>");
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
protected void done() {
|
||||
boolean status;
|
||||
try {
|
||||
status = get();
|
||||
panel.remove(space);
|
||||
panel.remove(imageLabel);
|
||||
panel.remove(msgLabel);
|
||||
pane.setVisible(true);
|
||||
panel.revalidate();
|
||||
panel.repaint();
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
|
||||
} catch (ExecutionException e) {
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
worker.execute();
|
||||
}
|
||||
|
||||
private void append(String content){
|
||||
outputArea.append(content+"\n");
|
||||
}
|
||||
|
||||
/** below only used for testing reading file to textarea */
|
||||
private void startTest(){
|
||||
ActionListener updateProBar = new ActionListener() {
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
if(counter>=100){
|
||||
timer.stop();
|
||||
panel.remove(space);
|
||||
panel.remove(imageLabel);
|
||||
panel.remove(msgLabel);
|
||||
pane.setVisible(true);
|
||||
panel.revalidate();
|
||||
panel.repaint();
|
||||
|
||||
}else{
|
||||
counter +=2;
|
||||
}
|
||||
}
|
||||
};
|
||||
timer = new Timer(50, updateProBar);
|
||||
timer.start();
|
||||
}
|
||||
private void readFile(String path, JTextArea area) {
|
||||
|
||||
try{
|
||||
FileReader reader = new FileReader(path);
|
||||
BufferedReader br = new BufferedReader(reader);
|
||||
area.read( br, null );
|
||||
br.close();
|
||||
area.requestFocus();
|
||||
}catch(Exception e2) {
|
||||
System.out.println(e2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user