/* * This file is part of the OpenSCADA project * Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com) * * OpenSCADA is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenSCADA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenSCADA. If not, see * <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License. */ package org.openscada.core.ui.connection; import java.util.HashMap; import java.util.Map; import org.eclipse.core.databinding.observable.Observables; import org.eclipse.core.databinding.observable.set.IObservableSet; import org.eclipse.core.databinding.observable.set.ObservableSet; import org.eclipse.core.databinding.observable.set.WritableSet; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.openscada.core.ui.connection.data.ConnectionDiscovererAdapterFactory; import org.openscada.core.ui.connection.data.ConnectionDiscovererBean; import org.openscada.core.ui.connection.data.ConnectionHolder; import org.openscada.core.ui.connection.data.ConnectionHolderAdapterFactory; import org.osgi.framework.BundleContext; /** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { // The plug-in ID public static final String PLUGIN_ID = "org.openscada.core.ui.connection"; public static final String EXTP_CONNECTON_DISCOVERER = "org.openscada.core.ui.connection.discoverer"; private static final String ELE_DISCOVERER = "discoverer"; // The shared instance private static Activator plugin; private ObservableSet discoverers; private final Map<Class<?>, IAdapterFactory> adaperFactories = new HashMap<Class<?>, IAdapterFactory> (); public static final Root ROOT = new Root (); /** * The constructor */ public Activator () { this.adaperFactories.put ( ConnectionDiscovererBean.class, new ConnectionDiscovererAdapterFactory () ); this.adaperFactories.put ( ConnectionHolder.class, new ConnectionHolderAdapterFactory () ); } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ public void start ( final BundleContext context ) throws Exception { super.start ( context ); plugin = this; for ( final Map.Entry<Class<?>, IAdapterFactory> entry : this.adaperFactories.entrySet () ) { Platform.getAdapterManager ().registerAdapters ( entry.getValue (), entry.getKey () ); } } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ public void stop ( final BundleContext context ) throws Exception { for ( final Map.Entry<Class<?>, IAdapterFactory> entry : this.adaperFactories.entrySet () ) { Platform.getAdapterManager ().unregisterAdapters ( entry.getValue (), entry.getKey () ); } plugin = null; super.stop ( context ); } public IObservableSet getDiscovererSet () { synchronized ( this ) { if ( this.discoverers == null ) { this.discoverers = createDiscoverers (); } return Observables.proxyObservableSet ( this.discoverers ); } } private ObservableSet createDiscoverers () { final WritableSet result = new WritableSet ( SWTObservables.getRealm ( this.getWorkbench ().getDisplay () ) ); for ( final IConfigurationElement ele : Platform.getExtensionRegistry ().getConfigurationElementsFor ( EXTP_CONNECTON_DISCOVERER ) ) { if ( ELE_DISCOVERER.equals ( ele.getName () ) ) { final String id = ele.getAttribute ( "id" ); String name = ele.getAttribute ( "name" ); if ( name == null ) { name = id; } final String icon = ele.getAttribute ( "icon" ); ImageDescriptor imageDescriptor = null; if ( icon != null ) { imageDescriptor = Activator.imageDescriptorFromPlugin ( ele.getContributor ().getName (), icon ); } // create try { final ConnectionDiscovererBean bean = new ConnectionDiscovererBean ( id, name, imageDescriptor, (ConnectionDiscoverer)ele.createExecutableExtension ( "class" ) ); result.add ( bean ); } catch ( final CoreException e ) { getLog ().log ( e.getStatus () ); } } } return result; } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault () { return plugin; } }