Skip to content

Commit daeb2f4

Browse files
committed
[2176] Implement FramedConcernMembership attributes
Bug: #2176 Signed-off-by: Guillaume Coutable <guillaume.coutable@obeo.fr>
1 parent 8edc067 commit daeb2f4

5 files changed

Lines changed: 117 additions & 28 deletions

File tree

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ Both tools optionally allow selecting an existing `StateUsage` to exhibit.
9393

9494
- https://github.com/eclipse-syson/syson/issues/1979[#1979] [diagrams] Add tools to create timeslices and snapshots, available on `OccurrenceUsage`, `ItemUsage`, and `PartUsage` graphical nodes.
9595
These tools leverage a selection dialog to either create a specific timeslice/snapshot graphical node or, if no selection is made, default to a timeslice/snapshot `OccurrenceUsage` graphical node.
96+
- https://github.com/eclipse-syson/syson/issues/2176[#2176] [metamodel] Implements `ownedConcern` and `referencedConcern` of `FramedConcernMembership`.
9697

9798
== v2026.3.0
9899

backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/FramedConcernMembershipImpl.java

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
/*******************************************************************************
2-
* Copyright (c) 2023, 2025 Obeo.
3-
* This program and the accompanying materials
4-
* are made available under the terms of the Eclipse Public License v2.0
5-
* which accompanies this distribution, and is available at
6-
* https://www.eclipse.org/legal/epl-2.0/
7-
*
8-
* SPDX-License-Identifier: EPL-2.0
9-
*
10-
* Contributors:
11-
* Obeo - initial API and implementation
12-
*******************************************************************************/
2+
* Copyright (c) 2023, 2026 Obeo.
3+
* This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v2.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Obeo - initial API and implementation
12+
*******************************************************************************/
1313
package org.eclipse.syson.sysml.impl;
1414

1515
import org.eclipse.emf.ecore.EClass;
@@ -67,13 +67,14 @@ public ConcernUsage getOwnedConcern() {
6767
/**
6868
* <!-- begin-user-doc --> <!-- end-user-doc -->
6969
*
70-
* @generated
70+
* @generated NOT
7171
*/
7272
public ConcernUsage basicGetOwnedConcern() {
73-
// TODO: implement this method to return the 'Owned Concern' reference
74-
// -> do not perform proxy resolution
75-
// Ensure that you remove @generated or mark it @generated NOT
76-
return null;
73+
return this.getOwnedRelatedElement().stream()
74+
.filter(ConcernUsage.class::isInstance)
75+
.map(ConcernUsage.class::cast)
76+
.findFirst()
77+
.orElse(null);
7778
}
7879

7980
/**
@@ -93,9 +94,10 @@ public ConcernUsage getReferencedConcern() {
9394
* @generated
9495
*/
9596
public ConcernUsage basicGetReferencedConcern() {
96-
// TODO: implement this method to return the 'Referenced Concern' reference
97-
// -> do not perform proxy resolution
98-
// Ensure that you remove @generated or mark it @generated NOT
97+
var referencedConstraint = super.getReferencedConstraint();
98+
if (referencedConstraint instanceof ConcernUsage referencedConcern) {
99+
return referencedConcern;
100+
}
99101
return null;
100102
}
101103

backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/RequirementConstraintMembershipImpl.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
/**
2-
* Copyright (c) 2023, 2025 Obeo.
1+
/*******************************************************************************
2+
* Copyright (c) 2023, 2026 Obeo.
33
* This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v2.0
55
* which accompanies this distribution, and is available at
@@ -9,9 +9,11 @@
99
*
1010
* Contributors:
1111
* Obeo - initial API and implementation
12-
*/
12+
*******************************************************************************/
1313
package org.eclipse.syson.sysml.impl;
1414

15+
import java.util.Optional;
16+
1517
import org.eclipse.emf.common.notify.Notification;
1618
import org.eclipse.emf.ecore.EClass;
1719
import org.eclipse.emf.ecore.InternalEObject;
@@ -140,13 +142,16 @@ public ConstraintUsage getReferencedConstraint() {
140142
/**
141143
* <!-- begin-user-doc --> <!-- end-user-doc -->
142144
*
143-
* @generated
145+
* @generated NOT
144146
*/
145147
public ConstraintUsage basicGetReferencedConstraint() {
146-
// TODO: implement this method to return the 'Referenced Constraint' reference
147-
// -> do not perform proxy resolution
148-
// Ensure that you remove @generated or mark it @generated NOT
149-
return null;
148+
var ownedConstraint = this.getOwnedConstraint();
149+
return Optional.ofNullable(ownedConstraint)
150+
.map(ConstraintUsage::referencedFeatureTarget)
151+
.filter(ConstraintUsage.class::isInstance)
152+
.map(ConstraintUsage.class::cast)
153+
.or(() -> Optional.ofNullable(ownedConstraint))
154+
.orElse(null);
150155
}
151156

152157
/**

backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/ConstraintUsageImplTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2025 Obeo.
2+
* Copyright (c) 2025, 2026 Obeo.
33
* This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v2.0
55
* which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
1212
*******************************************************************************/
1313
package org.eclipse.syson.sysml.impl;
1414

15+
import static org.assertj.core.api.Assertions.assertThat;
1516
import static org.junit.jupiter.api.Assertions.assertEquals;
1617

1718
import org.eclipse.syson.sysml.ConstraintUsage;
@@ -47,6 +48,7 @@ public void getNames() {
4748

4849
reqMembership.getOwnedRelatedElement().add(constraint);
4950
this.builder.addReferenceSubsetting(constraint, superConstraint);
51+
assertThat(reqMembership.getReferencedConstraint()).isEqualTo(superConstraint);
5052

5153
assertEquals("SuperConstraint", constraint.getName());
5254
assertEquals("SuperConstraint", constraint.effectiveName());
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 Obeo.
3+
* This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v2.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Obeo - initial API and implementation
12+
*******************************************************************************/
13+
package org.eclipse.syson.sysml.impl;
14+
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
17+
import org.eclipse.syson.sysml.SysmlFactory;
18+
import org.eclipse.syson.sysml.util.ModelBuilder;
19+
import org.junit.jupiter.api.BeforeEach;
20+
import org.junit.jupiter.api.Test;
21+
22+
/**
23+
* Test class for {@link FramedConcernMembershipImpl}.
24+
*
25+
* @author gcoutable
26+
*/
27+
public class FramedConcernMembershipImplTest {
28+
29+
private ModelBuilder builder;
30+
31+
@BeforeEach
32+
public void setUp() {
33+
this.builder = new ModelBuilder();
34+
}
35+
36+
@Test
37+
public void checkBasicGetOwnedConcern() {
38+
var framedConcernMembership = SysmlFactory.eINSTANCE.createFramedConcernMembership();
39+
40+
var requirementUsage = SysmlFactory.eINSTANCE.createRequirementUsage();
41+
requirementUsage.setDeclaredName("requirement1");
42+
framedConcernMembership.getOwnedRelatedElement().add(requirementUsage);
43+
assertThat(framedConcernMembership.getOwnedConcern()).isNull();
44+
45+
var anotherFramedConcernMembership = SysmlFactory.eINSTANCE.createFramedConcernMembership();
46+
47+
var concernUsage = SysmlFactory.eINSTANCE.createConcernUsage();
48+
concernUsage.setDeclaredName("concern1");
49+
anotherFramedConcernMembership.getOwnedRelatedElement().add(concernUsage);
50+
assertThat(anotherFramedConcernMembership.getOwnedConcern()).isEqualTo(concernUsage);
51+
52+
var referencedConcernUsage = SysmlFactory.eINSTANCE.createConcernUsage();
53+
referencedConcernUsage.setDeclaredName("concern2");
54+
this.builder.addReferenceSubsetting(concernUsage, referencedConcernUsage);
55+
assertThat(anotherFramedConcernMembership.getOwnedConcern()).isEqualTo(concernUsage);
56+
}
57+
58+
@Test
59+
public void checkBasicGetReferencedConstraint() {
60+
var framedConcernMembership = SysmlFactory.eINSTANCE.createFramedConcernMembership();
61+
62+
var requirementUsage = SysmlFactory.eINSTANCE.createRequirementUsage();
63+
requirementUsage.setDeclaredName("requirement1");
64+
framedConcernMembership.getOwnedRelatedElement().add(requirementUsage);
65+
assertThat(framedConcernMembership.getReferencedConstraint()).isNull();
66+
67+
var anotherFramedConcernMembership = SysmlFactory.eINSTANCE.createFramedConcernMembership();
68+
69+
var concernUsage = SysmlFactory.eINSTANCE.createConcernUsage();
70+
concernUsage.setDeclaredName("concern1");
71+
anotherFramedConcernMembership.getOwnedRelatedElement().add(concernUsage);
72+
assertThat(anotherFramedConcernMembership.getReferencedConcern()).isEqualTo(concernUsage);
73+
74+
var referencedConcernUsage = SysmlFactory.eINSTANCE.createConcernUsage();
75+
referencedConcernUsage.setDeclaredName("concern2");
76+
this.builder.addReferenceSubsetting(concernUsage, referencedConcernUsage);
77+
assertThat(anotherFramedConcernMembership.getReferencedConcern()).isEqualTo(referencedConcernUsage);
78+
}
79+
}

0 commit comments

Comments
 (0)