blob: e3853d05b223520bd9eb9c414a0807dea0cf0f0a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2007 IBM Corporation and others.
* 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:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.server.ui.internal;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.ServerUtil;
import org.eclipse.wst.server.core.internal.ServerPlugin;
import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer;
/**
*
*/
public class ServerPropertyTester extends PropertyTester {
/* (non-Javadoc)
* @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
*/
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (expectedValue instanceof String)
return checkProperty(receiver, property, (String) expectedValue);
if (expectedValue != null)
return checkProperty(receiver, property, expectedValue.toString());
return checkProperty(receiver, property, null);
}
protected static boolean checkProperty(Object target, String property, String value) {
if ("isRunnable".equals(property)) {
// check if project has a module associated with it
if (target instanceof IProject) {
IModule m = ServerUtil.getModule((IProject) target);
if (m == null)
return false;
}
// check for runnable object
boolean b = ServerPlugin.hasModuleArtifact(target);
if (b)
return true;
/*if (!(receiver instanceof IEditorPart))
return false;
// check if the editor input itself can be run. Otherwise, check if
// the editor has a file input that can be run
IEditorPart editor = (IEditorPart) receiver;
IEditorInput input = editor.getEditorInput();
b = ServerPlugin.hasModuleArtifact(input);
if (b)
return true;*/
if (target instanceof IFileEditorInput) {
IFileEditorInput fei = (IFileEditorInput) target;
IFile file = fei.getFile();
b = ServerPlugin.hasModuleArtifact(file);
if (b)
return true;
}
return false;
} else if ("serverType".equals(property)) {
IServer server = null;
if (target instanceof IServer) {
server = (IServer) target;
} else if (target instanceof ModuleServer) {
ModuleServer ms = (ModuleServer) target;
server = ms.server;
}
if (server == null || server.getServerType() == null)
return false;
String[] typeIds = ServerPlugin.tokenize(value, ",");
return matches(server.getServerType().getId(), typeIds);
} else if ("moduleType".equals(property)) {
IModule[] module = null;
if (target instanceof IModule[]) {
module = (IModule[]) target;
} else if (target instanceof IModule) {
module = new IModule[] {(IModule) target};
} else if (target instanceof ModuleServer) {
ModuleServer ms = (ModuleServer) target;
module = ms.module;
}
if (module == null)
return false;
if (module.length == 0)
return false;
String[] values = ServerPlugin.tokenize(value, ",");
IModule m = module[module.length - 1];
return matches(m.getModuleType().getId(), values);
} else if ("moduleVersion".equals(property)) {
IModule[] module = null;
if (target instanceof IModule[]) {
module = (IModule[]) target;
} else if (target instanceof IModule) {
module = new IModule[] {(IModule) target};
} else if (target instanceof ModuleServer) {
ModuleServer ms = (ModuleServer) target;
module = ms.module;
}
if (module == null)
return false;
if (module.length == 0)
return false;
String[] values = ServerPlugin.tokenize(value, ",");
IModule m = module[module.length - 1];
return matches(m.getModuleType().getVersion(), values);
}
return false;
}
/**
* Returns true if the given type (given by the id) can use this action.
*
* @return boolean
*/
protected static boolean matches(String id, String[] typeIds) {
if (id == null || id.length() == 0)
return false;
if (typeIds == null)
return false;
int size = typeIds.length;
for (int i = 0; i < size; i++) {
if (typeIds[i].endsWith("*")) {
if (id.length() >= typeIds[i].length() && id.startsWith(typeIds[i].substring(0, typeIds[i].length() - 1)))
return true;
} else if (id.equals(typeIds[i]))
return true;
}
return false;
}
}