/* * 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.BorderLayout; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.TableColumnModel; import org.glite.jdl.JobAd; import org.ourgrid.common.interfaces.to.WorkerInfo; import org.ourgrid.peer.ui.async.client.PeerAsyncInitializer; /** * It represents a panel where it is possible to view the status of the workers. */ public class WorkerTablePanel extends javax.swing.JPanel { private static final long serialVersionUID = 1L; /** Creates new form WorkerTablePanel */ public WorkerTablePanel() { 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() { tableScrollPane = new javax.swing.JScrollPane(); workerTable = new javax.swing.JTable(); workerTable.setModel(getTableModel()); workerTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (workerTable.getSelectedColumn() == WorkerTableModel.DELETE_COLUMN) { deleteTableRow(workerTable.getSelectedRow()); }else{ updateTextArea(workerTable.getSelectedRow()); } } }); workerTable.setAutoResizeMode( JTable.AUTO_RESIZE_ALL_COLUMNS ); tableScrollPane.setViewportView(workerTable); Dimension size = workerTable.getPreferredSize(); TableColumnModel columnModel = workerTable.getColumnModel(); columnModel.getColumn( 0 ).setPreferredWidth( (int)(size.width * 0.20) ); columnModel.getColumn( 1 ).setPreferredWidth( (int)(size.width * 0.75) ); columnModel.getColumn( 2 ).setPreferredWidth( (int)(size.width * 0.05) ); BorderLayout bLayout = new BorderLayout(); this.setLayout(bLayout); add(tableScrollPane, BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents protected void updateTextArea(int selectedRow) { if(selectedRow == -1){ propertiesArea.setText("Click on a worker for information"); }else{ WorkerInfo workerInfo = getTableModel().getWorkerInfo(selectedRow); String expression = workerInfo.getWorkerSpec().getExpression(); if(expression != null){ try { propertiesArea.setText( new JobAd( expression ).toString( true, true ) ); } catch ( Exception e ) { propertiesArea.setText( "Error parsing JobAd: " + e.getMessage() ); } }else{ propertiesArea.setText( formatMap( workerInfo.getWorkerSpec().getAttributes() ) ); } } } /** * Format a map of properties to a single {@link String}. * @param map * @return */ private String formatMap( Map<String,String> map ) { StringBuilder sb = new StringBuilder("[\n"); Set<Entry<String,String>> entrySet = map.entrySet(); for ( Entry<String,String> entry : entrySet ) { sb.append( "\t" + entry.getKey() + ": " + entry.getValue() + "\n" ); } return sb.append( "]\n" ).toString(); } /** * Removes the specified row of this table. * @param selectedRow The row to be removed. */ private void deleteTableRow(int selectedRow) { WorkerInfo workerInfo = getTableModel().getWorkerInfo(selectedRow); int confirmDeletion = JOptionPane.showConfirmDialog(null, "Delete worker [" + workerInfo.getId() + "] ?", "Delete worker", JOptionPane.YES_NO_OPTION); if (confirmDeletion == JOptionPane.YES_OPTION) { PeerAsyncInitializer.getInstance().getComponentClient().removeWorker(workerInfo.getWorkerSpec()); } updateTextArea( -1 ); } /** * Returns the table that displays the status of the worker. * @return The table that displays the status of the worker. */ private WorkerTableModel getTableModel() { if (model == null) { model = new WorkerTableModel(new LinkedList<WorkerInfo>()); } return model; } /** * Defines the informations about the workers. * @param data The informations about the workers. */ public void setTableModelData(Collection<WorkerInfo> data) { getTableModel().setData(data); getTableModel().fireTableDataChanged(); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane tableScrollPane; private javax.swing.JTable workerTable; // End of variables declaration//GEN-END:variables private WorkerTableModel model; private JTextArea propertiesArea; /** * */ public void peerStopped() { setTableModelData(Collections.<WorkerInfo>emptyList()); updateTextArea( -1 ); } /** * @param propertiesArea */ public void setTextArea( JTextArea propertiesArea ) { this.propertiesArea = propertiesArea; } }