/*
* Copyright to the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.rioproject.cybernode.ui;
import org.rioproject.deploy.ServiceRecord;
import org.rioproject.util.TimeUtil;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.util.ArrayList;
/**
* A table of services that a Cybernode has created
*
* @author Dennis Reedy
*/
public class ServiceTable extends JPanel {
private JTable serviceTable;
private ServiceTableModel dataModel;
public ServiceTable(String title, boolean showPid) {
super();
setLayout(new BorderLayout());
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEmptyBorder(),
title));
serviceTable = new JTable();
dataModel = new ServiceTableModel(showPid);
serviceTable.setModel(dataModel);
serviceTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
TableColumnModel cm = serviceTable.getColumnModel();
cm.getColumn(0).setPreferredWidth(200);
cm.getColumn(0).setMaxWidth(500);
cm.getColumn(1).setPreferredWidth(200);
cm.getColumn(1).setMaxWidth(350);
add("Center", new JScrollPane(serviceTable));
}
public void addService(ServiceRecord record) {
dataModel.addItem(record);
}
public void clear() {
dataModel.clear();
}
public int getSelectedRow() {
int elements = dataModel.tableData.size();
if(elements==0)
return(-1);
return(serviceTable.getSelectedRow());
}
class ServiceTableModel extends AbstractTableModel {
private java.util.List<ServiceRecord> tableData = new ArrayList<ServiceRecord>();
private boolean showPid;
private String[] columnNames = {"Name", "Implementation Class", "Time Active"};
public ServiceTableModel(boolean showPid) {
super();
this.showPid = showPid;
if(showPid)
columnNames = new String[]{"Name", "Implementation Class", "PID", "Time Active"};
}
public Object getValueAt(int index, int columnIndex) {
try {
ServiceRecord record = tableData.get(index);
if(showPid) {
switch(columnIndex) {
case 0:
return(record.getName());
case 1:
return(record.getServiceElement().getComponentBundle().
getClassName());
case 2:
return record.getPid();
case 3:
return(TimeUtil.format(record.computeElapsedTime()));
default:
return(null);
}
} else {
switch(columnIndex) {
case 0:
return(record.getName());
case 1:
return(record.getServiceElement().getComponentBundle().
getClassName());
case 2:
return(TimeUtil.format(record.computeElapsedTime()));
default:
return(null);
}
}
} catch(Exception e) {
e.printStackTrace();
}
return(null);
}
public void addItem(ServiceRecord item) {
int rowNum = tableData.size();
tableData.add(item);
fireTableRowsInserted(rowNum, rowNum);
}
public void removeItem(int row) {
tableData.remove(row);
fireTableDataChanged();
}
public void clear() {
tableData.clear();
fireTableDataChanged();
}
public Object getItem(int row) {
return(tableData.get(row));
}
public int getColumnCount() {
return(columnNames.length);
}
public int getRowCount() {
return(tableData.size());
}
public String getColumnName(int column) {
return(columnNames[column]);
}
public void setValueAt(ServiceRecord item, int rowNum) {
tableData.set(rowNum, item);
fireTableRowsUpdated(rowNum, rowNum);
}
}
}