/* * 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.login; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.openscada.core.ui.connection.login.internal.SessionManagerImpl; 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.login"; //$NON-NLS-1$ // The shared instance private static Activator plugin; private SessionManager sessionManager; /** * The constructor */ public Activator () { } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ @Override public void start ( final BundleContext context ) throws Exception { super.start ( context ); this.sessionManager = new SessionManagerImpl ( SWTObservables.getRealm ( getWorkbench ().getDisplay () ) ); plugin = this; } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ @Override public void stop ( final BundleContext context ) throws Exception { plugin = null; this.sessionManager.getRealm ().exec ( new Runnable () { public void run () { Activator.this.sessionManager.dispose (); Activator.this.sessionManager = null; } } ); super.stop ( context ); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault () { return plugin; } public LoginContext[] getContextList () { final List<LoginContext> result = new LinkedList<LoginContext> (); for ( final IConfigurationElement ele : Platform.getExtensionRegistry ().getConfigurationElementsFor ( "org.openscada.core.ui.connection.login.context" ) ) //$NON-NLS-1$ { if ( !"context".equals ( ele.getName () ) ) //$NON-NLS-1$ { continue; } final String name = ele.getAttribute ( "label" ); //$NON-NLS-1$ final String id = ele.getAttribute ( "id" ); //$NON-NLS-1$ // get properties final Map<String, String> properties = new HashMap<String, String> (); for ( final IConfigurationElement child : ele.getChildren ( "property" ) )//$NON-NLS-1$ { final String key = child.getAttribute ( "key" );//$NON-NLS-1$ final String value = child.getAttribute ( "value" );//$NON-NLS-1$ if ( key != null && value != null ) { properties.put ( key, value ); } } final Collection<LoginFactory> factories = new LinkedList<LoginFactory> (); fillFactories ( factories, ele ); if ( id != null && name != null && !factories.isEmpty () ) { result.add ( new LoginContext ( id, name, factories, properties ) ); } } return result.toArray ( new LoginContext[result.size ()] ); } private void fillFactories ( final Collection<LoginFactory> factories, final IConfigurationElement ele ) { for ( final IConfigurationElement child : ele.getChildren ( "factory" ) ) //$NON-NLS-1$ { try { final LoginFactory factory = (LoginFactory)child.createExecutableExtension ( "class" );//$NON-NLS-1$ if ( factory != null ) { factories.add ( factory ); } } catch ( final Exception e ) { getLog ().log ( new Status ( IStatus.WARNING, PLUGIN_ID, Messages.Activator_ErrorParse, e ) ); } } } public synchronized void setLoginSession ( final LoginSession session ) { this.sessionManager.setSession ( session ); } public void setLoginSession ( final String username, final String password, final LoginContext loginContext, final Collection<LoginHandler> handler ) { setLoginSession ( new LoginSession ( getBundle ().getBundleContext (), username, password, loginContext, handler ) ); } public SessionManager getSessionManager () { return this.sessionManager; } }