blob: 1a158eead90caeff9f3eea47e2eeb77b13454b0e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 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.common.componentcore.ui.internal.propertypage.verifier;
import java.util.ArrayList;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.common.componentcore.ui.Messages;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
import org.eclipse.wst.common.componentcore.ui.ModuleCoreUIPlugin;
import org.eclipse.wst.common.componentcore.ui.internal.propertypage.ResourceMappingFilterExtensionRegistry;
import org.eclipse.wst.common.componentcore.ui.propertypage.AddModuleDependenciesPropertiesPage.ComponentResourceProxy;
/**
* This class does basic validation of the deployment assembly. It validates that
* references to other components like projects and archives exists. It also validates that
* folder mappings exists in the project.
*
*/
public class DefaultDeploymentAssemblyVerifier extends AbstractDeploymentAssemblyVerifier {
@Override
public IStatus verify(DeploymentAssemblyVerifierData data) {
IStatus status = validateResourceMappings(data, null);
return validateMissingReferences(data, status);
}
protected IStatus validateResourceMappings(DeploymentAssemblyVerifierData data, IStatus existingStatus){
IStatus status = existingStatus!=null?existingStatus:Status.OK_STATUS;
ArrayList<ComponentResourceProxy> mappings = data.getResourceMappings();
if (mappings == null)
return status;
int severity = Status.ERROR;
String msg = null;
IProject project = data.getComponent().getProject();
for (ComponentResourceProxy mapping:mappings){
if (ResourceMappingFilterExtensionRegistry.shouldFilter(mapping.source))
continue; // Do not validate filtered entries
if (!project.exists(mapping.source)){
msg = NLS.bind(Messages.ErrorEntryNotFound, mapping.source);
status = appendStatusMessage(status, msg, severity);
}
}
return status;
}
protected IStatus validateMissingReferences(DeploymentAssemblyVerifierData data, IStatus existingStatus) {
IStatus status = existingStatus!=null?existingStatus:Status.OK_STATUS;
ArrayList<IVirtualReference> references = data.getCurrentReferences();
if (references == null){
return status;
}
int severity = Status.ERROR;
String msg = null;
for (IVirtualReference reference:references){
if (!reference.getReferencedComponent().exists()){
String name;
if( reference.getReferencedComponent().isBinary() ) {
IVirtualComponent vc = reference.getReferencedComponent();
IPath p = (IPath)vc.getAdapter(IPath.class);
name= p == null ? vc.getName() : p.toString();
}
else {
name = reference.getReferencedComponent().getProject().getName();
}
msg = NLS.bind(Messages.ErrorEntryNotFound, name);
status = appendStatusMessage(status, msg, severity);
}
}
return status;
}
private IStatus appendStatusMessage(IStatus existingStatus, String message, int severity) {
MultiStatus multiStatus;
IStatus newStatus = new Status(severity, ModuleCoreUIPlugin.PLUGIN_ID, message);
int newSeverity = severity;
if(existingStatus.getSeverity() > severity)
newSeverity = existingStatus.getSeverity();
if(existingStatus instanceof MultiStatus){
multiStatus = (MultiStatus)existingStatus;
multiStatus.merge(newStatus);
} else {
if(!existingStatus.isMultiStatus() && existingStatus.isOK()) {
return newStatus;
}
IStatus [] children = new IStatus [] {existingStatus, newStatus};
multiStatus = new MultiStatus(ModuleCoreUIPlugin.PLUGIN_ID, newSeverity, children, null, null);
}
return multiStatus;
}
}