StereotypeOCLwithEcore

From Eclipsepedia

Revision as of 15:09, 30 May 2007 by Cdamus.ca.ibm.com (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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));
	   }
	}
}