/* * 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.NetworkMapEntryDAO; import cloudreports.gui.Dialog; import cloudreports.gui.MainView; import cloudreports.models.DatacenterRegistry; import cloudreports.models.NetworkMapEntry; import java.text.DecimalFormat; import java.util.List; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; /** * The OverallCustomerView form. * Most of its code is generated automatically by the NetBeans IDE. * * @author Thiago T. Sá * @since 1.0 */ public class OverallDatacenterView extends javax.swing.JPanel { /** The network table model. */ private DefaultTableModel networkTableModel; /** Creates a new OverallDatacenterView form. */ public OverallDatacenterView() { initComponents(); DatacenterRegistryDAO drDAO = new DatacenterRegistryDAO(); DecimalFormat dft = new DecimalFormat("###,###.##"); numOfDatacenters.setText(String.valueOf(drDAO.getNumOfDatacenters())); numOfHosts.setText(String.valueOf(dft.format(drDAO.getTotalNumOfHosts()))); numOfPEs.setText(String.valueOf(dft.format(drDAO.getTotalNumOfPes()))); procCapacity.setText(String.valueOf(dft.format(drDAO.getTotalMips()))); long storage = drDAO.getTotalStorageCapacity(); if(storage<1000) storageCapacity.setText(String.valueOf(storage)+" MB"); else if(storage<1000000) storageCapacity.setText(String.valueOf(storage/1000)+" GB"); else storageCapacity.setText(String.valueOf(dft.format(storage/1000000))+" TB"); long ram = drDAO.getTotalRam(); if(ram<1000) amountOfRAM.setText(String.valueOf(ram)+" MB"); else if (ram<1000000) amountOfRAM.setText(String.valueOf(ram/1000)+" GB"); else amountOfRAM.setText(String.valueOf(dft.format(ram/1000000))+" TB"); updateNetworkTable(); } /** 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(); addDatacenterButton = new javax.swing.JButton(); removeDatacenterButton = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); numOfDatacentersLabel = new javax.swing.JLabel(); numOfDatacenters = new javax.swing.JLabel(); numOfHosts = new javax.swing.JLabel(); numOfPEs = new javax.swing.JLabel(); procCapacity = new javax.swing.JLabel(); storageCapacity = new javax.swing.JLabel(); amountOfRAM = new javax.swing.JLabel(); numOfHostsLabel = new javax.swing.JLabel(); numOfPEsLabel = new javax.swing.JLabel(); procCapacityLabel = new javax.swing.JLabel(); storageCapacityLabel = new javax.swing.JLabel(); amountOfRAMLabel = new javax.swing.JLabel(); networkPanel = new javax.swing.JPanel(); networkInfoLabel = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); networkTable = new javax.swing.JTable(networkTableModel); addDatacenterButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/add.png"))); // NOI18N addDatacenterButton.setText("Add Datacenter"); addDatacenterButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addDatacenterButtonActionPerformed(evt); } }); removeDatacenterButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/remove.png"))); // NOI18N removeDatacenterButton.setText("Remove Datacenter"); removeDatacenterButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeDatacenterButtonActionPerformed(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("General Information")); numOfDatacentersLabel.setText("Number of datacenters:"); numOfDatacenters.setText("0"); numOfHosts.setText("0"); numOfPEs.setText("0"); procCapacity.setText("0"); storageCapacity.setText("0"); amountOfRAM.setText("0"); numOfHostsLabel.setText("Number of hosts:"); numOfPEsLabel.setText("Number of processing units:"); procCapacityLabel.setText("Processing capacity (MIPS):"); storageCapacityLabel.setText("Storage capacity:"); amountOfRAMLabel.setText("Total amount of RAM:"); 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(numOfDatacentersLabel) .addComponent(numOfHostsLabel) .addComponent(numOfPEsLabel) .addComponent(procCapacityLabel) .addComponent(storageCapacityLabel) .addComponent(amountOfRAMLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 15, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(numOfHosts) .addComponent(numOfPEs) .addComponent(procCapacity) .addComponent(storageCapacity) .addComponent(amountOfRAM) .addComponent(numOfDatacenters, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(204, Short.MAX_VALUE)) ); jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {amountOfRAM, numOfDatacenters, numOfHosts, numOfPEs, procCapacity, storageCapacity}); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(numOfDatacentersLabel) .addComponent(numOfDatacenters)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(numOfHostsLabel) .addComponent(numOfHosts)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(numOfPEsLabel) .addComponent(numOfPEs)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(procCapacityLabel) .addComponent(procCapacity)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(storageCapacityLabel) .addComponent(storageCapacity)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(amountOfRAMLabel) .addComponent(amountOfRAM)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); 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(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(overviewPanelLayout.createSequentialGroup() .addComponent(addDatacenterButton) .addGap(18, 18, 18) .addComponent(removeDatacenterButton))) .addContainerGap()) ); overviewPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addDatacenterButton, removeDatacenterButton}); overviewPanelLayout.setVerticalGroup( overviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(overviewPanelLayout.createSequentialGroup() .addGap(32, 32, 32) .addGroup(overviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(addDatacenterButton) .addComponent(removeDatacenterButton)) .addGap(18, 18, 18) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(117, Short.MAX_VALUE)) ); overviewPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {addDatacenterButton, removeDatacenterButton}); jTabbedPane.addTab("Overview", overviewPanel); networkInfoLabel.setText("Description of each link whose source is a datacenter."); networkTableModel = new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Source", "Destination", "Bandwidth", "Latency" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.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 canEdit [columnIndex]; } }; networkTable.setModel(networkTableModel); jScrollPane1.setViewportView(networkTable); DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setHorizontalAlignment(SwingConstants.CENTER); networkTable.getColumnModel().getColumn(0).setCellRenderer(renderer); networkTable.getColumnModel().getColumn(1).setCellRenderer(renderer); networkTable.getColumnModel().getColumn(2).setCellRenderer(renderer); networkTable.getColumnModel().getColumn(3).setCellRenderer(renderer); javax.swing.GroupLayout networkPanelLayout = new javax.swing.GroupLayout(networkPanel); networkPanel.setLayout(networkPanelLayout); networkPanelLayout.setHorizontalGroup( networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(networkPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE) .addComponent(networkInfoLabel)) .addContainerGap()) ); networkPanelLayout.setVerticalGroup( networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(networkPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(networkInfoLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 368, Short.MAX_VALUE) .addContainerGap()) ); jTabbedPane.addTab("Network", networkPanel); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 567, 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, 567, Short.MAX_VALUE) .addGap(0, 0, 0))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 460, 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, 460, Short.MAX_VALUE) .addGap(0, 0, 0))) ); }// </editor-fold>//GEN-END:initComponents /** * Launches a {@link RemoveDatacenter} form when the Remove Datacenter * button is clicked. * * @param evt an action event. * @since 1.0 */ private void removeDatacenterButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeDatacenterButtonActionPerformed DatacenterRegistryDAO drDAO = new DatacenterRegistryDAO(); if(drDAO.getNumOfDatacenters() > 1){ RemoveDatacenter d = new RemoveDatacenter(MainView.getCloudTree()); d.setLocationRelativeTo(this); d.setVisible(true); } else{ Dialog.showWarning(this, "There must be at least one datacenter."); } }//GEN-LAST:event_removeDatacenterButtonActionPerformed /** * Launches a {@link NewDatacenter} form when the Add Datacenter button is * clicked. * * @param evt an action event. * @since 1.0 */ private void addDatacenterButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addDatacenterButtonActionPerformed NewDatacenter d = new NewDatacenter(MainView.getCloudTree()); d.setLocationRelativeTo(this); d.setVisible(true); }//GEN-LAST:event_addDatacenterButtonActionPerformed /** * Updates the network table. * * @since 1.0 */ private void updateNetworkTable() { while (networkTable.getRowCount() > 0) { networkTableModel.removeRow(0); } DatacenterRegistryDAO drDAO = new DatacenterRegistryDAO(); NetworkMapEntryDAO neDAO = new NetworkMapEntryDAO(); for (DatacenterRegistry dcr : drDAO.getListOfDatacenters()) { List<NetworkMapEntry> destinationList = neDAO.getListOfDestinations(dcr.getName()); for (NetworkMapEntry entry : destinationList) { addLinkToTable(dcr.getName(), entry.getDestination(), entry.getBandwidth(), entry.getLatency()); } } } /** * Adds a new link to the network table. * * @since 1.0 */ private void addLinkToTable(String src, String dest, double bandwidth, double latency) { networkTableModel.insertRow(0, new Object[]{ src, dest, bandwidth, latency}); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addDatacenterButton; private javax.swing.JLabel amountOfRAM; private javax.swing.JLabel amountOfRAMLabel; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTabbedPane jTabbedPane; private javax.swing.JLabel networkInfoLabel; private javax.swing.JPanel networkPanel; private javax.swing.JTable networkTable; private javax.swing.JLabel numOfDatacenters; private javax.swing.JLabel numOfDatacentersLabel; private javax.swing.JLabel numOfHosts; private javax.swing.JLabel numOfHostsLabel; private javax.swing.JLabel numOfPEs; private javax.swing.JLabel numOfPEsLabel; private javax.swing.JPanel overviewPanel; private javax.swing.JLabel procCapacity; private javax.swing.JLabel procCapacityLabel; private javax.swing.JButton removeDatacenterButton; private javax.swing.JLabel storageCapacity; private javax.swing.JLabel storageCapacityLabel; // End of variables declaration//GEN-END:variables }