Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[tigerstripe-dev] issue about synchronization between validator and model

Hi Team,
I'm developing a model validator and encountered an issue which is (very likely) about synchronization between the validator and the model.  Let me give the issue and explain related validation logic below. Your suggestions are very much appreciated.
The model validator is an eclipse plugin which checks standard Tigerstripe models against some error conditions specific in the context of TMF interfaces. An example of the error conditions is "int-based enumeration", which is allowed in general Tigerstripe model but not recommended to use in TMF Interfaces.
1. the issue - synchronization between the validator and the model
To reproduce the issue:
1. run validator on a model.
2. edit the model to correct an error
3. run validator on the updatd model
1. the validator still gives the findings number (which is calculated at runtime) as in previous run and show all the previous findings, including the error already fixed.
2. restart the workbench, run the validator again, it shows correct findings.
Note that at runtime all markers owned by this validator are cleaned up before a new run, so this issue is not likely caused by cache of the findings but possibly by cache of model artifacts information.
Below I'll explain the logic of the validator.
2. The logic of the validator with the reading of Tigerstripe models highlighted
Let's explain the logic in top down style, totally 3 steps.
1) In Tigerstripe workbench, right click on a standard Tigerstripe model and choose "Validate TIP Model" in the pop-up menu. According to the configuration in plugin.xml, the plugins will start
  <extension point="org.eclipse.ui.popupMenus">
          label="Validate TIP Model"
         <!-- more actions -->
    <!-- objectContributions -->
2) The ValidateTipModelActionDelegate implements IActionDelegate. It reads the Tigerstripe model and give the artifacts information to concrete validation logic implemented in the class ValidateTipModelAction.
public class ValidateTipModelActionDelegate implements org.eclipse.ui.IActionDelegate {
        private ISelection selection;
        public void selectionChanged(IAction action, ISelection selection) {
               this.selection = selection;
       public void run(IAction action) {
           if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
                    IStructuredSelection structuredSelection = (IStructuredSelection) selection;
                   // the project in focus
                   Object element = structuredSelection.getFirstElement();
                   if (element instanceof ITigerstripeModelProject) {
                         //The precise type of the focused project is org.eclipse.tigerstripe.workbench.internal.api.impl.TigerstripeOssjProjectHandle
                          System.out.println("ValidateTipModelActionDelegate: the element is an instance of ITigerstripeModelProject. Its precise type is \'"  + element.getClass() + "\'");
                         ProgressMonitorDialog dialog = new ProgressMonitorDialog(Display.getDefault().getActiveShell());
                         //read the details of the model project
                         TipModelValidationContext context = new TipModelValidationContext();
                        context.init((ITigerstripeModelProject) element);//see (3) for details
                        Collection<IAbstractArtifact> artifacts = context.getArtifacts();
                       // give the artifacts to concrete validation logic
                        ValidateTipModelAction validateAction = new ValidateTipModelAction();
                  } else {
                        System.out.println("ValidateTipModelActionDelegate: this is not a Tigerstripe model project: \'"  + element.getClass() + "\'");
3) read details of the model - the logic of context.init((ITigerstripeModelProject) element)
org.eclipse.tigerstripe.workbench.project.ITigerstripeModelProject handler = null;
handler = (ITigerstripeModelProject) element;
org.eclipse.tigerstripe.workbench.internal.api.impl.ArtifactManagerSessionImpl session = (ArtifactManagerSessionImpl) handle.getArtifactManagerSession();
session.refreshAll(true, _monitor); 
monitor.subTask("reading artifacts ...");

org.eclipse.tigerstripe.workbench.internal.core.model.ArtifactManager artifactMgr = session.getArtifactManager();
Collection<IAbstractArtifact> artifacts = artifactMgr.getAllArtifacts(false, _monitor));//here 'false' means dont include dependencies
best regards,
HP Enterprise Services

Back to the top