/* | |
* 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.awt.BorderLayout; | |
import java.awt.Dimension; | |
import java.awt.FlowLayout; | |
import java.awt.event.ActionEvent; | |
import java.awt.event.ActionListener; | |
import javax.management.MBeanServerConnection; | |
import java.awt.Component; | |
import javax.swing.BorderFactory; | |
import javax.swing.JButton; | |
import javax.swing.JLabel; | |
import javax.swing.JOptionPane; | |
import javax.swing.JPanel; | |
import javax.swing.JScrollPane; | |
import javax.swing.JTable; | |
import javax.swing.JTextField; | |
import javax.swing.ListSelectionModel; | |
import javax.swing.table.TableColumn; | |
import org.apache.felix.mosgi.console.ifc.Plugin; | |
import java.beans.PropertyChangeEvent; | |
import org.osgi.framework.BundleActivator; | |
import org.osgi.framework.BundleActivator; | |
import org.osgi.framework.BundleContext; | |
import org.osgi.framework.ServiceRegistration; | |
public class BundlesProbesTabUI extends JPanel implements BundleActivator, ActionListener, Plugin { | |
private JTable table; | |
private JTextField urlTextField; | |
private JButton installButton; | |
private JButton startButton; | |
private JButton stopButton; | |
private JButton updateButton; | |
private JButton refreshButton; | |
private JButton uninstallButton; | |
private BundlesProbesModelTabUI panelModel = null; | |
private BundleContext m_context=null; | |
private ServiceRegistration sreg = null; | |
private MBeanServerConnection mbsc=null; | |
/////////////////////////////////////////// | |
// BundleActivator // | |
/////////////////////////////////////////// | |
public void start(BundleContext context) { | |
m_context = context; | |
this.registerServicePlugin(); | |
} | |
public void stop(BundleContext context) { | |
} | |
/////////////////////////////////////////////// | |
// Plugin // | |
/////////////////////////////////////////////// | |
public void registerServicePlugin(){ | |
sreg = m_context.registerService(Plugin.class.getName(), this, null); | |
} | |
public void unregisterServicePlugin(){ | |
sreg.unregister(); | |
} | |
public String pluginLocation(){ | |
return m_context.getBundle().getLocation(); | |
} | |
public String getName(){ return "Bundles List"; } | |
public Component getGUI(){ return this; } | |
public void propertyChange(PropertyChangeEvent ee){ | |
String action=ee.getPropertyName(); | |
if (action.equals(Plugin.NEW_NODE_READY)){ | |
this.mbsc=(MBeanServerConnection)ee.getNewValue(); | |
}else if(action.equals(Plugin.EMPTY_NODE)){ | |
panelModel.emptyPanel(); | |
this.mbsc=null; | |
}else if(action.equals(Plugin.PLUGIN_ACTIVATED) && ee.getNewValue().equals(this.getName())){ | |
try { | |
panelModel.createBundleList(this.mbsc); | |
invalidate(); | |
validate(); | |
} catch (Exception ex) { | |
ex.printStackTrace(); | |
} | |
} | |
} | |
public BundlesProbesTabUI() throws Exception { | |
panelModel = new BundlesProbesModelTabUI(); | |
setLayout(new BorderLayout()); | |
add(createInstallPanel(), BorderLayout.NORTH); | |
add(createTablePanel(), BorderLayout.CENTER); | |
add(createMgmntButtonsPanel(), BorderLayout.SOUTH); | |
} | |
private void initColumnSizes(JTable table) { | |
TableColumn column = null; | |
for (int i = 0; i < 3; i++) { | |
column = table.getColumnModel().getColumn(i); | |
if ((i == 0) || (i == 1)) | |
column.setPreferredWidth(5); | |
if (i == 2) | |
column.setPreferredWidth(200); | |
} | |
} | |
private JPanel createInstallPanel() { | |
JPanel installPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5)); | |
installPanel.setBorder(BorderFactory.createEtchedBorder()); | |
installPanel.add(new JLabel("URL: "), BorderLayout.WEST); | |
urlTextField = new JTextField(35); | |
urlTextField.addActionListener(this); | |
installPanel.add(urlTextField, BorderLayout.CENTER); | |
installButton = new JButton("Install"); | |
installButton.setMnemonic('I'); | |
installButton.addActionListener(this); | |
installPanel.add(installButton, BorderLayout.EAST); | |
return installPanel; | |
} | |
private JScrollPane createTablePanel() { | |
table = new JTable(panelModel); | |
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); | |
table.getTableHeader().setReorderingAllowed(false); | |
initColumnSizes(table); | |
JScrollPane tablePanel = new JScrollPane(table); | |
tablePanel.setBorder(BorderFactory.createEtchedBorder()); | |
return tablePanel; | |
} | |
private JPanel createMgmntButtonsPanel() { | |
JPanel mgmntButtonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5)); | |
mgmntButtonsPanel.setBorder(BorderFactory.createEtchedBorder()); | |
startButton = new MyButton('S', "Start", this, mgmntButtonsPanel); | |
stopButton = new MyButton('p', "Stop", this, mgmntButtonsPanel); | |
updateButton = new MyButton('a', "Update", this, mgmntButtonsPanel); | |
refreshButton = new MyButton('R', "Refresh", this, mgmntButtonsPanel); | |
uninstallButton = new MyButton('U', "Uninstall", this, mgmntButtonsPanel); | |
return mgmntButtonsPanel; | |
} | |
public void actionPerformed(ActionEvent e) { | |
Object object = e.getSource(); | |
if ((object == installButton) || (object == urlTextField)) { | |
try { | |
String jarPath = urlTextField.getText(); | |
jarPath = jarPath.trim(); | |
panelModel.installButtonAction(jarPath); | |
} catch (Exception ex) { | |
JOptionPane.showMessageDialog(this, ex.getClass().getName(), | |
"Install Error", JOptionPane.ERROR_MESSAGE); | |
} | |
} else if (object == startButton) { | |
try { | |
panelModel.startButtonAction((Long) (table.getValueAt(table | |
.getSelectedRow(), 0))); | |
} catch (Exception ex) { | |
JOptionPane.showMessageDialog(this, ex.getClass().getName(), | |
"Start Error", JOptionPane.ERROR_MESSAGE); | |
} | |
} else if (object == stopButton) { | |
try { | |
panelModel.stopButtonAction((Long) (table.getValueAt(table | |
.getSelectedRow(), 0))); | |
} catch (Exception ex) { | |
/* | |
JOptionPane.showMessageDialog(this, ex.getClass().getName(), | |
"Stop Error", JOptionPane.ERROR_MESSAGE); | |
*/ | |
ex.printStackTrace(); | |
} | |
} else if (object == updateButton) { | |
try { | |
panelModel.updateButtonAction((Long) (table.getValueAt(table | |
.getSelectedRow(), 0))); | |
} catch (Exception ex) { | |
JOptionPane.showMessageDialog(this, ex.getClass().getName(), | |
"Update Error", JOptionPane.ERROR_MESSAGE); | |
} | |
} else if (object == refreshButton) { | |
try { | |
panelModel.refreshButtonAction(); | |
} catch (Exception ex) { | |
JOptionPane.showMessageDialog(this, ex.getClass().getName(), | |
"Refresh Error", JOptionPane.ERROR_MESSAGE); | |
} | |
} else if (object == uninstallButton) { | |
try { | |
panelModel.uninstallButtonAction((Long) (table.getValueAt(table | |
.getSelectedRow(), 0))); | |
} catch (Exception ex) { | |
JOptionPane.showMessageDialog(this, ex.getClass().getName(), | |
"Uninstall Error", JOptionPane.ERROR_MESSAGE); | |
} | |
} | |
} | |
static class MyButton extends JButton { | |
private int W = 85; | |
private int H = 25; | |
public MyButton(char c, String name, BundlesProbesTabUI listener, JPanel panel) { | |
super.setText(name); | |
super.setMnemonic(c); | |
super.setMinimumSize(new Dimension(W, H)); | |
super.setPreferredSize(new Dimension(W, H)); | |
super.setMaximumSize(new Dimension(W, H)); | |
super.addActionListener(listener); | |
panel.add(this); | |
} | |
} | |
} |