Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/uml/org.eclipse.papyrus.uml.elementtypesconfigurations/src/org/eclipse/papyrus/uml/elementtypesconfigurations/invariantstereotyperuleconfiguration/InvariantStereotypeRule.java')
-rw-r--r--plugins/uml/org.eclipse.papyrus.uml.elementtypesconfigurations/src/org/eclipse/papyrus/uml/elementtypesconfigurations/invariantstereotyperuleconfiguration/InvariantStereotypeRule.java193
1 files changed, 193 insertions, 0 deletions
diff --git a/plugins/uml/org.eclipse.papyrus.uml.elementtypesconfigurations/src/org/eclipse/papyrus/uml/elementtypesconfigurations/invariantstereotyperuleconfiguration/InvariantStereotypeRule.java b/plugins/uml/org.eclipse.papyrus.uml.elementtypesconfigurations/src/org/eclipse/papyrus/uml/elementtypesconfigurations/invariantstereotyperuleconfiguration/InvariantStereotypeRule.java
new file mode 100644
index 00000000000..9509e98a5e1
--- /dev/null
+++ b/plugins/uml/org.eclipse.papyrus.uml.elementtypesconfigurations/src/org/eclipse/papyrus/uml/elementtypesconfigurations/invariantstereotyperuleconfiguration/InvariantStereotypeRule.java
@@ -0,0 +1,193 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.elementtypesconfigurations.invariantstereotyperuleconfiguration;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.MoveRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
+import org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType;
+import org.eclipse.papyrus.uml.elementtypesconfigurations.requests.ApplyProfileRequest;
+import org.eclipse.papyrus.uml.elementtypesconfigurations.requests.ApplyStereotypeRequest;
+import org.eclipse.papyrus.uml.elementtypesconfigurations.requests.SetStereotypeValueRequest;
+import org.eclipse.papyrus.uml.elementtypesconfigurations.requests.UnapplyProfileRequest;
+import org.eclipse.papyrus.uml.elementtypesconfigurations.requests.UnapplyStereotypeRequest;
+import org.eclipse.papyrus.uml.elementtypesconfigurations.umlinvariantrule.AbstractUmlInvariantRule;
+import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
+
+public class InvariantStereotypeRule extends AbstractUmlInvariantRule<InvariantStereotypeRuleConfiguration> {
+
+ /**
+ * @see org.eclipse.papyrus.infra.elementtypesconfigurations.invarianttypes.invarianttypeconfiguration.IInvariantRule#matches(org.eclipse.emf.ecore.EObject)
+ *
+ * @param eObject
+ * @return
+ */
+ public boolean matches(EObject eObject) {
+ if (!(eObject instanceof Element)) {
+ return false;
+ }
+
+ String stereotypeQualifiedName = invariantRuleConfiguration.getStereotypeQualifiedName();
+ if (stereotypeQualifiedName == null) { // to avoid null pointers
+ return false;
+ }
+ Stereotype appliedStereotype = ((Element) eObject).getAppliedStereotype(stereotypeQualifiedName);
+ if (appliedStereotype != null) { // one has been found, no need to get further
+ return true;
+ } else if (!invariantRuleConfiguration.isStrict()) { // the stereotype does not match perfectly, but one of the applied stereotypes on the element could match if not strict
+ for (Stereotype stereotype : ((Element) eObject).getAppliedStereotypes()) {
+ for (Stereotype superStereotype : StereotypeUtil.getAllSuperStereotypes(stereotype)) {
+ if (stereotypeQualifiedName.equals(superStereotype.getQualifiedName())) {
+ return true; // there is a match in the super stereotypes. Finish here, element matches
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.elementtypesconfigurations.invarianttypes.invarianttypeconfiguration.AbstractInvariantRule#approveMoveRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.gmf.runtime.emf.type.core.requests.MoveRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveMoveRequest(ConfiguredHintedSpecializationElementType type, MoveRequest request) {
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.elementtypesconfigurations.invarianttypes.invarianttypeconfiguration.AbstractInvariantRule#approveSetRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveSetRequest(ConfiguredHintedSpecializationElementType type, SetRequest request) {
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.elementtypesconfigurations.invarianttypes.invarianttypeconfiguration.AbstractInvariantRule#approveCreationRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveCreationRequest(ConfiguredHintedSpecializationElementType type, CreateElementRequest request) {
+ // check that the required profile is present.
+ String requiredProfileName = invariantRuleConfiguration.getRequiredProfile();
+ if (requiredProfileName != null) {
+ // check target
+ EObject container = request.getContainer();
+ if (!(container instanceof Element)) {
+ return false;
+ }
+ Package nearestPackage = ((Element) container).getNearestPackage();
+ if (nearestPackage == null) {
+ return false;
+ }
+ Profile appliedProfile = nearestPackage.getAppliedProfile(requiredProfileName, true);
+ return appliedProfile != null;
+ }
+
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.elementtypesconfigurations.umlinvariantrule.AbstractUmlInvariantRule#approveApplyStereotypeRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.papyrus.uml.elementtypesconfigurations.requests.ApplyStereotypeRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveApplyStereotypeRequest(ConfiguredHintedSpecializationElementType type, ApplyStereotypeRequest request) {
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.elementtypesconfigurations.umlinvariantrule.AbstractUmlInvariantRule#approveUnapplyStereotypeRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.papyrus.uml.elementtypesconfigurations.requests.UnapplyStereotypeRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveUnapplyStereotypeRequest(ConfiguredHintedSpecializationElementType type, UnapplyStereotypeRequest request) {
+
+ if (request.getStereotype().getQualifiedName().equals(this.invariantRuleConfiguration.getStereotypeQualifiedName())) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.elementtypesconfigurations.umlinvariantrule.AbstractUmlInvariantRule#approveApplyProfileRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.papyrus.uml.elementtypesconfigurations.requests.ApplyProfileRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveApplyProfileRequest(ConfiguredHintedSpecializationElementType type, ApplyProfileRequest request) {
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.elementtypesconfigurations.umlinvariantrule.AbstractUmlInvariantRule#approveUnapplyProfileRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.papyrus.uml.elementtypesconfigurations.requests.UnapplyProfileRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveUnapplyProfileRequest(ConfiguredHintedSpecializationElementType type, UnapplyProfileRequest request) {
+ String requiredProfileName = invariantRuleConfiguration.getRequiredProfile();
+
+ if (requiredProfileName.equals(request.getProfile().getQualifiedName())) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.elementtypesconfigurations.umlinvariantrule.AbstractUmlInvariantRule#approveSetStereotypeValueRequest(org.eclipse.papyrus.infra.elementtypesconfigurations.impl.ConfiguredHintedSpecializationElementType,
+ * org.eclipse.papyrus.uml.elementtypesconfigurations.requests.SetStereotypeValueRequest)
+ *
+ * @param type
+ * @param request
+ * @return
+ */
+ @Override
+ protected boolean approveSetStereotypeValueRequest(ConfiguredHintedSpecializationElementType type, SetStereotypeValueRequest request) {
+ return true;
+ }
+
+}

Back to the top