Package org.apache.felix.mosgi.managedelements.obrprobe.tab

Source Code of org.apache.felix.mosgi.managedelements.obrprobe.tab.ObrProbeTabUI$SimpleTableModel

/*
* 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.obrprobe.tab;

import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import java.util.Vector;
import java.util.StringTokenizer;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.table.AbstractTableModel;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import java.io.PrintStream;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.InvalidSyntaxException;

//import org.apache.felix.bundlerepository.BundleRepository;
//import org.apache.felix.bundlerepository.BundleRecord;
import org.osgi.service.obr.RepositoryAdmin;
import org.osgi.service.obr.Repository;
import org.osgi.service.obr.Resource;


import javax.management.openmbean.ArrayType;
import javax.management.openmbean.SimpleType;

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

public class ObrProbeTabUI extends JPanel implements Plugin, BundleActivator {
  private static final String OSGI_ON="TabUI:name=ObrProbe";

  private MBeanServerConnection mbsc=null;

  private BundleContext m_context = null;
  private ServiceReference m_brsRef = null;
  private RepositoryAdmin m_brs = null;

  private JTextField m_urlField = null;
  private JButton m_refreshButton = null;
  private JTable m_bundleTable = null;
  private JButton m_startAllButton = null;
  private JButton m_infoButton = null;

  private ObjectName osgiON=null;

  private PrintStream m_out=System.out;
  private ServiceRegistration sreg=null;

  ///////////////////////////////////////////
  //           BundleActivator             //
  ///////////////////////////////////////////
  public void start(BundleContext context) throws BundleException {
    m_context = context;
    try {
      this.init();
    }catch(Exception e){
      e.printStackTrace();
      throw new BundleException("ObrTabUIException "+e.getMessage());
    }
    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 "Remote OBR";}

  public Component getGUI(){return this;}

  public void propertyChange(PropertyChangeEvent e){
//System.out.println("TEST"+e.getPropertyName()); 
   if (e.getPropertyName().equals(Plugin.NEW_NODE_READY)){
     this.mbsc=(MBeanServerConnection)e.getNewValue();
//System.out.println("TESTE"+this.mbsc); 
   }else if(e.getPropertyName().equals(Plugin.EMPTY_NODE)){
     this.mbsc=null;
   }
  }

  /////////////////////
  // Plugin elements //
  /////////////////////
  private void init() throws Exception {
    this.osgiON=new ObjectName(OSGI_ON);
    ServiceListener sl = new ServiceListener() {
      public void serviceChanged(ServiceEvent event) {
        synchronized (ObrProbeTabUI.this) {
          // Ignore additional services if we already have one.
          if ((event.getType() == ServiceEvent.REGISTERED)
              && (m_brsRef != null)) {
            return;
          }
          // Initialize the service if we don't have one.
          else if ((event.getType() == ServiceEvent.REGISTERED)
            && (m_brsRef == null)) {
            initializeService();
          }
          // Unget the service if it is unregistering.
          else if ((event.getType() == ServiceEvent.UNREGISTERING)
            && event.getServiceReference().equals(m_brsRef)) {
            m_context.ungetService(m_brsRef);
            m_brsRef = null;
            m_brs = null;
            // Try to get another service.
            initializeService();
          }
        }
      }
    };
    try {
      m_context.addServiceListener(sl, "(objectClass=" + RepositoryAdmin.class.getName() + ")");
    } catch (InvalidSyntaxException ex) {
      System.err.println("OBRPlugin: " + ex);
    }

    // Create the gui.
    createUserInterface();

    // Now try to manually initialize the shell service
    // since one might already be available.
    initializeService();
  }

  private synchronized void initializeService() {
    if (m_brs != null) {
      return;
    }
    m_brsRef = m_context.getServiceReference(RepositoryAdmin.class.getName());
    if (m_brsRef == null) {
      m_urlField.setText("");
    } else {
      m_brs = (RepositoryAdmin) m_context.getService(m_brsRef);
      m_urlField.setText(convertArrayToString(m_brs.listRepositories()));
    }
    // Update the table.
    ((SimpleTableModel) m_bundleTable.getModel()).update();
  }

  private void createUserInterface() {
    setLayout(new BorderLayout());
    add(createBRUrlPanel(), BorderLayout.NORTH);
    add(createTable(), BorderLayout.CENTER);
    add(createButtonPanel(), BorderLayout.SOUTH);
    createEventListeners();
  }

  private JPanel createBRUrlPanel(){
    JPanel panel=new JPanel(new FlowLayout());
    panel.add(new JLabel("URL(s)"));
    panel.add(m_urlField = new JTextField(20));
    panel.add(m_refreshButton = new JButton("Refresh"));
    m_refreshButton.setMnemonic('I');
    return panel;
  }

  private JScrollPane createTable() {
    JScrollPane scroll = new JScrollPane(m_bundleTable = new JTable());
    scroll.setPreferredSize(new Dimension(100, 100));
    m_bundleTable.setMinimumSize(new Dimension(0, 0));
    m_bundleTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
    m_bundleTable.setModel(new SimpleTableModel());
    m_bundleTable.getColumnModel().getColumn(0).setPreferredWidth(75);
    m_bundleTable.getColumnModel().getColumn(1).setPreferredWidth(75);
    m_bundleTable.getColumnModel().getColumn(2).setPreferredWidth(200);
    return scroll;
  }

  private JPanel createButtonPanel() {
    JPanel panel = new JPanel(new FlowLayout());
    panel.add(m_startAllButton = new JButton("Start all"));
    panel.add(m_infoButton = new JButton("Info"));
    m_startAllButton.setMnemonic('S');
    m_infoButton.setMnemonic('I');
    return panel;
  }

  private void createEventListeners() {
    // Create action listeners.
    m_refreshButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
    /*
        synchronized (ObrProbeTabUI.this) {
          if (m_brs == null) {
            return;
          } else if (m_urlField.getText().length() > 0) {
            m_brs.setRepositoryURLs(convertStringToArray(m_urlField.getText()));
          } else {
            m_urlField.setText(convertArrayToString(m_brs.getRepositoryURLs()));
          }
          // Update the table.
          ((SimpleTableModel) m_bundleTable.getModel()).update();
        }
    */
      }
    });

    m_startAllButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        synchronized (ObrProbeTabUI.this) {
         if (mbsc == null) {
System.out.println("coucou");   
           return;
         }
         int[] rows = m_bundleTable.getSelectedRows();
         for (int i = 0; i < rows.length; i++) {
       //Object [] tabo=new Object[]{(String) m_brs.getBundleRecord(rows[i]).getAttribute(BundleRecord.BUNDLE_UPDATELOCATION)};
           try{
         /*
             BundleRecord[] m_records=m_brs.getBundleRecords();
             Object [] tabo=new Object[]{(String) m_records[rows[i]].getAttribute(BundleRecord.BUNDLE_SYMBOLICNAME), parseVersionString((String) m_records[rows[i]].getAttribute(BundleRecord.BUNDLE_VERSION))};
             String [] tabc=new String[]{String.class.getName(),new ArrayType(1, SimpleType.INTEGER).getTypeName()};
         */
             Object [] tabo=new Object[]{(String)m_bundleTable.getValueAt(rows[i], 0), (String)m_bundleTable.getValueAt(rows[i], 1)};
         String [] tabc=new String[]{String.class.getName(),String.class.getName()};
System.out.println("====>"+m_bundleTable.getValueAt(rows[i], 0));
System.out.println("====>"+m_bundleTable.getValueAt(rows[i], 1));
             mbsc.invoke(osgiON, "deploy", tabo, tabc);
       }catch(Exception e){
         e.printStackTrace();
       }
         }
         m_out.println("");
        }
      }
      });
  

      m_infoButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
      /*
          synchronized (ObrProbeTabUI.this) {
            if (m_brs == null) {
              return;
            }
            int[] rows = m_bundleTable.getSelectedRows();
            for (int i = 0; i < rows.length; i++) {
              if (i != 0) {
                m_out.println("");
              }
              BundleRecord br = m_brs.getBundleRecords()[i];
              br.printAttributes(m_out);
            }
            m_out.println("");
          }
    */
        }
      });
  }

    private String[] convertStringToArray(String str) {
      String[] strs = null;
      StringTokenizer st = new StringTokenizer(str);
      if (st.countTokens() > 0) {
        strs = new String[st.countTokens()];
        for (int i = 0; (strs != null) && (i < strs.length); i++) {
          strs[i] = st.nextToken();
        }
      }
      return strs;
    }

    private String convertArrayToString(Repository[] strs) {
      StringBuffer str = new StringBuffer();
      for (int i = 0; (strs != null) && (i < strs.length); i++) {
        // Add space between URLs.
        if (i != 0) {
          str = str.append(" ");
        }
        str.append(strs[i].getURL());
      }
      return str.toString();
    }

    public static Integer[] parseVersionString(String s) {
      Integer[] version = new Integer[] { new Integer(0), new Integer(0), new Integer(0) };
      if (s != null) {
        StringTokenizer st = new StringTokenizer(s, ".");
        if (st.hasMoreTokens()) {
          try {
            version[0] = new Integer(st.nextToken());
            if (st.hasMoreTokens()) {
              version[1] = new Integer(st.nextToken());
              if (st.hasMoreTokens()) {
                version[2] = new Integer(st.nextToken());
              }
            }
            return version;
          } catch (NumberFormatException ex) {
            throw new IllegalArgumentException( "Improper version number.");
          }
        }
      }
     return version;
    }

    private class SimpleTableModel extends AbstractTableModel {
      public int getRowCount() {
        if (m_brs==null){
          return 0;
    }else{
      try {
        Resource[] resources = m_brs.discoverResources("(|(presentationname=*)(symbolicname=*))");
            return resources.length;
      }catch(Exception e){
        System.out.println("OBR not working, network problem ?");
        //e.printStackTrace();
        return 0;
      }
    }
      }

      public int getColumnCount() {
        return 3;
      }

      public String getColumnName(int column) {
        if (column == 0) {
          return "Name";
        } else if (column == 1) {
          return "Version";
        } else if (column == 2) {
          return "Description";
        }   
        return "";
      }

      public Class getColumnClass(int column) {
        return String.class;
      }

      public boolean isCellEditable(int row, int column) {
        return false;
      }

      public Object getValueAt(int row, int column) {
        Resource br = null;
        synchronized (ObrProbeTabUI.this) {
          if (m_brs != null) {
        br=m_brs.discoverResources("(|(presentationname=*)(symbolicname=*))")[row];
          }
        }
        if (br != null) {
          if (column == 0) {
            return br.getPresentationName();
          } else if (column == 1) {
            return br.getVersion().toString();
          } else if (column == 2) {
            return br.getSymbolicName();
          }
        }
        return null;
      }
               
      public void update() {
        fireTableDataChanged();
      }
    }
  }
TOP

Related Classes of org.apache.felix.mosgi.managedelements.obrprobe.tab.ObrProbeTabUI$SimpleTableModel

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.