/******************************************************************************* * Copyright (c) 2014 Zend Technologies Ltd. * 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: * Zend Technologies Ltd. - initial API and implementation *******************************************************************************/ package org.zend.php.zendserver.deployment.ui.commands; import org.eclipse.core.expressions.PropertyTester; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.php.internal.core.project.PHPNature; import org.zend.php.zendserver.deployment.core.DeploymentNature; import org.zend.php.zendserver.deployment.core.descriptor.DescriptorContainerManager; import org.zend.php.zendserver.deployment.core.descriptor.IDeploymentDescriptor; import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorContainer; import org.zend.php.zendserver.deployment.core.descriptor.ProjectType; import org.zend.php.zendserver.deployment.ui.Activator; import org.zend.php.zendserver.deployment.ui.Messages; /** * Property tester for deployment related commands. * * @author Wojciech Galanciak, 2014 * */ @SuppressWarnings("restriction") public class DeploymentTester extends PropertyTester { @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { boolean result = false; if (receiver instanceof IAdaptable) { IAdaptable adaptable = (IAdaptable) receiver; Object adapter = (IResource) adaptable.getAdapter(IResource.class); if (adapter != null) { receiver = adapter; } } if (receiver instanceof IProject) { IProject project = (IProject) receiver; try { if (!project.isAccessible()) return false; if(!project.hasNature(PHPNature.ID)) return false; if(!project.hasNature(DeploymentNature.ID)) return false; IResource deploymentDescriptor = project.findMember(DescriptorContainerManager.DESCRIPTOR_PATH); if(deploymentDescriptor == null) return false; IDescriptorContainer model = DescriptorContainerManager.getService() .openDescriptorContainer((IFile) deploymentDescriptor); IDeploymentDescriptor descriptor = model.getDescriptorModel(); ProjectType projectType = descriptor.getType(); ProjectType allowedTypes[] = new ProjectType[args.length]; for (int i = 0; i < args.length; i++) { allowedTypes[i] = ProjectType.byName((String) args[i]); } for (ProjectType allowedType : allowedTypes) { if(projectType == allowedType) return true; } return false; } catch (CoreException e) { Activator.logError(Messages.DeploymentTester_CouldNotTest_Error, e); } } return result == (Boolean) expectedValue; } }