/*
* 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.customers;
import cloudreports.dao.CustomerRegistryDAO;
import cloudreports.dao.NetworkMapEntryDAO;
import cloudreports.gui.Dialog;
import cloudreports.gui.MainView;
import cloudreports.models.CustomerRegistry;
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 OverallCustomerView extends javax.swing.JPanel {
/** The network table model. */
private DefaultTableModel networkTableModel;
/** Creates a new OverallUserGroupView form. */
public OverallCustomerView() {
initComponents();
CustomerRegistryDAO crDAO = new CustomerRegistryDAO();
DecimalFormat dft = new DecimalFormat("###,###.##");
numOfCustomers.setText(String.valueOf(dft.format(crDAO.getNumOfCustomers())));
cloudletsPerMin.setText(String.valueOf(dft.format(crDAO.getTotalNumOfCloudlets())));
lengthOfCloudlets.setText(String.valueOf(dft.format(crDAO.getAvgLength())));
cloudletsFileSize.setText(String.valueOf(dft.format(crDAO.getAvgFileSize())));
cloudletsOutputSize.setText(String.valueOf(dft.format(crDAO.getAvgOutputSize())));
numOfVM.setText(String.valueOf(dft.format(crDAO.getTotalNumOfVms())));
imageSize.setText(String.valueOf(dft.format(crDAO.getAvgImageSize())));
long avgRam = crDAO.getAvgRAM();
if(avgRam < 1000) ram.setText(String.valueOf(dft.format(avgRam)+" MB"));
else if (avgRam < 1000000) ram.setText(String.valueOf(dft.format(avgRam/1000)+" GB"));
else ram.setText(String.valueOf(dft.format(avgRam/1000000)+" TB"));
bw.setText(String.valueOf(dft.format(crDAO.getAvgBw())));
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() {
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
addCustomerButton = new javax.swing.JButton();
removeCustomerButton = new javax.swing.JButton();
jPanel4 = new javax.swing.JPanel();
numOfCostumersLabel = new javax.swing.JLabel();
cloudletsPerMinLabel = new javax.swing.JLabel();
lengthOfCloudletsLabel = new javax.swing.JLabel();
cloudletsFileSizeLabel = new javax.swing.JLabel();
numOfCustomers = new javax.swing.JLabel();
cloudletsPerMin = new javax.swing.JLabel();
lengthOfCloudlets = new javax.swing.JLabel();
cloudletsFileSize = new javax.swing.JLabel();
cloudletsOutputSizeLabel = new javax.swing.JLabel();
cloudletsOutputSize = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
numOfVMLabel = new javax.swing.JLabel();
imageSizeLabel = new javax.swing.JLabel();
ramLabel = new javax.swing.JLabel();
bwLabel = new javax.swing.JLabel();
numOfVM = new javax.swing.JLabel();
imageSize = new javax.swing.JLabel();
ram = new javax.swing.JLabel();
bw = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
networkInfoLabel = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
networkTable = new javax.swing.JTable(networkTableModel);
addCustomerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/add.png"))); // NOI18N
addCustomerButton.setText("Add Customer");
addCustomerButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addCustomerButtonActionPerformed(evt);
}
});
removeCustomerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cloudreports/gui/resources/remove.png"))); // NOI18N
removeCustomerButton.setText("Remove Customer");
removeCustomerButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeCustomerButtonActionPerformed(evt);
}
});
jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Users"));
numOfCostumersLabel.setText("Number of costumers:");
cloudletsPerMinLabel.setText("Cloudlets sent per minute:");
lengthOfCloudletsLabel.setText("Average length of cloudlets:");
cloudletsFileSizeLabel.setText("Average cloudlet's file size:");
numOfCustomers.setText("0");
cloudletsPerMin.setText("0");
lengthOfCloudlets.setText("0");
cloudletsFileSize.setText("0");
cloudletsOutputSizeLabel.setText("Average cloudlet's output size:");
cloudletsOutputSize.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)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(numOfCostumersLabel)
.addGap(58, 58, 58)
.addComponent(numOfCustomers, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel4Layout.createSequentialGroup()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cloudletsPerMinLabel)
.addComponent(lengthOfCloudletsLabel)
.addComponent(cloudletsFileSizeLabel)
.addComponent(cloudletsOutputSizeLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cloudletsOutputSize)
.addComponent(cloudletsFileSize)
.addComponent(lengthOfCloudlets)
.addComponent(cloudletsPerMin))))
.addContainerGap(219, Short.MAX_VALUE))
);
jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cloudletsFileSize, cloudletsOutputSize, cloudletsPerMin, lengthOfCloudlets, numOfCustomers});
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(numOfCostumersLabel)
.addComponent(numOfCustomers))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cloudletsPerMinLabel)
.addComponent(cloudletsPerMin))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lengthOfCloudletsLabel)
.addComponent(lengthOfCloudlets))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cloudletsFileSizeLabel)
.addComponent(cloudletsFileSize))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cloudletsOutputSize)
.addComponent(cloudletsOutputSizeLabel))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Virtual Machines"));
numOfVMLabel.setText("Number of virtual machines:");
imageSizeLabel.setText("Average image size:");
ramLabel.setText("Average RAM:");
bwLabel.setText("Average bandwidth:");
numOfVM.setText("0");
imageSize.setText("0");
ram.setText("0");
bw.setText("0");
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(numOfVMLabel)
.addComponent(imageSizeLabel)
.addComponent(ramLabel)
.addComponent(bwLabel))
.addGap(18, 18, 18)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(bw)
.addComponent(ram)
.addComponent(imageSize)
.addComponent(numOfVM, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(216, Short.MAX_VALUE))
);
jPanel5Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {bw, imageSize, numOfVM, ram});
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(numOfVMLabel)
.addComponent(numOfVM))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(imageSizeLabel)
.addComponent(imageSize))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ram)
.addComponent(ramLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bwLabel)
.addComponent(bw))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
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(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(addCustomerButton)
.addGap(18, 18, 18)
.addComponent(removeCustomerButton))
.addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addCustomerButton, removeCustomerButton});
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(31, 31, 31)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(addCustomerButton)
.addComponent(removeCustomerButton))
.addGap(18, 18, 18)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(45, Short.MAX_VALUE))
);
jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {addCustomerButton, removeCustomerButton});
jTabbedPane1.addTab("Overview", jPanel1);
networkInfoLabel.setText("Description of each link whose source is a customer.");
networkTableModel = new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Source", "Destination", "Bandwidth", "Lantency"
}
) {
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 false;
}
};
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 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(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE)
.addComponent(networkInfoLabel))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(networkInfoLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 442, Short.MAX_VALUE)
.addContainerGap())
);
jTabbedPane1.addTab("Network", jPanel2);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 567, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
/**
* Launches a {@link NewCustomer} form when the Add Customer button is
* clicked.
*
* @param evt an action event.
* @since 1.0
*/
private void addCustomerButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addCustomerButtonActionPerformed
NewCustomer u = new NewCustomer(MainView.getCloudTree());
u.setLocationRelativeTo(this);
u.setVisible(true);
}//GEN-LAST:event_addCustomerButtonActionPerformed
/**
* Launches a {@link RemoveCustomer} form when the Remove Customer button is
* clicked.
*
* @param evt an action event.
* @since 1.0
*/
private void removeCustomerButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeCustomerButtonActionPerformed
CustomerRegistryDAO crDAO = new CustomerRegistryDAO();
if(crDAO.getNumOfCustomers() > 1) {
RemoveCustomer u = new RemoveCustomer(MainView.getCloudTree());
u.setLocationRelativeTo(this);
u.setVisible(true);
}
else {
Dialog.showWarning(this, "There must be at least one customer.");
}
}//GEN-LAST:event_removeCustomerButtonActionPerformed
/**
* Updates the network table.
*
* @since 1.0
*/
public final void updateNetworkTable() {
while (networkTable.getRowCount() > 0) {
networkTableModel.removeRow(0);
}
CustomerRegistryDAO crDAO = new CustomerRegistryDAO();
NetworkMapEntryDAO neDAO = new NetworkMapEntryDAO();
for (CustomerRegistry cr : crDAO.getListOfCustomers()) {
List<NetworkMapEntry> destinationList = neDAO.getListOfDestinations(cr.getName());
for (NetworkMapEntry entry : destinationList) {
addLinkToTable(cr.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 addCustomerButton;
private javax.swing.JLabel bw;
private javax.swing.JLabel bwLabel;
private javax.swing.JLabel cloudletsFileSize;
private javax.swing.JLabel cloudletsFileSizeLabel;
private javax.swing.JLabel cloudletsOutputSize;
private javax.swing.JLabel cloudletsOutputSizeLabel;
private javax.swing.JLabel cloudletsPerMin;
private javax.swing.JLabel cloudletsPerMinLabel;
private javax.swing.JLabel imageSize;
private javax.swing.JLabel imageSizeLabel;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JLabel lengthOfCloudlets;
private javax.swing.JLabel lengthOfCloudletsLabel;
private javax.swing.JLabel networkInfoLabel;
private javax.swing.JTable networkTable;
private javax.swing.JLabel numOfCostumersLabel;
private javax.swing.JLabel numOfCustomers;
private javax.swing.JLabel numOfVM;
private javax.swing.JLabel numOfVMLabel;
private javax.swing.JLabel ram;
private javax.swing.JLabel ramLabel;
private javax.swing.JButton removeCustomerButton;
// End of variables declaration//GEN-END:variables
}