/* * Copyright (C) 2011 Ives van der Flaas * * This program 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. * * This program 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package be.ac.ua.comp.scarletnebula.gui.addserverwizard; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; import javax.swing.border.BevelBorder; import org.dasein.cloud.compute.Architecture; import org.dasein.cloud.compute.MachineImage; import org.dasein.cloud.compute.VirtualMachineProduct; import be.ac.ua.comp.scarletnebula.core.CloudProvider; import be.ac.ua.comp.scarletnebula.wizard.DataRecorder; import be.ac.ua.comp.scarletnebula.wizard.WizardPage; public class ChooseSizePage extends WizardPage { class SizeList extends JList { private final class SizeListCellRenderer implements ListCellRenderer { @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { final VirtualMachineProduct product = (VirtualMachineProduct) value; final String specColor = isSelected ? "#FFFFFF" : "#646060"; final JLabel productLabel = new JLabel( "<html><font size=\"5\">" + product.getName() + "</font><br/><font color=\"" + specColor + "\">" + "Number of CPUs: " + product.getCpuCount() + " <br/>RAM: " + product.getRamInMb() + " MB" + "<br/>Hard drive: " + product.getDiskSizeInGb() + " GB<br/>" + "</font></html>"); productLabel.setOpaque(true); if (isSelected) { productLabel.setBackground(getSelectionBackground()); productLabel.setForeground(getSelectionForeground()); } else { productLabel.setBackground(Color.white); productLabel.setForeground(getForeground()); } productLabel.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(Color.white, 2), BorderFactory.createEtchedBorder())); return productLabel; } } private static final long serialVersionUID = 1L; public SizeList(final CloudProvider provider, final Architecture architecture) { setCellRenderer(new SizeListCellRenderer()); final DefaultListModel listModel = new DefaultListModel(); setModel(listModel); fillWithSizes(provider, architecture, listModel); } private void fillWithSizes(final CloudProvider provider, final Architecture architecture, final DefaultListModel listModel) { for (final VirtualMachineProduct product : provider .getPossibleInstanceSizes(architecture)) { listModel.addElement(product); } } }; private static final long serialVersionUID = 1L; private final SizeList sizelist; private final CloudProvider provider; public ChooseSizePage(final CloudProvider provider, final MachineImage image) { this.provider = provider; final Architecture architecture = image.getArchitecture(); sizelist = new SizeList(provider, architecture); sizelist.setSelectedIndex(0); final JScrollPane sizeScrollPane = new JScrollPane(sizelist); sizeScrollPane.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createEmptyBorder(20, 20, 20, 20), BorderFactory.createBevelBorder(BevelBorder.LOWERED))); setLayout(new BorderLayout()); add(sizeScrollPane, BorderLayout.CENTER); } @Override public WizardPage next(final DataRecorder recorder) { ((AddServerWizardDataRecorder) recorder).instanceSize = (VirtualMachineProduct) sizelist .getSelectedValue(); if (provider.supportsFirewalls()) { return new FirewallPage(provider); } else { return new TaggingPage(); } } }