/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
package org.ebayopensource.turmeric.eclipse.registry.consumer.artifact.validator;
import java.util.ArrayList;
import java.util.List;
import org.ebayopensource.turmeric.eclipse.registry.consumer.Activator;
import org.ebayopensource.turmeric.eclipse.registry.consumer.exception.InvalidInputException;
import org.ebayopensource.turmeric.eclipse.registry.consumer.models.ArtifactValidationResult;
import org.ebayopensource.turmeric.eclipse.registry.consumer.models.AssertionsSeverityModel;
import org.ebayopensource.turmeric.eclipse.registry.consumer.preferences.AssertionServicePreferenceConstants;
import org.ebayopensource.turmeric.eclipse.registry.consumer.resources.Messages;
import org.ebayopensource.turmeric.eclipse.registry.consumer.servicegateway.RegistryServiceGateway;
import org.ebayopensource.turmeric.eclipse.registry.consumer.utils.ArtifactValidatorUtil;
import org.ebayopensource.turmeric.eclipse.registry.consumer.utils.SOAMessageUtils;
import org.ebayopensource.turmeric.eclipse.registry.exception.ArtifactValidationException;
import org.ebayopensource.turmeric.eclipse.registry.intf.IArtifactValidator;
import org.ebayopensource.turmeric.eclipse.registry.intf.IArtifactValidator2;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SubProgressMonitor;
/**
* Artifact Validator.
*
* @author ramurthy
*/
public class ArtifactValidator implements IArtifactValidator, IArtifactValidator2 {
private static final String VERSION = "2.0.0";
/**
* Get All Supported Validators.
*
* @return the all supported validators
*/
@Override
public List<String> getAllSupportedValidators() {
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.METHOD_START, "getAllSupportedValidators");
List<String> supportArtifactValidatorList = ArtifactValidatorUtil.getAllSupportedArtifactValidators();
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.METHOD_END, "getAllSupportedValidators");
return supportArtifactValidatorList;
}
/**
* Validate Artifact.
*
* @param artifactContents the artifact contents
* @param artifactType the artifact type
* @param progressMonitor the progress monitor
* @return the i status
* @throws ArtifactValidationException the artifact validation exception
*/
@Override
public IStatus validateArtifact(byte[] artifactContents, String artifactType, IProgressMonitor progressMonitor)
throws ArtifactValidationException {
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.METHOD_START, "validateArtifact");
List<ArtifactValidationResult> artifactValidationResultList = null;
SubProgressMonitor subProgressMonitor = new SubProgressMonitor(progressMonitor, IProgressMonitor.UNKNOWN);
subProgressMonitor.beginTask(Messages.VALIDATION_IN_PROGRESS, IProgressMonitor.UNKNOWN);
subProgressMonitor.subTask(Messages.VALIDATION_IN_PROGRESS);
if (!subProgressMonitor.isCanceled()) {
try {
// Invoke artifact validator
artifactValidationResultList = ArtifactValidatorUtil.getArtifactValidationResult(artifactContents, artifactType.toUpperCase());
} catch (InvalidInputException e) {
Activator.getDefault().log(Messages.ERROR_INVALID_ARTIFACT_CONTENTS_OR_TYPE);
return SOAMessageUtils.createStatus(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR,
Messages.ERROR_INVALID_ARTIFACT_CONTENTS_OR_TYPE, null, 1);
} catch (Exception e) {
Activator.getDefault().log(e);
throw new ArtifactValidationException(Messages.ERROR_VALIDATION_COULDNT_RUN, e);
} finally {
RegistryServiceGateway.invalidateConsumers();
}
}
subProgressMonitor.done();
if (subProgressMonitor.isCanceled()) {
subProgressMonitor.done();
throw new ArtifactValidationException(new InterruptedException());
}
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.METHOD_END, "validateArtifact");
return getArtifactValidationResultStatus(artifactValidationResultList);
}
/**
* Get Artifact Validation Result Status.
*
* @param artifactValidationResultList the artifact validation result list
* @return the artifact validation result status
*/
public IStatus getArtifactValidationResultStatus(List<ArtifactValidationResult> artifactValidationResultList) {
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.METHOD_START, "getArtifactValidationResultStatus");
if (artifactValidationResultList != null && !artifactValidationResultList.isEmpty()) {
List<IStatus> statusList = new ArrayList<IStatus>();
for (ArtifactValidationResult artifactValidationResult : artifactValidationResultList) {
if (artifactValidationResult.getAssertionsSeverityModel() == null)
continue;
if (AssertionsSeverityModel.MAY.equals(artifactValidationResult.getAssertionsSeverityModel())) {
statusList.add(SOAMessageUtils.createMayAssertionStatus(artifactValidationResult.getArtifactValidationResultMessage(), null));
Activator.getDefault().logArgumentMessage(Messages.VALIDATION_RESULT_MAY, artifactValidationResult.getArtifactValidationResultMessage());
}
else if (AssertionsSeverityModel.SHOULD.equals(artifactValidationResult.getAssertionsSeverityModel())) {
statusList.add(SOAMessageUtils.createStatus(IStatus.WARNING, Activator.PLUGIN_ID, IStatus.WARNING,
artifactValidationResult.getArtifactValidationResultMessage(), null, artifactValidationResult.getLineNumber()));
Activator.getDefault().logArgumentMessage(Messages.VALIDATION_RESULT_SHOULD, artifactValidationResult.getArtifactValidationResultMessage());
}
else if (AssertionsSeverityModel.MUST.equals(artifactValidationResult.getAssertionsSeverityModel())) {
statusList.add(SOAMessageUtils.createStatus(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR,
artifactValidationResult.getArtifactValidationResultMessage(), null, artifactValidationResult.getLineNumber()));
Activator.getDefault().logArgumentMessage(Messages.VALIDATION_RESULT_MUST, artifactValidationResult.getArtifactValidationResultMessage());
}
}
IStatus multiStatus = SOAMessageUtils.createMultiStatus(Activator.PLUGIN_ID, 0, (IStatus [])statusList.toArray(new IStatus[0]),
"", null);
String validationResultMessage = "";
if (multiStatus.getSeverity() == IStatus.ERROR)
validationResultMessage = Messages.VALIDATION_RESULT_ERROR;
else if (multiStatus.getSeverity() == IStatus.WARNING)
validationResultMessage = Messages.VALIDATION_RESULT_WARNING;
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.VALIDATION_RESULT_METHOD_END, validationResultMessage, "getArtifactValidationResultStatus");
return SOAMessageUtils.createMultiStatus(Activator.PLUGIN_ID, 0, (IStatus [])statusList.toArray(new IStatus[0]),
validationResultMessage, null);
}
if (Activator.DEBUG)
Activator.getDefault().logArgumentMessage(Messages.METHOD_END, "getArtifactValidationResultStatus");
return SOAMessageUtils.createStatus(IStatus.OK, Activator.PLUGIN_ID, IStatus.OK, "Artifact Validation Result - Success", null, -1);
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.eclipse.registry.intf.IArtifactValidator2#getVersion()
*/
@Override
public String getVersion() {
return VERSION;
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.eclipse.registry.intf.IArtifactValidator2#isAssertionServiceEnabled()
*/
@Override
public boolean isAssertionServiceEnabled() {
return Activator.getDefault().getPreferenceStore().getBoolean(
AssertionServicePreferenceConstants.ENABLE_ASSERTION_SERVICE);
}
}