package org.jboss.tools.seam.core.test.validation;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.wst.validation.internal.core.ValidationException;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
import org.jboss.tools.common.validation.ContextValidationHelper;
import org.jboss.tools.common.validation.IProjectValidationContext;
import org.jboss.tools.common.validation.IValidator;
import org.jboss.tools.common.validation.ValidatorManager;
import org.jboss.tools.seam.core.SeamProjectsSet;
import org.jboss.tools.seam.internal.core.validation.SeamCoreValidator;
public class ValidatorSupport implements IReporter, IValidatorSupport {
List<IMarker> markers = new ArrayList<IMarker>();
Set<IFile> files = new HashSet<IFile>();
private IProject project;
IValidator validator;
public ValidatorSupport(IProject project, IValidator validator) {
this.project = project;
this.validator = validator;
}
/* (non-Javadoc)
* @see org.jboss.tools.seam.core.test.validation.IValidatorSupport#validate()
*/
public void validate() throws ValidationException {
ContextValidationHelper helper = new ContextValidationHelper();
helper.setProject(this.project);
IProjectValidationContext context = SeamCoreValidator.getSeamValidatingProjects(project).getBrunches().values().iterator().next().getRootContext();
SeamProjectsSet set = new SeamProjectsSet(project);
validator.validate(files, project, helper, context, new ValidatorManager(), this);
}
/* (non-Javadoc)
* @see org.jboss.tools.seam.core.test.validation.IValidatorSupport#add(java.lang.String)
*/
public void add(IMarker marker) {
if(marker!=null) {
markers.add(marker);
}
}
/* (non-Javadoc)
* @see org.jboss.tools.seam.core.test.validation.IValidatorSupport#isMessageCreated(java.lang.String, java.lang.Object[])
*/
public boolean isMessageCreated(String template, Object[] parameters) {
String messagePattern = MessageFormat.format(template,parameters);
boolean result = false;
for (IMarker marker : markers) {
String message = marker.getAttribute(IMarker.MESSAGE,"").toString();
if(messagePattern.equals(message)){
result = true;
break;
}else if(messagePattern.matches(message)) {
result = true;
break;
}
}
return result;
}
/* (non-Javadoc)
* @see org.jboss.tools.seam.core.test.validation.IValidatorSupport#addFile(org.eclipse.core.resources.IFile)
*/
public void addFile(IFile o) {
files.add(o);
}
// IRepoter File
/* (non-Javadoc)
* @see org.jboss.tools.seam.core.test.validation.IValidatorSupport#getMessages()
*/
public List<IMarker> getMarkers() {
return markers;
}
public boolean isCancelled() {
return false;
}
public void addMessage(
org.eclipse.wst.validation.internal.provisional.core.IValidator origin,
IMessage message) {
}
public void displaySubtask(
org.eclipse.wst.validation.internal.provisional.core.IValidator validator,
IMessage message) {
}
public void removeAllMessages(
org.eclipse.wst.validation.internal.provisional.core.IValidator origin) {
}
public void removeAllMessages(
org.eclipse.wst.validation.internal.provisional.core.IValidator origin,
Object object) {
}
public void removeMessageSubset(
org.eclipse.wst.validation.internal.provisional.core.IValidator validator,
Object obj, String groupName) {
}
public List getMessages() {
return null;
}
public void validate(IFile file) throws ValidationException {
addFile(file);
validate();
}
public boolean isMessageCreatedOnLine(String markerTemplate,
Object[] parameters, int lineNumber) throws CoreException {
String messagePattern = MessageFormat.format(markerTemplate,parameters);
boolean result = false;
for (IMarker marker : markers) {
String message = marker.getAttribute(IMarker.MESSAGE,"").toString();
if(messagePattern.matches(message)) {
Object line = marker.getAttribute(IMarker.LINE_NUMBER);
if(line!=null && line instanceof Integer && ((Integer)line).intValue()==lineNumber) {
result = true;
break;
}
}
}
return result;
}
}