/******************************************************************************* * Copyright (c) 2006 Oracle 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: * Oracle Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.bpel.validator; import org.eclipse.bpel.validator.model.IProblem; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterManager; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; 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.eclipse.wst.validation.internal.provisional.core.IValidationContext; import org.eclipse.wst.validation.internal.provisional.core.IValidator; /** * @author Michal Chmielewski (michal.chmielewski@oracle.com) * @date Mar 12, 2007 * */ @SuppressWarnings({"nls","restriction"}) public class Validator implements IValidator { boolean bDebug = true; int mechanism = 1; Builder fBuilder = new Builder(); IAdapterManager fAdapterManager = Platform.getAdapterManager(); /** * Create a brand new shiny validator. */ public Validator () { fBuilder.bDebug = bDebug; } /** * (non-Javadoc) * * @see org.eclipse.wst.validation.internal.provisional.core.IValidator#cleanup(org.eclipse.wst.validation.internal.provisional.core.IReporter) */ public void cleanup (IReporter reporter) { } /** * @see org.eclipse.wst.validation.internal.provisional.core.IValidator#validate(org.eclipse.wst.validation.internal.provisional.core.IValidationContext, * org.eclipse.wst.validation.internal.provisional.core.IReporter) */ public void validate (IValidationContext helper, IReporter reporter) throws ValidationException { reporter.removeAllMessages(this); String s[] = helper.getURIs(); if (s.length < 1) { return ; } for (String f : s) { p("Starting validation of " + f ); IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(f); if (resource == null || resource.getType() != IResource.FILE) { p("File " + f + " does not exist and cannot be validated."); continue ; } //because the validate will validate its referenced artefacts, if those referenced //file was changed, clear the catch to make sure those referenced file to be reloaded. fBuilder.clearCach(); if (mechanism == 1) { // delegate all the "builder" p("Using mechanism 1: Calling Builder"); try { fBuilder.validate(resource, new NullProgressMonitor() ); } catch (CoreException ce) { Activator.log(ce); } } else if (mechanism == 2) { p("Using mechanism 2: Using reporter and message"); IProblem problems[] = fBuilder.validate( (IFile) resource, new NullProgressMonitor()); for(IProblem p : problems) { IMessage msg = (IMessage) fAdapterManager.getAdapter(p, IMessage.class); if (msg != null) { reporter.addMessage(this, msg); } } } } } void p(String msg) { if (bDebug) { System.out.printf("[%1$s]>> %2$s\n", getClass().getName(),msg); System.out.flush(); } } }