/*
* Copyright (c) 2010-2012 Thiago T. Sá
*
* This file is part of CloudReports.
*
* CloudReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CloudReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For more information about your rights as a user of CloudReports,
* refer to the LICENSE file or see <http://www.gnu.org/licenses/>.
*/
package cloudreports.gui.datacenters;
import cloudreports.dao.DatacenterRegistryDAO;
import cloudreports.dao.HostRegistryDAO;
import cloudreports.dao.NetworkMapEntryDAO;
import cloudreports.enums.AllocationPolicy;
import cloudreports.gui.Dialog;
import cloudreports.gui.EditLink;
import cloudreports.gui.MainView;
import cloudreports.models.DatacenterRegistry;
import cloudreports.models.HostRegistry;
import cloudreports.models.NetworkMapEntry;
import cloudreports.models.SanStorageRegistry;
import java.text.DecimalFormat;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
/**
* The SpecificDatacenterView form.
* Most of its code is generated automatically by the NetBeans IDE.
*
* @author Thiago T. Sá
* @since 1.0
*/
public class SpecificDatacenterView extends javax.swing.JPanel {
/** The datacenter registry whose information is being displayed. */
private DatacenterRegistry dcr;
/** An instance of datacenter registry DAO. */
private DatacenterRegistryDAO drDAO;
/** The hosts table model. */
private DefaultTableModel hostsTableModel;
/** The SAN table model. */
private DefaultTableModel sansTableModel;
/** The network table model. */
private DefaultTableModel networkTableModel;
/** Creates a new SpecificDatacenterView form. */
public SpecificDatacenterView(DatacenterRegistry d) {
dcr=d;
drDAO = new DatacenterRegistryDAO();
initComponents();
fillFields();
}
/**
* Gets the cost by mips of this datacenter.
*
* @return the cost by mips.
*/
public javax.swing.JLabel getMipsCostLabel() {
return mipsCostLabel;
}
/**
* Gets the datacenter registry being edited.
*
* @return the datacenter registry being edited.
*/
public DatacenterRegistry getDatacenterRegistry() {
return dcr;
}
/**
* Sets the datacenter registry being edited.
*
* @param dcr the datacenter registry being edited.
*/
public void setDcr(DatacenterRegistry dcr) {
this.dcr = dcr;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jTabbedPane = new javax.swing.JTabbedPane();
overviewPanel = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
architectureLabel = new javax.swing.JLabel();
osLabel = new javax.swing.JLabel();
hypervisorLabel = new javax.swing.JLabel();
allocationLabel = new javax.swing.JLabel();
architectureBox = new javax.swing.JComboBox();
osBox = new javax.swing.JComboBox();
hypervisorBox = new javax.swing.JComboBox();
policyBox = new javax.swing.JComboBox();
vmMigrationLabel = new javax.swing.JLabel();
vmMigrationsBox = new javax.swing.JComboBox();
upperThresholdLabel = new javax.swing.JLabel();
upperThresholdSpinner = new javax.swing.JSpinner();
intervalLabel = new javax.swing.JLabel();
schedulingIntervalSpinner = new javax.swing.JSpinner();
lowerThresholdLabel = new javax.swing.JLabel();
lowerThresholdSpinner = new javax.swing.JSpinner();
monitoringIntervalLabel = new javax.swing.JLabel();
monitoringIntervalSpinner = new javax.swing.JSpinner();
jPanel4 = new javax.swing.JPanel();
numOfHostsLabel = new javax.swing.JLabel();
mipsLabel = new javax.swing.JLabel();
numOfPEsLabel = new javax.swing.JLabel();
storageLabel = new javax.swing.JLabel();
ramLabel = new javax.swing.JLabel();
numOfHosts = new javax.swing.JLabel();
numOfPEs = new javax.swing.JLabel();
mips = new javax.swing.JLabel();
storageValue = new javax.swing.JLabel();
ramValue = new javax.swing.JLabel();
hostsPanel = new javax.swing.JPanel();
addHostButton = new javax.swing.JButton();
editHostButton = new javax.swing.JButton();
removeHostButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
hostsTable = new javax.swing.JTable(hostsTableModel);
costsPanel = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
procCostLabel = new javax.swing.JLabel();
procCostSpinner = new javax.swing.JSpinner();
memoryCostLabel = new javax.swing.JLabel();
memoryCostSpinner = new javax.swing.JSpinner();
storageCostLabel = new javax.swing.JLabel();
storageCostSpinner = new javax.swing.JSpinner();
bwCostLabel = new javax.swing.JLabel();
bwCostSpinner = new javax.swing.JSpinner();
mipsCostLabel = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
addSanButton = new javax.swing.JButton();
editSanButton = new javax.swing.JButton();
removeSanButton = new javax.swing.JButton();
jScrollPane3 = new javax.swing.JScrollPane();
sansTable = new javax.swing.JTable();
jPanel1 = new javax.swing.JPanel();
networkLabel = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
networkTable = new javax.swing.JTable(networkTableModel);
editLinkButton = new javax.swing.JButton();
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings"));
architectureLabel.setText("Architecture:");
osLabel.setText("Operating System:");
hypervisorLabel.setText("Hypervisor:");
allocationLabel.setText("Allocation Policy:");
architectureBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "x86" }));
architectureBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
architectureBoxItemStateChanged(evt);
}
});
osBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Linux" }));
osBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
osBoxItemStateChanged(evt);
}
});
hypervisorBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Xen", "KVM" }));
hypervisorBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
hypervisorBoxItemStateChanged(evt);
}
});
policyBox.setModel(new javax.swing.DefaultComboBoxModel(AllocationPolicy.getAllocationPoliciesNames()));
policyBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
policyBoxItemStateChanged(evt);
}
});
vmMigrationLabel.setText("VM Migrations:");
vmMigrationsBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Enabled", "Disabled" }));
vmMigrationsBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
vmMigrationsBoxItemStateChanged(evt);
}
});
upperThresholdLabel.setText("Upper Threshold:");
upperThresholdSpinner.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 1.0d, 0.05d));
upperThresholdSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
upperThresholdSpinnerStateChanged(evt);
}
});
intervalLabel.setText("Scheduling Interval:");
schedulingIntervalSpinner.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(1.0d), Double.valueOf(1.0d), null, Double.valueOf(1.0d)));
schedulingIntervalSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
schedulingIntervalSpinnerStateChanged(evt);
}
});
lowerThresholdLabel.setText("Lower Threshold:");
lowerThresholdSpinner.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 1.0d, 0.05d));
lowerThresholdSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
lowerThresholdSpinnerStateChanged(evt);
}
});
monitoringIntervalLabel.setText("Monitoring Interval:");
monitoringIntervalSpinner.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(180.0d), Double.valueOf(1.0d), null, Double.valueOf(10.0d)));
monitoringIntervalSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
monitoringIntervalSpinnerStateChanged(evt);
}
});
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(allocationLabel)
.addGap(18, 18, 18)
.addComponent(policyBox, 0, 409, Short.MAX_VALUE))
.addGroup(jPanel3Layout.createSequentialGroup()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(architectureLabel)
.addComponent(hypervisorLabel)
.addComponent(intervalLabel)
.addComponent(osLabel))
.addGap(18, 18, 18)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(architectureBox, 0, 141, Short.MAX_VALUE)
.addComponent(osBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(hypervisorBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(schedulingIntervalSpinner))
.addGap(30, 30, 30)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(vmMigrationLabel)
.addComponent(lowerThresholdLabel)
.addComponent(upperThresholdLabel)
.addComponent(monitoringIntervalLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(upperThresholdSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
.addComponent(lowerThresholdSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
.addComponent(vmMigrationsBox, 0, 120, Short.MAX_VALUE)
.addComponent(monitoringIntervalSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE))))
.addGap(40, 40, 40))
);
jPanel3Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {architectureBox, hypervisorBox, osBox});
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(allocationLabel)
.addComponent(policyBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(upperThresholdSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(upperThresholdLabel)
.addComponent(architectureBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(architectureLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(lowerThresholdLabel)
.addComponent(lowerThresholdSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(osBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(osLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(hypervisorBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(vmMigrationLabel)
.addComponent(vmMigrationsBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(hypervisorLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(schedulingIntervalSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(intervalLabel)
.addComponent(monitoringIntervalLabel)
.addComponent(monitoringIntervalSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(16, Short.MAX_VALUE))
);
jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Information"));
numOfHostsLabel.setText("Number of hosts:");
mipsLabel.setText("Processing capacity (MIPS):");
numOfPEsLabel.setText("Number of processing units:");
storageLabel.setText("Storage capacity:");
ramLabel.setText("Total amount of RAM:");
numOfHosts.setText("0");
numOfPEs.setText("0");
mips.setText("0");
storageValue.setText("0");
ramValue.setText("0");
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(numOfHostsLabel)
.addComponent(numOfPEsLabel)
.addComponent(mipsLabel)
.addComponent(storageLabel)
.addComponent(ramLabel))
.addGap(43, 43, 43)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ramValue)
.addComponent(storageValue)
.addComponent(mips)
.addComponent(numOfPEs)
.addComponent(numOfHosts, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(278, Short.MAX_VALUE))
);
jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {mips, numOfHosts, numOfPEs, ramValue, storageValue});
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(numOfHostsLabel)
.addComponent(numOfHosts))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(numOfPEsLabel)
.addComponent(numOfPEs))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(mipsLabel)
.addComponent(mips))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(storageLabel)
.addComponent(storageValue))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ramLabel)
.addComponent(ramValue)))
);
javax.swing.GroupLayout overviewPanelLayout = new javax.swing.GroupLayout(overviewPanel);
overviewPanel.setLayout(overviewPanelLayout);
overviewPanelLayout.setHorizontalGroup(
overviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(overviewPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(overviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
overviewPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jPanel3, jPanel4});
overviewPanelLayout.setVerticalGroup(
overviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(overviewPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(46, Short.MAX_VALUE))
);
jTabbedPane.addTab("General", overviewPanel);
addHostButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/add.png"))); // NOI18N
addHostButton.setText("Add");
addHostButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addHostButtonActionPerformed(evt);
}
});
editHostButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/edit.png"))); // NOI18N
editHostButton.setText("Edit");
editHostButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editHostButtonActionPerformed(evt);
}
});
removeHostButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/remove.png"))); // NOI18N
removeHostButton.setText("Remove");
removeHostButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeHostButtonActionPerformed(evt);
}
});
JScrollPane tablePane = new JScrollPane( hostsTable );
tablePane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
hostsTableModel = new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"ID", "Amount", "VM Scheduling", "Processing Elements", "MIPS/PE", "PE Provisioner", "Maximum Power", "Static Power Percent", "Power Model", "RAM", "RAM Provisioner", "Bandwidth", "Bandwidth Provisioner", "Storage"
}
) {
Class[] types = new Class [] {
java.lang.Integer.class, java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.Double.class, java.lang.String.class, java.lang.Double.class, java.lang.Double.class, java.lang.String.class, java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.String.class, java.lang.Long.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false, false, false, false, false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
};
hostsTable.setModel(hostsTableModel);
hostsTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
jScrollPane1.setViewportView(hostsTable);
hostsTable.getColumnModel().getColumn(0).setPreferredWidth(50);
hostsTable.getColumnModel().getColumn(1).setPreferredWidth(110);
hostsTable.getColumnModel().getColumn(2).setPreferredWidth(150);
hostsTable.getColumnModel().getColumn(3).setPreferredWidth(80);
hostsTable.getColumnModel().getColumn(4).setPreferredWidth(120);
hostsTable.getColumnModel().getColumn(5).setPreferredWidth(150);
hostsTable.getColumnModel().getColumn(6).setPreferredWidth(100);
hostsTable.getColumnModel().getColumn(7).setPreferredWidth(80);
hostsTable.getColumnModel().getColumn(8).setPreferredWidth(120);
hostsTable.getColumnModel().getColumn(9).setPreferredWidth(90);
hostsTable.getColumnModel().getColumn(10).setPreferredWidth(150);
hostsTable.getColumnModel().getColumn(11).setPreferredWidth(70);
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
hostsTable.getColumnModel().getColumn(0).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(1).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(2).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(3).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(4).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(5).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(6).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(7).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(8).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(9).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(10).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(11).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(12).setCellRenderer(renderer);
hostsTable.getColumnModel().getColumn(13).setCellRenderer(renderer);
hostsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
javax.swing.GroupLayout hostsPanelLayout = new javax.swing.GroupLayout(hostsPanel);
hostsPanel.setLayout(hostsPanelLayout);
hostsPanelLayout.setHorizontalGroup(
hostsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, hostsPanelLayout.createSequentialGroup()
.addContainerGap(241, Short.MAX_VALUE)
.addComponent(addHostButton, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(editHostButton, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(removeHostButton, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 622, Short.MAX_VALUE)
);
hostsPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addHostButton, editHostButton, removeHostButton});
hostsPanelLayout.setVerticalGroup(
hostsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(hostsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(hostsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(removeHostButton)
.addComponent(editHostButton)
.addComponent(addHostButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE))
);
jTabbedPane.addTab("Hosts", hostsPanel);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Utilization Costs"));
procCostLabel.setText("Processing cost (per sec):");
procCostSpinner.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(0.0d), Double.valueOf(0.0d), null, Double.valueOf(0.1d)));
procCostSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
procCostSpinnerStateChanged(evt);
}
});
memoryCostLabel.setText("Memory cost (per MB):");
memoryCostSpinner.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(0.0d), Double.valueOf(0.0d), null, Double.valueOf(0.1d)));
memoryCostSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
memoryCostSpinnerStateChanged(evt);
}
});
storageCostLabel.setText("Storage cost (per MB):");
storageCostSpinner.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(0.0d), Double.valueOf(0.0d), null, Double.valueOf(0.1d)));
storageCostSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
storageCostSpinnerStateChanged(evt);
}
});
bwCostLabel.setText("Bandwidth cost (per MB):");
bwCostSpinner.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(0.0d), Double.valueOf(0.0d), null, Double.valueOf(0.1d)));
bwCostSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
bwCostSpinnerStateChanged(evt);
}
});
mipsCostLabel.setText("(Cost per MIPS: 0)");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(procCostLabel, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(memoryCostLabel, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(storageCostLabel, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(bwCostLabel, javax.swing.GroupLayout.Alignment.TRAILING))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(procCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(memoryCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(storageCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(bwCostSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, 72, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(mipsCostLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 274, javax.swing.GroupLayout.PREFERRED_SIZE))
);
jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {bwCostSpinner, memoryCostSpinner, procCostSpinner, storageCostSpinner});
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(procCostLabel)
.addComponent(procCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(mipsCostLabel))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(memoryCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(memoryCostLabel))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(storageCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(storageCostLabel))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bwCostSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(bwCostLabel))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout costsPanelLayout = new javax.swing.GroupLayout(costsPanel);
costsPanel.setLayout(costsPanelLayout);
costsPanelLayout.setHorizontalGroup(
costsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(costsPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
costsPanelLayout.setVerticalGroup(
costsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(costsPanelLayout.createSequentialGroup()
.addGap(25, 25, 25)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(199, Short.MAX_VALUE))
);
jTabbedPane.addTab("Costs", costsPanel);
addSanButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/add.png"))); // NOI18N
addSanButton.setText("Add");
addSanButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addSanButtonActionPerformed(evt);
}
});
editSanButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/edit.png"))); // NOI18N
editSanButton.setText("Edit");
editSanButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editSanButtonActionPerformed(evt);
}
});
removeSanButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/remove.png"))); // NOI18N
removeSanButton.setText("Remove");
removeSanButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeSanButtonActionPerformed(evt);
}
});
sansTableModel = new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Name", "Capacity", "Bandwidth", "Latency"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Double.class, java.lang.Double.class, java.lang.Double.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
};
sansTable.setModel(sansTableModel);
jScrollPane3.setViewportView(sansTable);
sansTable.getColumnModel().getColumn(0).setResizable(false);
sansTable.getColumnModel().getColumn(1).setResizable(false);
sansTable.getColumnModel().getColumn(2).setResizable(false);
sansTable.getColumnModel().getColumn(3).setResizable(false);
sansTable.getColumnModel().getColumn(0).setCellRenderer(renderer);
sansTable.getColumnModel().getColumn(1).setCellRenderer(renderer);
sansTable.getColumnModel().getColumn(2).setCellRenderer(renderer);
sansTable.getColumnModel().getColumn(3).setCellRenderer(renderer);
sansTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
.addComponent(addSanButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(editSanButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(removeSanButton, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel5Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addSanButton, editSanButton, removeSanButton});
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(removeSanButton)
.addComponent(editSanButton)
.addComponent(addSanButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
.addContainerGap())
);
jTabbedPane.addTab("SAN", jPanel5);
networkLabel.setText("Description of links whose source is this datacenter.");
networkTableModel = new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Destination", "Bandwidth", "Latency"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Double.class, java.lang.Double.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
};
networkTable.setModel(networkTableModel);
jScrollPane2.setViewportView(networkTable);
networkTable.getColumnModel().getColumn(0).setCellRenderer(renderer);
networkTable.getColumnModel().getColumn(1).setCellRenderer(renderer);
networkTable.getColumnModel().getColumn(2).setCellRenderer(renderer);
editLinkButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/edit.png"))); // NOI18N
editLinkButton.setText("Edit link");
editLinkButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editLinkButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(networkLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 177, Short.MAX_VALUE)
.addComponent(editLinkButton, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(networkLabel)
.addComponent(editLinkButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
.addContainerGap())
);
jTabbedPane.addTab("Network", jPanel1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 638, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 638, Short.MAX_VALUE)
.addGap(0, 0, 0)))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 480, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)
.addGap(0, 0, 0)))
);
}// </editor-fold>//GEN-END:initComponents
/**
* Adds a host registry when the Add button is clicked.
*
* @param evt an action event.
* @since 1.0
*/
private void addHostButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addHostButtonActionPerformed
getDatacenterRegistry().getHostList().add(new HostRegistry());
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
updateHostsTable();
updateInformationPanel();
MainView.setDatacenterModified(true);
}//GEN-LAST:event_addHostButtonActionPerformed
/**
* Adds a SAN registry when the Add button is clicked.
*
* @param evt an action event.
* @since 1.0
*/
private void addSanButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addSanButtonActionPerformed
NewSAN s = new NewSAN(getDatacenterRegistry(),this);
s.setLocationRelativeTo(this);
s.setVisible(true);
}//GEN-LAST:event_addSanButtonActionPerformed
/**
* Changes the hypervisor of this datacenter registry whenever the
* item of the hypervisor combo box changes.
*
* @param evt an item event.
* @since 1.0
*/
private void hypervisorBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_hypervisorBoxItemStateChanged
switch(hypervisorBox.getSelectedIndex()) {
case 1:
getDatacenterRegistry().setVmm("KVM");
break;
default: //case 0:
getDatacenterRegistry().setVmm("Xen");
}
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_hypervisorBoxItemStateChanged
/**
* Changes the architecture of this datacenter registry whenever the
* item of the architecture combo box changes.
*
* @param evt an item event.
* @since 1.0
*/
private void architectureBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_architectureBoxItemStateChanged
switch(architectureBox.getSelectedIndex()) {
default: //case 0:
getDatacenterRegistry().setArchitecture("x86");
}
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_architectureBoxItemStateChanged
/**
* Changes the operating system of this datacenter registry whenever the
* item of the operating system combo box changes.
*
* @param evt an item event.
* @since 1.0
*/
private void osBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_osBoxItemStateChanged
switch(osBox.getSelectedIndex()) {
default: //case 0:
getDatacenterRegistry().setOs("Linux");
}
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_osBoxItemStateChanged
/**
* Changes the allocation policy of this datacenter registry whenever the
* item of the operating system combo box changes.
*
* @param evt an item event.
* @since 1.0
*/
private void policyBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_policyBoxItemStateChanged
getDatacenterRegistry().setAllocationPolicyAlias(policyBox.getSelectedItem().toString());
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_policyBoxItemStateChanged
/**
* Enables/disables virtual machines migrations in this datacenter registry
* whenever the item of the virtual machines migrations combo box changes.
*
* @param evt an item event.
* @since 1.0
*/
private void vmMigrationsBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_vmMigrationsBoxItemStateChanged
switch(vmMigrationsBox.getSelectedIndex()) {
case 1:
getDatacenterRegistry().setVmMigration(false);
break;
default: //case 0:
getDatacenterRegistry().setVmMigration(true);
}
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_vmMigrationsBoxItemStateChanged
/**
* Changes the processing cost of this datacenter whenever the state of the
* processing cost spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void procCostSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_procCostSpinnerStateChanged
DecimalFormat dft = new DecimalFormat("00.###E0");
String n = String.valueOf(procCostSpinner.getValue());
getDatacenterRegistry().setCostPerSec(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
double costPerMips = (getDatacenterRegistry().getCostPerSec()/drDAO.getMips(getDatacenterRegistry().getId()));
getMipsCostLabel().setText("(Cost per MIPS: "+dft.format(costPerMips)+")");
}//GEN-LAST:event_procCostSpinnerStateChanged
/**
* Changes the memory cost of this datacenter whenever the state of the
* memory cost spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void memoryCostSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_memoryCostSpinnerStateChanged
String n = String.valueOf(memoryCostSpinner.getValue());
getDatacenterRegistry().setCostPerMem(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_memoryCostSpinnerStateChanged
/**
* Changes the storage cost of this datacenter whenever the state of the
* storage cost spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void storageCostSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_storageCostSpinnerStateChanged
String n = String.valueOf(storageCostSpinner.getValue());
getDatacenterRegistry().setCostPerStorage(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_storageCostSpinnerStateChanged
/**
* Changes the bandwidth cost of this datacenter whenever the state of the
* bandwidth cost spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void bwCostSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_bwCostSpinnerStateChanged
String n = String.valueOf(bwCostSpinner.getValue());
getDatacenterRegistry().setCostPerBw(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_bwCostSpinnerStateChanged
/**
* Launches a {@link EditHost} form when the Edit button is clicked if
* there is a selected host.
*
* @param evt an action event.
* @since 1.0
*/
private void editHostButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editHostButtonActionPerformed
int i = hostsTable.getSelectedRow();
if(i>=0) {
Long hostId = Long.valueOf(String.valueOf(hostsTable.getModel().getValueAt(i, 0)));
HostRegistryDAO hrDAO = new HostRegistryDAO();
HostRegistry h = hrDAO.getHostRegistry(hostId);
EditHost e = new EditHost(h, this);
e.setLocationRelativeTo(this);
e.setVisible(true);
}
else{
Dialog.showWarning(this, "Please select a host.");
}
}//GEN-LAST:event_editHostButtonActionPerformed
/**
* Removes a host registry when the Remove button is clicked if
* there is a selected host.
*
* @param evt an action event.
* @since 1.0
*/
private void removeHostButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeHostButtonActionPerformed
int i = hostsTable.getSelectedRow();
if(i>=0) {
if(hostsTable.getRowCount()<2){
Dialog.showWarning(this, "There must be at least one host.");
return;
}
Long hostId = Long.valueOf(String.valueOf(hostsTable.getModel().getValueAt(i, 0)));
HostRegistry hr = drDAO.getHostRegistry(hostId, getDatacenterRegistry().getId());
getDatacenterRegistry().getHostList().remove(hr);
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
updateHostsTable();
updateInformationPanel();
MainView.setDatacenterModified(true);
}
else {
Dialog.showWarning(this, "Please select a host.");
}
}//GEN-LAST:event_removeHostButtonActionPerformed
/**
* Removes a SAN registry when the Remove button is clicked if
* there is a selected SAN.
*
* @param evt an action event.
* @since 1.0
*/
private void removeSanButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeSanButtonActionPerformed
int i = sansTable.getSelectedRow();
if(i>=0) {
String sanName = String.valueOf(sansTable.getModel().getValueAt(i, 0));
SanStorageRegistry sr = drDAO.getSanStorageRegistry(sanName, getDatacenterRegistry().getId());
getDatacenterRegistry().getSanList().remove(sr);
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
updateSansTable();
updateInformationPanel();
MainView.setDatacenterModified(true);
}
else {
Dialog.showWarning(this, "Please select a SAN.");
}
}//GEN-LAST:event_removeSanButtonActionPerformed
/**
* Launches a {@link EditSAN} form when the Edit button is clicked if
* there is a selected SAN.
*
* @param evt an action event.
* @since 1.0
*/
private void editSanButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editSanButtonActionPerformed
int i = sansTable.getSelectedRow();
if(i>=0) {
String sanStorageName = String.valueOf(sansTable.getModel().getValueAt(i, 0));
SanStorageRegistry s = drDAO.getSanStorageRegistry(sanStorageName, getDatacenterRegistry().getId());
EditSAN e = new EditSAN(s, this);
e.setLocationRelativeTo(this);
e.setVisible(true);
}
else{
Dialog.showWarning(this, "Please select a SAN.");
}
}//GEN-LAST:event_editSanButtonActionPerformed
/**
* Launches a {@link EditLink} form when the Edit button is clicked if
* there is a selected link.
*
* @param evt an action event.
* @since 1.0
*/
private void editLinkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editLinkButtonActionPerformed
int i = networkTable.getSelectedRow();
if(i>=0) {
String dest = String.valueOf(networkTable.getModel().getValueAt(i, 0));
EditLink e = new EditLink(dcr.getName(), dest, this);
e.setLocationRelativeTo(this);
e.setVisible(true);
}
else{
Dialog.showWarning(this, "Please select a link.");
}
}//GEN-LAST:event_editLinkButtonActionPerformed
/**
* Changes the upper threshold value of this datacenter registry
* whenever the state of the upper threshold spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void upperThresholdSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_upperThresholdSpinnerStateChanged
String n = String.valueOf(upperThresholdSpinner.getValue());
getDatacenterRegistry().setUpperUtilizationThreshold(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_upperThresholdSpinnerStateChanged
/**
* Changes the scheduling interval of this datacenter registry
* whenever the state of the scheduling interval spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void schedulingIntervalSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_schedulingIntervalSpinnerStateChanged
String n = String.valueOf(schedulingIntervalSpinner.getValue());
getDatacenterRegistry().setSchedulingInterval(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_schedulingIntervalSpinnerStateChanged
/**
* Changes the lower threshold value of this datacenter registry
* whenever the state of the lower threshold spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void lowerThresholdSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_lowerThresholdSpinnerStateChanged
String n = String.valueOf(lowerThresholdSpinner.getValue());
getDatacenterRegistry().setLowerUtilizationThreshold(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_lowerThresholdSpinnerStateChanged
/**
* Changes the monitoring interval of this datacenter registry
* whenever the state of the monitoring interval spinner changes.
*
* @param evt a change event.
* @since 1.0
*/
private void monitoringIntervalSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_monitoringIntervalSpinnerStateChanged
String n = String.valueOf(monitoringIntervalSpinner.getValue());
getDatacenterRegistry().setMonitoringInterval(Double.valueOf(n));
drDAO.updateDatacenterRegistry(getDatacenterRegistry());
}//GEN-LAST:event_monitoringIntervalSpinnerStateChanged
/**
* Changes the datacenter registry.
*
* @param d the new datacenter registry.
* @since 1.0
*/
public void changeRegistry(DatacenterRegistry d) {
setDcr(d);
fillFields();
}
/**
* Fill the fields of the form.
*
* @since 1.0
*/
private void fillFields() {
/*
* General Panel
*/
DecimalFormat dft = new DecimalFormat("###,###.##");
if (getDatacenterRegistry().getArchitecture().equalsIgnoreCase("x86")) {
architectureBox.setSelectedIndex(0);
}
if (getDatacenterRegistry().getOs().equalsIgnoreCase("Linux")) {
osBox.setSelectedIndex(0);
}
if (getDatacenterRegistry().getVmm().equalsIgnoreCase("Xen")) {
hypervisorBox.setSelectedIndex(0);
} else {
hypervisorBox.setSelectedIndex(1);
}
policyBox.setSelectedItem(getDatacenterRegistry().getAllocationPolicyAlias());
if (getDatacenterRegistry().isVmMigration()) {
vmMigrationsBox.setSelectedIndex(0);
} else {
vmMigrationsBox.setSelectedIndex(1);
}
numOfHosts.setText(String.valueOf(dft.format(drDAO.getNumOfHosts(getDatacenterRegistry().getId()))));
numOfPEs.setText(String.valueOf(dft.format(drDAO.getNumOfPes(getDatacenterRegistry().getId()))));
mips.setText(String.valueOf(dft.format(drDAO.getMips(dcr.getId()))));
long storage = drDAO.getStorageCapacity(dcr.getId());
if (storage < 1000) {
storageValue.setText(String.valueOf(storage) + " MB");
} else if (storage < 1000000) {
storageValue.setText(String.valueOf(storage / 1000) + " GB");
} else {
storageValue.setText(String.valueOf(dft.format(storage / 1000000)) + " TB");
}
long ram = drDAO.getRam(dcr.getId());
if (ram < 1000) {
ramValue.setText(String.valueOf(ram) + " MB");
} else if (ram < 1000000) {
ramValue.setText(String.valueOf(ram / 1000) + " GB");
} else {
ramValue.setText(String.valueOf(dft.format(ram / 1000000)) + " TB");
}
upperThresholdSpinner.setValue(getDatacenterRegistry().getUpperUtilizationThreshold());
lowerThresholdSpinner.setValue(getDatacenterRegistry().getLowerUtilizationThreshold());
schedulingIntervalSpinner.setValue(getDatacenterRegistry().getSchedulingInterval());
monitoringIntervalSpinner.setValue(getDatacenterRegistry().getMonitoringInterval());
/*
* Hosts Panel
*/
updateHostsTable();
/*
* Costs Panel
*/
procCostSpinner.setValue(getDatacenterRegistry().getCostPerSec());
double costPerMips = (getDatacenterRegistry().getCostPerSec() / drDAO.getMips(dcr.getId()));
getMipsCostLabel().setText("(Cost per MIPS: " + costPerMips + ")");
memoryCostSpinner.setValue(getDatacenterRegistry().getCostPerMem());
storageCostSpinner.setValue(getDatacenterRegistry().getCostPerStorage());
bwCostSpinner.setValue(getDatacenterRegistry().getCostPerBw());
/*
* SAN panel
*/
updateSansTable();
/*
* Network panel
*/
updateNetworkTable();
}
/**
* Gets the name of the datacenter registry.
*
* @return the name of the datacenter registry.
* @since 1.0
*/
public String getNameOfRegistry() {
return getDatacenterRegistry().getName();
}
/**
* Updates the hosts table.
*
* @since 1.0
*/
public void updateHostsTable() {
while (hostsTable.getRowCount() > 0) {
hostsTableModel.removeRow(0);
}
for (HostRegistry h : getDatacenterRegistry().getHostList()) {
addHostRegistryToTable(h);
}
}
/**
* Adds a new host registry to the table.
*
* @param h the new host registry.
* @since 1.0
*/
private void addHostRegistryToTable(HostRegistry h) {
String vmScheduling, powerModel, ramProvisioner, bwProvisioner, peProvisioner;
vmScheduling = h.getSchedulingPolicyAlias();
powerModel = h.getPowerModelAlias();
ramProvisioner = h.getRamProvisionerAlias();
bwProvisioner = h.getBwProvisionerAlias();
peProvisioner = h.getPeProvisionerAlias();
hostsTableModel.insertRow(0, new Object[]{
h.getId(),
h.getAmount(),
vmScheduling,
h.getNumOfPes(),
h.getMipsPerPe(),
peProvisioner,
h.getMaxPower(),
h.getStaticPowerPercent(),
powerModel,
h.getRam(),
ramProvisioner,
h.getBw(),
bwProvisioner,
h.getStorage()});
}
/**
* Updates the SAN table.
*
* @since 1.0
*/
public void updateSansTable() {
while (sansTable.getRowCount() > 0) {
sansTableModel.removeRow(0);
}
for (SanStorageRegistry s : getDatacenterRegistry().getSanList()) {
addSanStorageRegistryToTable(s);
}
}
/**
* Adds a new SAN registry to the table.
*
* @param s the new SAN registry.
* @since 1.0
*/
private void addSanStorageRegistryToTable(SanStorageRegistry s) {
sansTableModel.insertRow(0, new Object[]{
s.getName(),
s.getCapacity(),
s.getBandwidth(),
s.getNetworkLatency()});
}
/**
* Updates the network table.
*
* @since 1.0
*/
public void updateNetworkTable() {
while (networkTable.getRowCount() > 0) {
networkTableModel.removeRow(0);
}
NetworkMapEntryDAO neDAO = new NetworkMapEntryDAO();
List<NetworkMapEntry> destinationList = neDAO.getListOfDestinations(dcr.getName());
for (NetworkMapEntry entry : destinationList) {
addLinkToTable(entry.getDestination(), entry.getBandwidth(), entry.getLatency());
}
}
/**
* Adds a new link to the network table.
*
* @param dest the destination of the link.
* @param bandwidth the bandwidth value.
* @param latency the latency value.
* @since 1.0
*/
private void addLinkToTable(String dest, double bandwidth, double latency) {
networkTableModel.insertRow(0, new Object[]{
dest,
bandwidth,
latency});
}
/**
* Updates the information panel values.
*
* @since 1.0
*/
public void updateInformationPanel() {
numOfHosts.setText(String.valueOf(drDAO.getNumOfHosts(getDatacenterRegistry().getId())));
numOfPEs.setText(String.valueOf(drDAO.getNumOfPes(getDatacenterRegistry().getId())));
mips.setText(String.valueOf(drDAO.getMips(getDatacenterRegistry().getId())));
storageValue.setText(String.valueOf(drDAO.getStorageCapacity(getDatacenterRegistry().getId())));
ramValue.setText(String.valueOf(drDAO.getRam(getDatacenterRegistry().getId())));
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton addHostButton;
private javax.swing.JButton addSanButton;
private javax.swing.JLabel allocationLabel;
private javax.swing.JComboBox architectureBox;
private javax.swing.JLabel architectureLabel;
private javax.swing.JLabel bwCostLabel;
private javax.swing.JSpinner bwCostSpinner;
private javax.swing.JPanel costsPanel;
private javax.swing.JButton editHostButton;
private javax.swing.JButton editLinkButton;
private javax.swing.JButton editSanButton;
private javax.swing.JPanel hostsPanel;
private javax.swing.JTable hostsTable;
private javax.swing.JComboBox hypervisorBox;
private javax.swing.JLabel hypervisorLabel;
private javax.swing.JLabel intervalLabel;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JTabbedPane jTabbedPane;
private javax.swing.JLabel lowerThresholdLabel;
private javax.swing.JSpinner lowerThresholdSpinner;
private javax.swing.JLabel memoryCostLabel;
private javax.swing.JSpinner memoryCostSpinner;
private javax.swing.JLabel mips;
private javax.swing.JLabel mipsCostLabel;
private javax.swing.JLabel mipsLabel;
private javax.swing.JLabel monitoringIntervalLabel;
private javax.swing.JSpinner monitoringIntervalSpinner;
private javax.swing.JLabel networkLabel;
private javax.swing.JTable networkTable;
private javax.swing.JLabel numOfHosts;
private javax.swing.JLabel numOfHostsLabel;
private javax.swing.JLabel numOfPEs;
private javax.swing.JLabel numOfPEsLabel;
private javax.swing.JComboBox osBox;
private javax.swing.JLabel osLabel;
private javax.swing.JPanel overviewPanel;
private javax.swing.JComboBox policyBox;
private javax.swing.JLabel procCostLabel;
private javax.swing.JSpinner procCostSpinner;
private javax.swing.JLabel ramLabel;
private javax.swing.JLabel ramValue;
private javax.swing.JButton removeHostButton;
private javax.swing.JButton removeSanButton;
private javax.swing.JTable sansTable;
private javax.swing.JSpinner schedulingIntervalSpinner;
private javax.swing.JLabel storageCostLabel;
private javax.swing.JSpinner storageCostSpinner;
private javax.swing.JLabel storageLabel;
private javax.swing.JLabel storageValue;
private javax.swing.JLabel upperThresholdLabel;
private javax.swing.JSpinner upperThresholdSpinner;
private javax.swing.JLabel vmMigrationLabel;
private javax.swing.JComboBox vmMigrationsBox;
// End of variables declaration//GEN-END:variables
}