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

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

/*
*
* 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 java.awt.Dimension;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JRootPane;
import javax.swing.JSplitPane;
import javax.swing.event.EventListenerList;

import org.apache.felix.mosgi.console.ifc.Plugin;
import org.apache.felix.mosgi.console.ifc.CommonPlugin;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.InvalidSyntaxException;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Activator implements BundleActivator {
  protected BundleContext m_context = null;

  protected ArrayList m_pluginList = null;
  protected ArrayList m_commonpluginList = null//TODO Do I need this table ?
  private EventListenerList m_listenerList = null;
 
  private JFrame m_frame = null;
  private NodesTree nodesTree=null;

  public Activator() {
    m_pluginList = new ArrayList();
    m_commonpluginList = new ArrayList();
    m_listenerList = new EventListenerList();
  }

  ///////////////////////////////////////
  //         BundleActivator           //
  ///////////////////////////////////////
  public void start(BundleContext context) {
    m_context = context;

    // Listen for factory service events.
    ServiceListener sl = new ServiceListener() {
      public void serviceChanged(ServiceEvent event) {
        ServiceReference ref = event.getServiceReference();
        Object svcObj = m_context.getService(ref);
        if (event.getType() == ServiceEvent.REGISTERED) {
          synchronized (Activator.this) {
            // !!!!!!!!!! ORDER MATTERS (Inheritance pb)
            if (!m_pluginList.contains(svcObj)) {
              if(svcObj instanceof CommonPlugin){
                m_commonpluginList.add(svcObj);
                firePropertyChangedEvent(CommonPlugin.COMMON_PLUGIN_ADDED, null, svcObj);
              }else if (svcObj instanceof Plugin){
                m_pluginList.add(svcObj);
                firePropertyChangedEvent(Plugin.PLUGIN_ADDED, null, svcObj);
              }
            }
          }
        } else if (event.getType() == ServiceEvent.UNREGISTERING) {
          synchronized (Activator.this) {
            removePropertyChangeListener((PropertyChangeListener)svcObj);
            if(svcObj instanceof CommonPlugin){
              m_commonpluginList.remove(svcObj);
              firePropertyChangedEvent(CommonPlugin.COMMON_PLUGIN_REMOVED, null, svcObj);
            }else if (svcObj instanceof Plugin){
              m_pluginList.remove(svcObj);
              firePropertyChangedEvent(Plugin.PLUGIN_REMOVED, null, svcObj);
            }
          }
        } else {
          m_context.ungetService(ref);
        }
      }
    };
    try {
      m_context.addServiceListener(sl,
           "(|(objectClass="
           + Plugin.class.getName()
           + ")(objectClass="
           + CommonPlugin.class.getName()+"))");
    }
    catch (InvalidSyntaxException ex) {
      System.err.println("ShellGuiActivator: Cannot add service listener.");
      System.err.println("ShellGuiActivator: " + ex);
    }

    // Create and display the frame.
    if (m_frame == null) {
      m_frame=new JFrame("OSGi GUI Remote Manager");
      m_frame.setUndecorated(true);
      m_frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
      m_frame.setIconImage(Toolkit.getDefaultToolkit().getImage(m_context.getBundle().getResource("images/logo.gif")));
      //m_frame.setResizable(false);
      //m_frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      // TODO : add a windowListener and use a Preferences service to save screen size
      m_frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent we) {
          JFrame jf=(JFrame) we.getWindow();
          System.out.println(" Console.gui : window closing ("+jf.getSize().height+"*"+jf.getSize().width+")");
        }
        public void windowClosed(WindowEvent we) {
          JFrame jf=(JFrame) we.getWindow();
          System.out.println(" Console.gui : window closed ("+jf.getSize().height+"*"+jf.getSize().width+")");
        }
      });
     
      Dimension maxdim = m_frame.getToolkit().getScreenSize();
      int m_width=maxdim.width-100;
      int m_height=maxdim.height-100;
      m_frame.setBounds( (int) ((maxdim.width-m_width)/2), 20, m_width, m_height);
          
      //Right panel
      JSplitPane rightSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new NodePanel(this, context) , new CommonPanel(this));
      rightSplitPane.setOneTouchExpandable(true);
      rightSplitPane.setDividerLocation((int) (m_height*2/3));

      //General Panel
      this.nodesTree = new NodesTree(this, context);
      JSplitPane gSplitPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, this.nodesTree , rightSplitPane);
      gSplitPane.setOneTouchExpandable(true);
      gSplitPane.setDividerLocation((int) (m_width/4));

      m_frame.getContentPane().add(gSplitPane);
    }

    // Now try to manually initialize the plugin list
    // since some might already be available.
    // initializePlugins();
   
    m_frame.setVisible(true);
    this.nodesTree.runDiscovery();
  }
  public void stop(BundleContext context) {
    if (m_frame != null) {
      this.nodesTree.stop();
      m_frame.setVisible(false);
      m_frame.dispose();
      m_frame = null;
    }
  }

  ////////////////////////////////////
  //
  ////////////////////////////////////
  /*private synchronized void initializePlugins() { // Never used ?
    System.out.println("??? private synchronized void initializePlugins() ???");
    try {
      // Get all model services.
      Object svcObj=null;
      ServiceReference refs[] = m_context.getServiceReferences(Plugin.class.getName(), null);
      if (refs != null) {
        // Add model services to list, ignore duplicates.
        for (int i = 0; i < refs.length; i++) {
          svcObj = m_context.getService(refs[i]);
          if (!m_pluginList.contains(svcObj)) {
            m_pluginList.add(svcObj);
            firePropertyChangedEvent(Plugin.PLUGIN_ADDED, null, (Plugin)svcObj);
          }
        }
      }
      // Get all common plugins
      refs = m_context.getServiceReferences(CommonPlugin.class.getName(), null);
      if (refs != null) {
        for (int i = 0; i < refs.length; i++) {
          svcObj = m_context.getService(refs[i]);
          if (!m_commonpluginList.contains(svcObj)) {
            m_commonpluginList.add(svcObj);
            firePropertyChangedEvent(CommonPlugin.COMMON_PLUGIN_ADDED, null, (CommonPlugin)svcObj);
          }
        }
      }
    } catch (Exception ex) {
      System.err.println("ShellGuiActivator: Error initializing model list.");
      System.err.println("ShellGuiActivator: " + ex);
      ex.printStackTrace();
    }
  }*/

  //////////////////////////////
  // Event methods.           //
  //////////////////////////////
  public void addPropertyChangeListener(PropertyChangeListener l) {
    m_listenerList.add(PropertyChangeListener.class, l);
  }

  public void removePropertyChangeListener(PropertyChangeListener l) {
    m_listenerList.remove(PropertyChangeListener.class, l);
  }

  public void firePropertyChangedEvent(String name, Object oldValue, Object newValue) {
    //System.out.println("[Gui Activator] fire PCE("+name+","+oldValue+","+newValue+")");
    PropertyChangeEvent event = null;
    // Guaranteed to return a non-null array
    Object[] listeners = m_listenerList.getListenerList();

    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length - 2; i >= 0; i -= 2) {
      if (listeners[i] == PropertyChangeListener.class) {
        // Lazily create the event:
        if (event == null) {
          event = new PropertyChangeEvent(this, name, oldValue, newValue);
        }
        ((PropertyChangeListener) listeners[i + 1]).propertyChange(event);
      }
    }
  }

}
TOP

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

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.