Package org.apache.felix.mosgi.console.gui

Source Code of org.apache.felix.mosgi.console.gui.NodePanel

/*
* 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.console.gui;

import org.apache.felix.mosgi.console.ifc.Plugin;
import org.apache.felix.mosgi.console.ifc.CommonPlugin;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceReference;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.net.URLClassLoader;
import java.rmi.server.RMIClassLoader;
import java.rmi.server.RMIClassLoaderSpi;
import java.security.SecureClassLoader;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;
import java.util.Set;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.JTabbedPane;
import java.lang.IllegalStateException;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.ReflectionException;
//import javax.management.MalformedObjectNameException;

public class NodePanel extends JTabbedPane implements PropertyChangeListener, ChangeListener {
  //private String repo;
  private Activator a=null;
  private BundleContext m_context=null;
 
  private Hashtable pluginList=null;

  public NodePanel(Activator activator, BundleContext context){
    this.m_context=context;
    this.a=activator;
    a.addPropertyChangeListener(this);
    this.pluginList=new Hashtable();
    //repo = m_context.getProperty("mosgi.jmxconsole.repository");
    this.addChangeListener(this);
  }

  //////////////////////////////////////
  // ChangeListener Implementation    //
  //////////////////////////////////////
  public void stateChanged(ChangeEvent e){
    //   System.out.println("coucou => "+((JTabbedPane)e.getSource()).getSelectedIndex()+":"+((JTabbedPane)e.getSource()).getSelectedComponent().getName());
    if (this.getSelectedComponent()!=null){
      a.firePropertyChangedEvent(Plugin.PLUGIN_ACTIVATED, null, this.getSelectedComponent().getName());
    }
  }

  /////////////////////////////////////////
  //   PropertyChangeListener Impl.      //
  /////////////////////////////////////////
  public void propertyChange(PropertyChangeEvent event) {
    //System.out.println("   PCE : "+event.getPropertyName());
    if (event.getPropertyName().equals(Plugin.PLUGIN_ADDED)) {
      Plugin cp=(Plugin) event.getNewValue();
      this.add(cp.getName(), cp.getGUI());
      System.out.println("Add gui \""+cp.getName()+"\" into NodePanel"/*+" :: "+cp.getGUI()*/);     
      this.a.addPropertyChangeListener(cp);
      this.pluginList.put(cp.pluginLocation(), cp);
    }else if(event.getPropertyName().equals(Plugin.PLUGIN_REMOVED)) {
      Plugin cp = (Plugin) event.getNewValue();
      String cpLoc=cp.pluginLocation();
      this.remove(cp.getGUI());
      //this.a.removePropertyChangeListener(cp);
      //this.pluginList.remove(cpLoc);
    }else if(event.getPropertyName().equals(Plugin.EMPTY_NODE)) {
      //System.out.println("******* Debug No node selected");
      this.clean();
    }else if (event.getPropertyName().equals(Plugin.NEW_NODE_SELECTED)) {
      /* Update the tabs (Plugin) in the JTabbedPane (NodePanel) */
      MBeanServerConnection mbsc = (MBeanServerConnection)event.getNewValue();
      String connString = (String) event.getOldValue();
      startMBeanTabBundles(connString, mbsc);
    }else if (event.getPropertyName().equals(CommonPlugin.COMMON_PLUGIN_ADDED)) {
      Iterator it = Gateway.HT_GATEWAY.values().iterator();
      while (it.hasNext()) {
        Gateway g = (Gateway) it.next();
  if ( g.isConnected() ) {
          a.firePropertyChangedEvent(Plugin.NEW_NODE_CONNECTION, g.toString(), g.getMbsc());
        }
      }
    }
  }

  private void startMBeanTabBundles(String connString, MBeanServerConnection mbsc) {
    try {
      this.clean();
      Set set_on = mbsc.queryNames( null, null ); // ioe
      Object[] ons=set_on.toArray();
      int oldUnstartedBundleNbr=0;

      do {
        Vector v_unstartedBundle=new Vector();
        oldUnstartedBundleNbr=ons.length;
  for (int i=0;i<ons.length;i++) {
    ObjectName name= (ObjectName) ons[i];
          if ( "TabUI".equals(name.getDomain()) ) {
            /* Get the plugin implementation via a bundle */
      try {
              String tabBundle = (String) mbsc.getAttribute(name, "BundleName"); // mbe, anfe, be, infe, re
              if (tabBundle!=null){
                Plugin p = (Plugin) this.pluginList.get(tabBundle);
                if (p == null){
                  Bundle b = m_context.installBundle(tabBundle); // be
                  try {
              b.start(); // be2
                    System.out.println(" - Bundle started: \""+name.toString()+"\" - "+tabBundle);
            }catch(BundleException be2) { // be2
                    System.out.println(" - Unable to start: \""+name.toString()+"\" - "+tabBundle);
        be2.printStackTrace();
        v_unstartedBundle.add(name);
            }
                }else {
                  System.out.println(" - Register service plugin: "+p);
                  p.registerServicePlugin();
                }
/*              ServiceReference[] sr = b.getRegisteredServices();
*              System.out.println(sr);
*              Plugin p;
*              for (int j=0 ; j < sr.length ; j++) {
*                p=(Plugin)m_context.getService(sr[j]);
*                this.add(p.getName(), p.getGUI());
*                this.a.addPropertyChangeListener(p);
*              }
*
*              System.out.println("Delegation for this");
*              printcl = this.getClass().getClassLoader();
*              while (printcl != null) {
*                System.out.println(printcl);
*                printcl = printcl.getParent();
*              }
*              System.out.println("{bootstrap loader}");
*              System.out.println("");
*
*              // Get the tab object
*              Object tabObj = mbsc.getAttribute(name, "Tab");
*
*              System.out.println("Delegation for tabObj: " + tabObj);
*              printcl = tabObj.getClass().getClassLoader();
*              while (printcl != null) {
*                System.out.println(printcl);
*                printcl = printcl.getParent();
*              }
*              System.out.println("{bootstrap loader}");
*              System.out.println("");
*              System.out.println("tabObj.getName(): " + ((fr.inria.ares.managedelements.testprobe.tab.TestProbeTabUI) tabObj).getName());
*             
*              // Cast the tab  
*              Plugin tab = (Plugin)tabObj;
*              // register the tab on the JTabbedPane
*              this.add(tab.getName(), tab.getGUI());
*/
              } else{
          System.out.println(" - No bundleName attribute defined for \""+name.toString()+"\". I cannot install tab");
              }
            }catch (MBeanException mbe) { mbe.printStackTrace(); // mbe
      }catch (AttributeNotFoundException anfe) { anfe.printStackTrace(); // anfe
      }catch (BundleException be) { be.printStackTrace(); // be
      }catch (InstanceNotFoundException infe) { infe.printStackTrace(); // infe
      }catch (ReflectionException re) { re.printStackTrace(); // re
      }
    }
        }
  ons=v_unstartedBundle.toArray();
      }while ( oldUnstartedBundleNbr != ons.length );

    }catch (IOException ioe) { ioe.printStackTrace(); // ioe
    }
    a.firePropertyChangedEvent(Plugin.NEW_NODE_READY, connString, mbsc);
    a.firePropertyChangedEvent(Plugin.PLUGIN_ACTIVATED, null, this.getComponentAt(0).getName());
  }

  private void clean(){
    this.removeAll();
    Vector pluginList_tmp=new Vector();
    for ( Iterator i=pluginList.keySet().iterator(); i.hasNext();) {
      Object o=i.next();
      pluginList_tmp.add(o);
    }
    for ( int i = 0 ; i < pluginList_tmp.size() ; i++) {
      Plugin p=(Plugin) pluginList.get(pluginList_tmp.elementAt(i));
      try {
        p.unregisterServicePlugin();
      } catch (Exception ex) {
  //System.out.println("\""+p.getName()+"\" : "+ex);
      }
    }
  }

}
TOP

Related Classes of org.apache.felix.mosgi.console.gui.NodePanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.