/*******************************************************************************
* 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.ui.scanner.commands;
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.scanner.IScanner;
import com.subgraph.vega.api.scanner.LockStatusEvent;
import com.subgraph.vega.ui.scanner.Activator;
public class ScannerStateSourceProvider extends AbstractSourceProvider implements IEventHandler {
final static String SCANNER_STATE = "vega.scannerState";
final static String SCANNER_RUNNING = "running";
final static String SCANNER_IDLE = "idle";
private boolean isRunning = false;
public ScannerStateSourceProvider() {
final IScanner scanner = Activator.getDefault().getScanner();
scanner.addLockStatusListener(this);
}
@Override
public void dispose() {
Activator.getDefault().getScanner().removeLockStatusListener(this);
}
@Override
synchronized public Map<?,?> getCurrentState() {
Map<String, String> stateMap = new HashMap<String, String>(1);
stateMap.put(SCANNER_STATE, getCurrentScannerState());
return stateMap;
}
synchronized void setScannerRunning() {
setScannerState(true);
}
synchronized void setScannerStopped() {
setScannerState(false);
}
private void setScannerState(boolean state) {
if(state != isRunning) {
isRunning = state;
fireSourceChanged(ISources.WORKBENCH, SCANNER_STATE, getCurrentScannerState());
}
}
private String getCurrentScannerState() {
if(isRunning)
return SCANNER_RUNNING;
else
return SCANNER_IDLE;
}
@Override
public String[] getProvidedSourceNames() {
return new String[] { SCANNER_STATE };
}
@Override
public void handleEvent(IEvent event) {
if(event instanceof LockStatusEvent) {
handleLockStatus((LockStatusEvent) event);
}
}
private void handleLockStatus(LockStatusEvent event) {
if(event.isLocked()) {
setScannerRunning();
} else {
setScannerStopped();
}
}
}