package org.marketcetera.photon.internal.strategy.engine.ui.workbench;
import java.text.MessageFormat;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.ui.commands.ICommandService;
import org.marketcetera.photon.strategy.engine.ui.workbench.StrategyEngineWorkbenchUI;
import org.marketcetera.util.misc.ClassVersion;
/**
* Allows {@link StrategyEnginesView} properties to be queried declaratively.
* This is a hack/workaround to enable the connect and disconnect commands to be
* visible only when they are handled. These properties should not be accessed
* by clients.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: StrategyEnginesViewPropertyTester.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.0.0
*/
@ClassVersion("$Id: StrategyEnginesViewPropertyTester.java 16154 2012-07-14 16:34:05Z colin $")
public class StrategyEnginesViewPropertyTester extends PropertyTester {
private static final String DISCONNECT_COMMAND_HANDLED_PROPERTY = "disconnectCommandHandled"; //$NON-NLS-1$
private static final String CONNECT_COMMAND_HANDLED_PROPERTY = "connectCommandHandled"; //$NON-NLS-1$
private static final String DELETE_COMMAND_HANDLED_PROPERTY = "deleteCommandHandled"; //$NON-NLS-1$
private static final String DELETE_COMMAND_ID = "org.eclipse.ui.edit.delete"; //$NON-NLS-1$
@Override
public boolean test(Object receiver, String property, Object[] args,
Object expectedValue) {
StrategyEnginesView view = (StrategyEnginesView) receiver;
if (CONNECT_COMMAND_HANDLED_PROPERTY.equals(property)) {
return isHandled(view,
StrategyEngineWorkbenchUI.CONNECT_COMMAND_ID, expectedValue);
} else if (DISCONNECT_COMMAND_HANDLED_PROPERTY.equals(property)) {
return isHandled(view,
StrategyEngineWorkbenchUI.DISCONNECT_COMMAND_ID,
expectedValue);
} else if (DELETE_COMMAND_HANDLED_PROPERTY.equals(property)) {
return isHandled(view, DELETE_COMMAND_ID, expectedValue);
} else {
throw new IllegalArgumentException(MessageFormat.format(
"unknown property [{0}]", property)); //$NON-NLS-1$
}
}
private static boolean isHandled(StrategyEnginesView view,
String commandId, Object expectedValue) {
ICommandService service = (ICommandService) view.getViewSite()
.getService(ICommandService.class);
return Boolean.valueOf(service.getCommand(commandId).isHandled())
.equals(expectedValue);
}
}