diff options
Diffstat (limited to 'plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen/templates/xpt/providers/ValidationProvider.xpt')
-rw-r--r-- | plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen/templates/xpt/providers/ValidationProvider.xpt | 311 |
1 files changed, 0 insertions, 311 deletions
diff --git a/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen/templates/xpt/providers/ValidationProvider.xpt b/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen/templates/xpt/providers/ValidationProvider.xpt deleted file mode 100644 index c1e0070184c..00000000000 --- a/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen/templates/xpt/providers/ValidationProvider.xpt +++ /dev/null @@ -1,311 +0,0 @@ -/****************************************************************************** - * Copyright (c) 2007, 2020 Borland Software Corporation, CEA LIST, Artal and others - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Dmitry Stadnik (Borland) - initial API and implementation - * Artem Tikhomirov (Borland) - introduced GenAuditContext entity - * straightforward and simple #validate() implementation - * Aurelien Didier (ARTAL) - aurelien.didier51@gmail.com - Bug 569174 - *****************************************************************************/ - -«IMPORT 'http://www.eclipse.org/papyrus/gmf/2020/GenModel'» - -«EXTENSION xpt::GenAuditRoot» - -«DEFINE ValidationProvider FOR gmfgen::GenDiagram-» -«EXPAND xpt::Common::copyright FOR editorGen-» -package «providersPackageName»; - -«EXPAND xpt::Common::generatedClassComment» -public class «validationProviderClassName» { - - «EXPAND constraintsActive-» - - «EXPAND shouldConstraintsBePrivate-» - - «EXPAND runWithActiveConstraints-» - - «EXPAND isInDefaultEditorContext-» - -«EXPAND selectors FOR editorGen.audits-» - -«EXPAND strategy_support» - -«EXPAND constraintAdapters(self) FOR editorGen.audits-» - -«EXPAND additions-» -} -«ENDDEFINE» - -«DEFINE constraintsActive FOR gmfgen::GenDiagram-» -«EXPAND xpt::Common::generatedMemberComment» -private static boolean constraintsActive = false; -«ENDDEFINE» - -«DEFINE shouldConstraintsBePrivate FOR gmfgen::GenDiagram-» -«EXPAND xpt::Common::generatedMemberComment» -public static boolean shouldConstraintsBePrivate() { - return false; -} -«ENDDEFINE» - -«DEFINE runWithActiveConstraints FOR gmfgen::GenDiagram-» -«EXPAND xpt::Common::generatedMemberComment» -public static void runWithConstraints(org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain, Runnable operation) { - final Runnable op = operation; - Runnable task = new Runnable() { - public void run() { - try { - constraintsActive = true; - op.run(); - } finally { - constraintsActive = false; - } - } - }; - if(editingDomain != null) { - try { - editingDomain.runExclusive(task); - } catch (Exception e) { - «editorGen.plugin.getActivatorQualifiedClassName()».getInstance().logError("Validation failed", e); «EXPAND xpt::Common::nonNLS» - } - } else { - task.run(); - } -} -«ENDDEFINE» - - -«DEFINE additions FOR gmfgen::GenDiagram»«ENDDEFINE» - -«DEFINE selectors FOR gmfgen::GenAuditRoot-» -«FOREACH clientContexts->asSequence() AS ctx» - «EXPAND xpt::Common::generatedMemberComment» - public static class «ctx.className» implements org.eclipse.emf.validation.model.IClientSelector { - - «EXPAND xpt::Common::generatedMemberComment» - public boolean selects(Object object) { -«IF (ctx.ruleTargets)[gmfgen::GenDiagramElementTarget]->size() > 0 -» - if (isInDefaultEditorContext(object) && object instanceof org.eclipse.gmf.runtime.notation.View) { - final int id = «EXPAND xpt::editor::VisualIDRegistry::getVisualIDMethodCall FOR editorGen.diagram»((org.eclipse.gmf.runtime.notation.View) object); - boolean result = false; -«FOREACH getTargetDiagramElements(ctx) AS e-» - result = result || id == «EXPAND xpt::editor::VisualIDRegistry::visualID FOR e»; -«ENDFOREACH-» - return result; - } - return false; -«ELSE-» - return isInDefaultEditorContext(object); -«ENDIF-» - } - } -«ENDFOREACH-» -«ENDDEFINE» - -«DEFINE isInDefaultEditorContext FOR gmfgen::GenDiagram-» -«EXPAND xpt::Common::generatedMemberComment» -static boolean isInDefaultEditorContext(Object object) { - if(shouldConstraintsBePrivate() && !constraintsActive) { - return false; - } - if (object instanceof org.eclipse.gmf.runtime.notation.View) { - return constraintsActive && «EXPAND xpt::editor::VisualIDRegistry::modelID».equals(«EXPAND xpt::editor::VisualIDRegistry::getModelIDMethodCall»((org.eclipse.gmf.runtime.notation.View) object)); - } - return true; -} -«ENDDEFINE» - - -«DEFINE strategy_support FOR gmfgen::GenDiagram-» -«IF hasDiagramElementTargetRule(editorGen.audits)-» - «EXPAND xpt::Common::generatedMemberComment» - public static org.eclipse.emf.validation.service.ITraversalStrategy getNotationTraversalStrategy( - org.eclipse.emf.validation.service.IBatchValidator validator) { - return new CtxSwitchStrategy(validator); - } - - «EXPAND xpt::Common::generatedMemberComment» - private static class CtxSwitchStrategy implements org.eclipse.emf.validation.service.ITraversalStrategy { - - «EXPAND xpt::Common::generatedMemberComment» - private org.eclipse.emf.validation.service.ITraversalStrategy defaultStrategy; - - «EXPAND xpt::Common::generatedMemberComment» - private int currentSemanticCtxId = -1; - - «EXPAND xpt::Common::generatedMemberComment» - private boolean ctxChanged = true; - - «EXPAND xpt::Common::generatedMemberComment» - private org.eclipse.emf.ecore.EObject currentTarget; - - «EXPAND xpt::Common::generatedMemberComment» - private org.eclipse.emf.ecore.EObject preFetchedNextTarget; - - «EXPAND xpt::Common::generatedMemberComment» - private final int[] contextSwitchingIdentifiers; - - «EXPAND xpt::Common::generatedMemberComment» - CtxSwitchStrategy(org.eclipse.emf.validation.service.IBatchValidator validator) { - this.defaultStrategy = validator.getDefaultTraversalStrategy(); - this.contextSwitchingIdentifiers = new int[] { - «EXPAND xpt::editor::VisualIDRegistry::visualID FOREACH getAllTargetDiagramElements(editorGen.audits) SEPARATOR ','» - }; - java.util.Arrays.sort(this.contextSwitchingIdentifiers); - } - - «EXPAND xpt::Common::generatedMemberComment» - public void elementValidated(org.eclipse.emf.ecore.EObject element, - org.eclipse.core.runtime.IStatus status) { - defaultStrategy.elementValidated(element, status); - } - - «EXPAND xpt::Common::generatedMemberComment» - public boolean hasNext() { - return defaultStrategy.hasNext(); - } - - «EXPAND xpt::Common::generatedMemberComment» - public boolean isClientContextChanged() { - if (preFetchedNextTarget == null) { - preFetchedNextTarget = next(); - prepareNextClientContext(preFetchedNextTarget); - } - return ctxChanged; - } - - «EXPAND xpt::Common::generatedMemberComment» - public org.eclipse.emf.ecore.EObject next() { - org.eclipse.emf.ecore.EObject nextTarget = preFetchedNextTarget; - if (nextTarget == null) { - nextTarget = defaultStrategy.next(); - } - this.preFetchedNextTarget = null; - return this.currentTarget = nextTarget; - } - - «EXPAND xpt::Common::generatedMemberComment» - public void startTraversal(java.util.Collection traversalRoots, org.eclipse.core.runtime.IProgressMonitor monitor) { - defaultStrategy.startTraversal(traversalRoots, monitor); - } - - «EXPAND xpt::Common::generatedMemberComment» - private void prepareNextClientContext(org.eclipse.emf.ecore.EObject nextTarget) { - if (nextTarget != null && currentTarget != null) { - if (nextTarget instanceof org.eclipse.gmf.runtime.notation.View) { - final int id = «EXPAND xpt::editor::VisualIDRegistry::getVisualIDMethodCall FOR editorGen.diagram»((org.eclipse.gmf.runtime.notation.View) nextTarget); - int nextSemanticId = (id != -1 && java.util.Arrays.binarySearch(contextSwitchingIdentifiers, id) >= 0) ? id : -1; - if ((currentSemanticCtxId != -1 && currentSemanticCtxId != nextSemanticId) - || (nextSemanticId != -1 && nextSemanticId != currentSemanticCtxId)) { - this.ctxChanged = true; - }«/*[artem] not sure why not ctxChanged = <expr>, is it intentional not to reset ctxChanged if condition did not match? I doubt. FIXME?*/» - currentSemanticCtxId = nextSemanticId; - } else { - // context of domain model - this.ctxChanged = currentSemanticCtxId != -1; - currentSemanticCtxId = -1; - } - } else { - this.ctxChanged = false; - } - } - } -«ENDIF-» -«ENDDEFINE» - - -«DEFINE constraintAdapters(diagram : gmfgen::GenDiagram) FOR gmfgen::GenAuditRoot-» -«IF diagram.editorGen.expressionProviders <> null-» -«EXPAND constraintAdapter(diagram.editorGen.expressionProviders) FOREACH rules->select(a | a.requiresConstraintAdapter)-» -«IF not rules->select(a | a.requiresConstraintAdapter)->isEmpty()» -«EXPAND constraintAdapters_formatMethod» -«ENDIF» -«ENDIF-» -«ENDDEFINE» - -«DEFINE constraintAdapter(container : gmfgen::GenExpressionProviderContainer) FOR gmfgen::GenAuditRule-» -«IF target <> null and target.getContext() <> null-» - - «EXPAND xpt::Common::generatedMemberComment» - public static class «getConstraintAdapterLocalClassName()» extends org.eclipse.emf.validation.AbstractModelConstraint { - - «EXPAND xpt::Common::generatedMemberComment» - public org.eclipse.core.runtime.IStatus validate(org.eclipse.emf.validation.IValidationContext ctx) { - «EXPAND constraintAdapter_initContext(self) FOR target-» - «EXPAND constraintAdapter_validateMethod(self) FOR rule.provider-» - } - } -«ENDIF-» -«ENDDEFINE» - - -«DEFINE constraintAdapters_formatMethod FOR gmfgen::GenAuditRoot-» - «EXPAND xpt::Common::generatedMemberComment» - static String formatElement(org.eclipse.emf.ecore.EObject object) { - return org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil.getQualifiedName(object, true); - } -«ENDDEFINE» - -/* - * Expects 'context' variable to be initialized - */ -«DEFINE constraintAdapter_validateMethod(audit : gmfgen::GenAuditRule) FOR gmfgen::GenExpressionProviderBase»«ERROR 'No idea how to evaluate an audit rule for ' + self.repr()»«ENDDEFINE» - -«DEFINE constraintAdapter_validateMethod(audit : gmfgen::GenAuditRule) FOR gmfgen::GenExpressionInterpreter-» - Object result = «EXPAND xpt::expressions::getExpression::getExpression(audit.rule, audit.target.getContext())».evaluate(context); - if (result instanceof Boolean && ((Boolean) result).booleanValue()) { - return org.eclipse.core.runtime.Status.OK_STATUS;«REM»XXX why not ctx.createSuccessStatus()???«ENDREM» - } - return ctx.createFailureStatus(new Object[] { formatElement(ctx.getTarget()) }); -«ENDDEFINE» - -«DEFINE constraintAdapter_validateMethod(audit : gmfgen::GenAuditRule) FOR gmfgen::GenJavaExpressionProvider-» -«IF injectExpressionBody and (audit.rule.body <> null and audit.rule.body.size() <> 0)-» - «audit.rule.body» -«ELSEIF throwException or (injectExpressionBody and (audit.rule.body = null or audit.rule.body.size() = 0))-» - // TODO: put validation code here - // Ensure that you remove @generated tag or use @generated NOT - // - // To construct approprate return value, use ctx.createSuccessStatus() - // or ctx.createFailureStatus(...) - throw new java.lang.UnsupportedOperationException("No user java implementation provided for #validate(IValidationContext) operation");«EXPAND xpt::Common::nonNLS» -«ELSE-» - return ctx.createFailureStatus(new Object[] { "No user java implementation provided for #validate(IValidationContext) operation" });«EXPAND xpt::Common::nonNLS» -«ENDIF-» -«ENDDEFINE» - -/* - * Contract: declare variable with the name 'context' of appropriate type - */ -«DEFINE constraintAdapter_initContext(audit : gmfgen::GenAuditRule) FOR gmfgen::GenAuditable-» -«EXPAND MetaModel::DeclareAndAssign('context', 'ctx.getTarget()', false) FOR getContext()» -«ENDDEFINE» - -«DEFINE constraintAdapter_initContext(audit : gmfgen::GenAuditRule) FOR gmfgen::GenDomainAttributeTarget-» - final Object«REM»Actual context type is genDomainAttributeTarget.getContext()«ENDREM» context = ctx.getTarget().eGet(«EXPAND MetaModel::MetaFeature FOR attribute»); -«REM» - For now, leave reflective access that gives Object-compatible result. - - FIXME: introduce MetaModel::DeclareAndAssignAttributeValueAsObject, that would - check if attibute type is primitive and wrap accordingly, but access attribute directly! -«ENDREM-» - if (context == null) { -«IF nullAsError-» - return ctx.createFailureStatus(new Object[] { formatElement(ctx.getTarget()) }); -«ELSE-» - return org.eclipse.core.runtime.Status.OK_STATUS; -«ENDIF-» - } -«ENDDEFINE» - -«DEFINE constraintAdapter_initContext(audit : gmfgen::GenAuditRule) FOR gmfgen::GenAuditedMetricTarget-» -final Number context = «IF metric = null /*though metamodel constraint should not allow this*/»null /*FIXME: metric target was not correctly specified in the model*/«ELSE»«EXPAND MetricProvider::invokeCalcMethod('ctx.getTarget()', false) FOR metric»«ENDIF»; -«ENDDEFINE» |