Jump to: navigation, search

Difference between revisions of "StereotypeOCLwithEcore"

(Asma's original example)
 
m
 
Line 1: Line 1:
An example of an editor action that can be contributed against the UML Editor, which checks the OCL-defined constraints of the stereotypes applied to the selected element.
+
An example of an editor action that can be contributed against the UML Editor, which checks the OCL-defined constraints of the stereotypes applied to the selected element.  This example uses the Ecore environment instead of the UML environment.
  
 
  public class NewAction2 implements IEditorActionDelegate  
 
  public class NewAction2 implements IEditorActionDelegate  

Latest revision as of 14:09, 30 May 2007

An example of an editor action that can be contributed against the UML Editor, which checks the OCL-defined constraints of the stereotypes applied to the selected element. This example uses the Ecore environment instead of the UML environment.

public class NewAction2 implements IEditorActionDelegate 
{
	protected Shell shell = null;
	protected UMLEditor editor = null;
	protected IStructuredSelection sel;
	public NewAction2() 
	{
		super();
	}
	
	public void setActiveEditor(IAction action,IEditorPart targetEditor)
	{
		this.editor = (UMLEditor) targetEditor;
		if ( targetEditor != null ) 
		{
			this.shell = targetEditor.getSite().getShell();
		}
	}
	public void setActivePart(IAction action, IWorkbenchPart targetPart) 
	{
	}
	
	public Object[] getElements(Object inputElement) 
	{
		
		return new Object[0];
	}
	public void run(IAction action) 
	{
		Shell shell = new Shell();
		EObject context=null;
		if (sel != null && !sel.isEmpty()) 
		{
			Object selected = sel.getFirstElement();
		
			if (selected instanceof EObject) 
			{
				context = (EObject) selected;
			} 
			else if (selected instanceof IAdaptable) 
			{
				context = (EObject) ((IAdaptable) selected).getAdapter(EObject.class);
			}
		}
		OCL ocl = OCL.newInstance(new EcoreEnvironmentFactory(
                new DelegatingPackageRegistry(
                        context.eResource().getResourceSet().getPackageRegistry(),
                        EPackage.Registry.INSTANCE)));
		OCL.Helper helper = ocl.createOCLHelper();
    	        helper.setContext(context.eClass());
                if (helper.getContextClassifier() == context) 
                {
                    helper.setContext(context.eClass());
                }
		ocl.setParseTracingEnabled(true);
		OCLExpression<EClassifier> parsed=null;
		Element objectselected= (Element) sel.getFirstElement();
		EList<Constraint> constraints =  objectselected.getAppliedStereotypes().get(0).getOwnedRules();
		Constraint myconstraint=constraints.get(0);
		String body=myconstraint.getSpecification().stringValue();	
		try 
		{
			parsed = helper.createQuery(body); 	
		} 
		catch (ParserException e1) 
		{
		     e1.printStackTrace();
		}
		try {	
			 Object o=ocl.evaluate(context, parsed);
			 if (o.toString().equals("true"))
			 {
			 MessageDialog.openInformation(shell,"Validerprofile Plug-in","validation passed");
			 }
                         else
			 {
		         MessageDialog.openInformation(shell,"Validerprofile Plug-in","constraints violated!"); 
			 }
		} catch (Exception e) {
			MessageDialog.openInformation(shell,"voici le probleme",e.getLocalizedMessage());
			e.printStackTrace();
		}
	}
	
	public void selectionChanged(IAction action, final ISelection selection) 
	{
	  try{
          if (selection instanceof IStructuredSelection) 
	        {
	        	sel = (IStructuredSelection) selection;
	        }
		    
	   } 
	   catch (Exception e) {
		throw new RuntimeException(e);
	   } 
	   finally {
		action.setEnabled((null != sel));
	   }
	}
}