/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.ui.rcp.sourceprovider; import java.util.HashMap; import java.util.Map; import org.eclipse.jubula.client.core.events.DataChangedEvent; import org.eclipse.jubula.client.core.events.DataEventDispatcher; import org.eclipse.jubula.client.core.events.DataEventDispatcher.IDataChangedListener; import org.eclipse.jubula.client.core.events.DataEventDispatcher.IProjectLoadedListener; import org.eclipse.jubula.client.core.model.IProjectPO; import org.eclipse.jubula.client.core.persistence.GeneralStorage; import org.eclipse.jubula.client.core.persistence.Persistor; import org.eclipse.jubula.client.core.utils.DatabaseStateDispatcher; import org.eclipse.jubula.client.core.utils.DatabaseStateEvent; import org.eclipse.jubula.client.core.utils.IDatabaseStateListener; import org.eclipse.jubula.client.ui.rcp.controllers.MultipleTCBTracker; import org.eclipse.ui.ISources; /** * Provides variables related to the active Project. * * @author BREDEX GmbH * @created Apr 30, 2009 */ public class ActiveProjectSourceProvider extends AbstractJBSourceProvider implements IProjectLoadedListener, IDataChangedListener, IDatabaseStateListener { /** * ID of variable that indicates whether a Project is currently active/open. */ public static final String IS_PROJECT_ACTIVE = "org.eclipse.jubula.client.ui.rcp.variable.isProjectActive"; //$NON-NLS-1$ /** * ID of variable that indicates whether a Project is currently protected. */ public static final String IS_PROJECT_PROTECTED = "org.eclipse.jubula.client.ui.rcp.variable.isProjectProtected"; //$NON-NLS-1$ /** * ID of variable that indicates whether a database connection is currently established. */ public static final String IS_DB_CONNECTION_ESTABLISHED = "org.eclipse.jubula.client.ui.rcp.variable.isConnectionToDatabaseEstablished"; //$NON-NLS-1$ /** * ID of variable that indicates whether multiple test case browser instances are open. */ public static final String ARE_MULTIPLE_TCB_OPEN = "org.eclipse.jubula.client.ui.rcp.variable.areMultipleTCBOpen"; //$NON-NLS-1$ /** * Constructor. */ public ActiveProjectSourceProvider() { final DataEventDispatcher ded = DataEventDispatcher.getInstance(); ded.addProjectLoadedListener(this, true); ded.addDataChangedListener(this, true); DatabaseStateDispatcher.addDatabaseStateListener(this); MultipleTCBTracker.getInstance().setProvider(this); } /** * * {@inheritDoc} */ public void dispose() { final DataEventDispatcher ded = DataEventDispatcher.getInstance(); ded.removeProjectLoadedListener(this); ded.removeDataChangedListener(this); DatabaseStateDispatcher.removeDatabaseStateListener(this); MultipleTCBTracker.getInstance().setProvider(null); } /** * * {@inheritDoc} */ public Map<String, Object> getCurrentState() { Map<String, Object> currentState = new HashMap<String, Object>(); IProjectPO cuProject = GeneralStorage.getInstance().getProject(); currentState.put(IS_PROJECT_ACTIVE, cuProject != null); boolean isProjectProtected = false; if (cuProject != null) { isProjectProtected = cuProject.getIsProtected(); } currentState.put(IS_PROJECT_PROTECTED, isProjectProtected); currentState.put(IS_DB_CONNECTION_ESTABLISHED, Persistor.instance() != null ? true : false); currentState.put(ARE_MULTIPLE_TCB_OPEN, MultipleTCBTracker.getInstance().getOpenTCBs().size() > 1); return currentState; } /** * * {@inheritDoc} */ public String[] getProvidedSourceNames() { return new String[] { IS_PROJECT_ACTIVE, IS_PROJECT_PROTECTED, IS_DB_CONNECTION_ESTABLISHED, ARE_MULTIPLE_TCB_OPEN }; } /** * {@inheritDoc} */ public void handleProjectLoaded() { fireSourceChanged(); } /** {@inheritDoc} */ public void handleDataChanged(DataChangedEvent... events) { fireSourceChanged(); } /** * Fires a source changed event for <code>IS_PROJECT_ACTIVE</code>, * <code>IS_PROJECT_PROTECTED</code> and * <code>IS_DB_CONNECTION_ESTABLISHED</code> */ private void fireSourceChanged() { IProjectPO cuProject = GeneralStorage.getInstance().getProject(); boolean isProjectProtected = false; if (cuProject != null) { isProjectProtected = cuProject.getIsProtected(); } gdFireSourceChanged(ISources.WORKBENCH, IS_PROJECT_ACTIVE, cuProject != null); gdFireSourceChanged(ISources.WORKBENCH, IS_PROJECT_PROTECTED, isProjectProtected); gdFireSourceChanged(ISources.WORKBENCH, IS_DB_CONNECTION_ESTABLISHED, Persistor.instance() != null ? true : false); gdFireSourceChanged(ISources.WORKBENCH, ARE_MULTIPLE_TCB_OPEN, MultipleTCBTracker.getInstance().getOpenTCBs().size() > 1); } /** * {@inheritDoc} */ public void reactOnDatabaseEvent(DatabaseStateEvent e) { fireSourceChanged(); } }