/******************************************************************************* * Copyright (c) 2011 Subgraph. * 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: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.application.workspaces; import java.util.HashMap; import java.util.Map; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.ISources; import com.subgraph.vega.api.events.IEvent; import com.subgraph.vega.api.events.IEventHandler; import com.subgraph.vega.api.model.IModel; import com.subgraph.vega.api.model.WorkspaceLockStatusEvent; import com.subgraph.vega.application.Activator; public class WorkspaceLockStateSourceProvider extends AbstractSourceProvider { final static String WORKSPACE_LOCK_STATE = "vega.workspaceLockState"; final static String WORKSPACE_LOCKED = "locked"; final static String WORKSPACE_UNLOCKED = "unlocked"; private boolean isLocked = false; public WorkspaceLockStateSourceProvider() { final IModel model = Activator.getDefault().getModel(); model.addWorkspaceListener(new IEventHandler() { @Override public void handleEvent(IEvent event) { if(event instanceof WorkspaceLockStatusEvent) handleWorkspaceLockStatus((WorkspaceLockStatusEvent) event); } }); } private void handleWorkspaceLockStatus(WorkspaceLockStatusEvent event) { boolean state = event.isLockEvent(); if(state != isLocked) { isLocked = state; fireSourceChanged(ISources.WORKBENCH, WORKSPACE_LOCK_STATE, getCurrentWorkspaceLockState()); } } @Override public void dispose() { } @Override synchronized public Map<?,?> getCurrentState() { Map<String, String> stateMap = new HashMap<String, String>(1); stateMap.put(WORKSPACE_LOCK_STATE, getCurrentWorkspaceLockState()); return stateMap; } private String getCurrentWorkspaceLockState() { if(isLocked) return WORKSPACE_LOCKED; else return WORKSPACE_UNLOCKED; } @Override public String[] getProvidedSourceNames() { return new String[] { WORKSPACE_LOCK_STATE }; } }