blob: 71ba253f3064d2f92e472a010a4a78f3e42fea61 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.felix.mosgi.managedelements.bundlesprobes.tab;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.Hashtable;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.openmbean.ArrayType;
import javax.management.openmbean.SimpleType;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.swing.table.DefaultTableModel;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;
public class BundlesProbesModelTabUI extends DefaultTableModel implements NotificationListener {
private static final String OSGI_ON="TabUI:name=BundlesProbes";
private MBeanServerConnection mbsc = null;
private Hashtable eventName=new Hashtable();
private ObjectName osgiON=null;
public BundlesProbesModelTabUI() throws Exception{
super(new String[]{"Id", "State", "Location"}, 1);
eventName.put(new Integer(Bundle.UNINSTALLED), "UNINSTALLED");
eventName.put(new Integer(Bundle.INSTALLED), "INSTALLED");
eventName.put(new Integer(Bundle.RESOLVED), "RESOLVED");
eventName.put(new Integer(Bundle.STARTING), "STARTING");
eventName.put(new Integer(Bundle.STOPPING), "STOPPING");
eventName.put(new Integer(Bundle.ACTIVE), "ACTIVE");
osgiON=new ObjectName(OSGI_ON);
}
///////////////////////////////
// DefaultTableModel //
///////////////////////////////
public boolean isCellEditable(int row, int col){
return false;
}
private void removeAll(){
int size=this.getRowCount();
if (size!=0){
for (int i=0; i<size;i++){
super.removeRow(0);
}
super.fireTableRowsDeleted(0, size-1);
}
}
private void insertRows() throws Exception{
Vector bundleList= (Vector) mbsc.invoke(this.osgiON, "bundleList", null, null);
Iterator iterator = bundleList.iterator();
this.removeAll();
int i=0;
while (iterator.hasNext()) {
Vector vector = (Vector) iterator.next();
this.addRow(vector);
i++;
}
super.fireTableRowsInserted(0, i-1);
}
/////////////////////////////////////////////
// NotificationListener //
/////////////////////////////////////////////
public void handleNotification(Notification notification, Object handback) {
boolean found=false;
StringTokenizer st=new StringTokenizer(notification.getMessage(), ":");
String eventClassName=st.nextToken();
long id=Long.parseLong(st.nextToken());
int type=Integer.parseInt(st.nextToken());
String bundleName=st.nextToken();
System.out.println("))"+id+":"+type+":"+ this.eventName.get(new Integer(type)));
if (eventClassName.equals(BundleEvent.class.getName())){
int row=0;
for (; row<this.getRowCount(); row++) {
if (((Long)this.getValueAt(row, 0)).longValue()==id) {
found=true;
break;
}
}
if (type==Bundle.INSTALLED && !found){
super.addRow(new Object[]{new Long(id), this.eventName.get(new Integer(type)), bundleName});
super.fireTableRowsInserted(row, row);
}else {
super.setValueAt(this.eventName.get(new Integer(type)), row, 1);
super.fireTableRowsUpdated(row, row);
}
}
}
////////////////////////////////////////////////
// Main Class //
////////////////////////////////////////////////
public void createBundleList(MBeanServerConnection conn) throws Exception {
this.mbsc=conn;
mbsc.addNotificationListener(this.osgiON, this, null, null);
this.insertRows();
}
public void emptyPanel(){
if (this.mbsc!=null){
try{
mbsc.removeNotificationListener(this.osgiON, this);
}catch(Exception e){
e.printStackTrace();
}
this.mbsc=null;
this.removeAll();
}
}
public void installButtonAction(String text) throws Exception {
System.out.println("=>"+text);
mbsc.invoke(this.osgiON, "install", new Object[] {text}, new String[]{String.class.getName()});
}
public void startButtonAction(Long id) throws Exception {
mbsc.invoke(this.osgiON, "startService", new Object[] {new Long [] {id}} , new String[]{new ArrayType(1, SimpleType.LONG).getTypeName()});
}
public void stopButtonAction(Long id) throws Exception {
mbsc.invoke(this.osgiON, "stopService",new Object[] {new Long [] {id}} , new String[]{new ArrayType(1, SimpleType.LONG).getTypeName()});
}
public void updateButtonAction(Long id) throws Exception {
mbsc.invoke(this.osgiON, "update", new Object[] {new Long [] {id}} , new String[]{new ArrayType(1, SimpleType.LONG).getTypeName()});
}
public void refreshButtonAction() throws Exception {
this.insertRows();
}
public void uninstallButtonAction(Long id) throws Exception {
mbsc.invoke(this.osgiON, "uninstall", new Object[] {new Long [] {id}} , new String[]{new ArrayType(1, SimpleType.LONG).getTypeName()});
}
}