[jbosstools-dev] Common Validation: Help needed

Alexey Kazakov akazakov at exadel.com
Tue Sep 18 14:51:02 EDT 2012


Hi Xavier,

There is a bug in our validator manager configuration which prevented 
WST builder invoking our validators for every resource of the project 
when you click on Project>Validate
I created an issue for that - https://issues.jboss.org/browse/JBIDE-12634
Fixed in trunk.

On 09/18/2012 05:38 AM, Xavier Coulon wrote:
> Hi Alexey,
>
> I'm trying to get the following behavior with the common-validator 
> framework, but now I'm stuck: when I do "Project>Validate", I would 
> like to trigger a full project validation, ie, I's expect my 
> JaxrsMetamodelValidator#validateAll(ContextValidationHelper, 
> IReporter, Set<IProject>) being called.
>
> Instead of this, the ValidatorManager calls the 
> JaxrsMetamodelValidator#validate(Set<IFile>, IProject, 
> ContextValidationHelper, IProjectValidationContext, ValidatorManager, 
> IReporter) method with the first resource found of my project, and 
> after that, the ValidatorManager is never called again because the 
> org.eclipse.wst.validation.Validator$V1#shouldSkipValidator(IResource, 
> ValOperation)prevents further resource validation, although there are 
> many more resources to validate (java files, xml files, folders, etc.).
>
> And from what I understood of the Validator, the only way to have the 
> JaxrsMetamodelValidator#validateAll(..) method being called would be 
> validate the 'else if' condition in the following statement:
>
> *if*((!validationHelper.isClasspathAffected() && 
> (!changedFiles.isEmpty() || validationHelper.getURIs().length > 0))) {
> status = validate(changedFiles, validationHelper, reporter, rootProjects);
> } *else* *if*(!validationContextManager.getRegisteredFiles().isEmpty()) {
> validationContextManager.clearAllResourceLinks(rootProjects);
> status = validateAll(validationHelper, reporter, rootProjects);
> }
>
>
>
> How could I have a full validation from the 'Project>Validate' menu 
> action ?
>
> Thanks.
>
> Best regards,
> /Xavier
>
>
>
> On Sep 17, 2012, at 9:50 PM, Alexey Kazakov wrote:
>
>> V2 has some disadvantages which are critical for our validators.
>> For example in case of incremental validation V2 validtor will be 
>> called for every changed resource. That's not ok for our validators. 
>> We need to get a full list of all the changed resources before we 
>> start to validate them.
>> WST validation V2 is too restricted and not so flexible as V1.
>>
>>
>> On 09/17/2012 12:34 PM, Rob Cernich wrote:
>>> Cool.  Plain old validator framework supports this as well: 
>>> ValidationResult.setDependsOn().
>>>
>>> Of course, this is version 2 of the validator framework.
>>>
>>> Best,
>>> Rob
>>>
>>> ----- Original Message -----
>>>> BTW, we use KB for savings links between model artifacts which are
>>>> used
>>>> in incremental validation. Not for saving problem markers.
>>>> Suppose you have some relation between resource A and B. And if A is
>>>> changed then you should re-validate B too.
>>>> We save such links in KB project so we don't have to rebuild them
>>>> after
>>>> every Eclipse restart.
>>>>
>>>>
>>>> On 09/17/2012 12:15 PM, Rob Cernich wrote:
>>>>> Hey Alexey,
>>>>>
>>>>> If you're using the plain old WST validation framework, just make
>>>>> sure your markers are "persistent" and extend
>>>>> org.eclipse.wst.validation.problemmarker (and problemmarker2, if
>>>>> applicable) and that you're validator is enabled for build.  Also,
>>>>> make sure your include/exclude rules are configured appropriately.
>>>>>
>>>>> Best,
>>>>> Rob
>>>>>
>>>>> ----- Original Message -----
>>>>>
>>>>>> Alexey, Rob,
>>>>>> Thanks for your replies. I understand that our validators (JAX-RS
>>>>>> is
>>>>>> now part of them) are called during wst validation, and that I
>>>>>> shouldn't trigger costly validation of all projects for the sole
>>>>>> purpose of JAX-RS. I'll look at the options you suggested
>>>>>> (explicit
>>>>>> call of validateAll vs state saving/using KB)
>>>>>> Thanks
>>>>>> Best regards,
>>>>>> /Xavier
>>>>>> On Sep 17, 2012, at 7:24 PM, Alexey Kazakov wrote:
>>>>>>> We don't call our validators (CDI, EL, JSF, Seam, ...) directly.
>>>>>>> These validators are registered in plugin.xml's and managed by
>>>>>>> org.jboss.tools.common.validation.ValidatorManager
>>>>>>> This manager is called by eclipse wst validation builder.
>>>>>>> You could call ValidatorManager.validateInJob(IValidationContext
>>>>>>> helper, IReporter reporter) with proper helper
>>>>>>> (validationHelper.getValidationContextManager().getRegisteredFiles()
>>>>>>> should be empty) but in this case you will start all the
>>>>>>> validators
>>>>>>> to validate the entire projects! So it's not the way you are
>>>>>>> looking
>>>>>>> for.
>>>>>>> So you have two options here:
>>>>>>> 1. Call your validator directly validateAll(..) when you need it
>>>>>>> w/o
>>>>>>> builder
>>>>>>> or
>>>>>>> 2. Save the validation state between sessions and relay on wst
>>>>>>> builder/ValidationManager.
>>>>>>> In CDI/JSF/Seam tools we use KB project framework to save states.
>>>>>>> This framework is not a part of common-validation framework, so
>>>>>>> it's
>>>>>>> up to you if you want to use KB project or your own solution to
>>>>>>> save
>>>>>>> the state.
>>>>>>> On 09/17/2012 08:27 AM, Xavier Coulon wrote:
>>>>>>>> Never mind, I found the reason why the validate(..) method is
>>>>>>>> called:
>>>>>>>> some xml files need to be checked. They are not part of the
>>>>>>>> 'changedFiles', but they are returned by the
>>>>>>>> validationHelper.getURIs() method.
>>>>>>>> So, instead, I'd like to ask: how can I force the validation
>>>>>>>> framework to trigger a validateAll() at workbench startup ?
>>>>>>>> Thanks.
>>>>>>>> Best regards,
>>>>>>>> /Xavier
>>>>>>>> On Sep 17, 2012, at 4:49 PM, Xavier Coulon wrote:
>>>>>>>>> Hi !
>>>>>>>>> The JAX-RS tooling is now aligned on the CDI tooling and relies
>>>>>>>>> on
>>>>>>>>> the common-validation plugin to validate the JAX-RS elements.
>>>>>>>>> So far, so good, but I have this issue that I'd like to solve:
>>>>>>>>> at
>>>>>>>>> workbench start-up, the method
>>>>>>>>> public IStatus validate(Set<IFile> changedFiles, IProject
>>>>>>>>> project,
>>>>>>>>> ContextValidationHelper validationHelper,
>>>>>>>>> IProjectValidationContext context, ValidatorManager manager,
>>>>>>>>> IReporter reporter) throws ValidationException
>>>>>>>>> of my validator is called, but with an empty set of
>>>>>>>>> 'changedFiles'.
>>>>>>>>> Wouldn't it make more sense to call the
>>>>>>>>> public IStatus validateAll(IProject project,
>>>>>>>>> ContextValidationHelper
>>>>>>>>> validationHelper,
>>>>>>>>> IProjectValidationContext validationContext, ValidatorManager
>>>>>>>>> manager, IReporter reporter)
>>>>>>>>> throws ValidationException
>>>>>>>>> method instead ?
>>>>>>>>> I can workaround that and call validateAll(..) when
>>>>>>>>> changesFiles.isEmpty() in the validate(..) method call, but I
>>>>>>>>> don't
>>>>>>>>> think it's the best approach.
>>>>>>>>> WDYT ?
>>>>>>>>> Thanks.
>>>>>>>>> Best regards,
>>>>>>>>> /Xavier
>>>>>>>> _______________________________________________
>>>>>>>> jbosstools-dev mailing list jbosstools-dev at lists.jboss.org 
>>>>>>>> <mailto:jbosstools-dev at lists.jboss.org>
>>>>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>>>>>> _______________________________________________
>>>>>>> jbosstools-dev mailing list
>>>>>>> jbosstools-dev at lists.jboss.org 
>>>>>>> <mailto:jbosstools-dev at lists.jboss.org>
>>>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>>>>> _______________________________________________
>>>>>> jbosstools-dev mailing list
>>>>>> jbosstools-dev at lists.jboss.org 
>>>>>> <mailto:jbosstools-dev at lists.jboss.org>
>>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jbosstools-dev/attachments/20120918/d93fd8e2/attachment-0001.html 


More information about the jbosstools-dev mailing list