/* * 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 }