/* * Copyright (C) 2008 Universidade Federal de Campina Grande * * This file is part of OurGrid. * * OurGrid is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser 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 Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.ourgrid.peer.ui.async.gui; import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JOptionPane; import org.ourgrid.common.ui.InputFieldsUI; import org.ourgrid.common.util.StringUtil; import org.ourgrid.peer.PeerConfiguration; import org.ourgrid.peer.ui.async.client.PeerAsyncInitializer; import org.ourgrid.peer.ui.async.model.PeerAsyncUIModel; import br.edu.ufcg.lsd.commune.container.ContainerUtils; /** * Represents a panel where it is possible to define the Discovery Service * settings, like: user name and server. */ public class DiscoveryServiceSettingsPanel extends javax.swing.JPanel implements InputFieldsUI { private static final long serialVersionUID = 1L; private PeerAsyncUIModel model; /** Creates new form DiscoveryServiceSettingsPanel */ public DiscoveryServiceSettingsPanel(PeerAsyncUIModel model) { this.model = model; initComponents(); } /** 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { joinCommunityCheckBox = new javax.swing.JCheckBox(); testConnButton = new javax.swing.JButton(); jScrollPane = new javax.swing.JScrollPane(); jPanel1 = new javax.swing.JPanel(); dsURLLabel = new javax.swing.JLabel(); urlList = new javax.swing.JList(); addURLButton = new javax.swing.JButton(); removeURLButton = new javax.swing.JButton(); urlListModel = new DefaultListModel(); urlList.setModel(urlListModel); joinCommunityCheckBox.setText("Join community?"); dsURLLabel.setText("Discovery Service addresses:"); jScrollPane.setViewportView(urlList); addURLButton.setText("Add DS"); removeURLButton.setText("Remove DS"); removeURLButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeURLActionPerformed(); } }); addURLButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addURLActionPerformed(); } }); testConnButton.setText("Test connection"); testConnButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { testDiscoveryServiceConnection(); } }); org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .addContainerGap() .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(joinCommunityCheckBox) .add(dsURLLabel) .add(jPanel1Layout.createSequentialGroup() .add(jScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 290, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(removeURLButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(addURLButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(testConnButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap(39, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .addContainerGap() .add(joinCommunityCheckBox) .add(12, 12, 12) .add(dsURLLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .add(addURLButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(removeURLButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(testConnButton)) .add(jScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 175, Short.MAX_VALUE)) .addContainerGap()) ); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); initFields(); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane; private javax.swing.JCheckBox joinCommunityCheckBox; private javax.swing.JLabel dsURLLabel; private javax.swing.JButton testConnButton; private javax.swing.JList urlList; private javax.swing.JButton addURLButton; private javax.swing.JButton removeURLButton; private DefaultListModel urlListModel; // End of variables declaration//GEN-END:variables /** * Disable the editable components of this panel. */ public void disableFieldEdition() { joinCommunityCheckBox.setEnabled(false); testConnButton.setEnabled(false); } /** * Enable the editable components of this panel. */ public void enableFieldEdition() { joinCommunityCheckBox.setEnabled(true); testConnButton.setEnabled(true); } /** * Tests the DiscoveryService connection, using the values setted. */ private void testDiscoveryServiceConnection() { Cursor hourglassCursor = new Cursor(Cursor.WAIT_CURSOR); setCursor(hourglassCursor); Object[] selectedValue = urlList.getSelectedValues(); if (selectedValue == null) { JOptionPane.showMessageDialog(null, "No discovery service was selected.", "Discovery Service connection", JOptionPane.ERROR_MESSAGE); } for (int i = 0; i < selectedValue.length; i++) { String address = (String) selectedValue[i]; String[] splitAddress = StringUtil.splitAddress((String)selectedValue[i]); String userName = splitAddress[0]; boolean connected = true; if (splitAddress.length != 2) { connected = false; } else { String serverName = splitAddress[1]; connected = PeerAsyncInitializer.getInstance().getComponentClient(). testConnectionWithDiscoveryService(userName, serverName); } if (!connected) { JOptionPane.showMessageDialog(null, "Discovery Service : " + address + " could not be contacted.", "Discovery Service connection", JOptionPane.ERROR_MESSAGE); } else { JOptionPane.showMessageDialog(null, "Discovery Service : " + address + " successfully contacted.", "Discovery Service connection", JOptionPane.INFORMATION_MESSAGE); } } Cursor normalCursor = new Cursor(Cursor.DEFAULT_CURSOR); setCursor(normalCursor); } /** * Save the basic properties of the peer. */ public void saveProperties() { model.setProperty(PeerConfiguration.PROP_JOIN_COMMUNITY, joinCommunityCheckBox.isSelected() ? "yes" : "no"); List<String> urlList = new ArrayList<String>(); for (int i = 0; i < urlListModel.getSize(); i++) { urlList.add((String) urlListModel.getElementAt(i)); } model.setProperty(PeerConfiguration.PROP_DS_NETWORK, ContainerUtils.getStringListProperty(urlList)); } /** * Initializes the textFields. */ public void initFields() { joinCommunityCheckBox.setSelected(model.getProperty( PeerConfiguration.PROP_JOIN_COMMUNITY).equals("yes")); urlListModel.clear(); String dsUrlStr = model.getProperty(PeerConfiguration.PROP_DS_NETWORK); List<String> dsUrls = ContainerUtils.parseStringList(dsUrlStr); for (String dsUrl : dsUrls) { urlListModel.addElement(dsUrl); } } /** * Save the values of the field inputs. */ public void saveFieldInputs() throws IOException { saveProperties(); } /** * Disable the editable components of this panel. */ public void disableInput() { disableFieldEdition(); } /** * Enable the editable components of this panel. */ public void enableInput() { enableFieldEdition(); } protected void addURLActionPerformed() { String urlToAdd = JOptionPane.showInputDialog(this, "DS Address to be added:", "DS Address", JOptionPane.PLAIN_MESSAGE); if (urlToAdd != null && urlToAdd.length() > 0) { urlListModel.addElement(urlToAdd); } } protected void removeURLActionPerformed() { for (Object selectedURL : urlList.getSelectedValues()) { urlListModel.removeElement(selectedURL); } } }