Skip to content

Commit

Permalink
[219] Handle ConjugatedPortDefinition
Browse files Browse the repository at this point in the history
Bug: #219
Signed-off-by: Axel RICHARD <axel.richard@obeo.fr>
  • Loading branch information
AxelRICHARD committed Apr 23, 2024
1 parent 22c5811 commit 162699e
Show file tree
Hide file tree
Showing 11 changed files with 667 additions and 531 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@

- https://github.com/eclipse-syson/syson/issues/147[#147] [general-view] Refactor compartments of `RequirementDefinition` and `RequirementUsage` to better fit the specification and examples.
- https://github.com/eclipse-syson/syson/issues/196[#196] [export] SysML standard serialization format
- https://github.com/eclipse-syson/syson/issues/219[#219] [diagrams] Handle ConjugatedPortDefinition in diagrams, Explorer and Details View.

== v2024.3.0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,13 +344,13 @@ private List<FormElementIf> createWidgets() {

FormElementIf label = FormFactory.eINSTANCE.createFormElementIf();
label.setName("Read-only String Attributes");
label.setPredicateExpression("aql:eStructuralFeature.isReadOnlyStringAttribute()");
label.setPredicateExpression("aql:self.isReadOnlyStringAttribute(eStructuralFeature)");
label.getChildren().add(this.createLabelWidget());
widgets.add(label);

FormElementIf textfield = FormFactory.eINSTANCE.createFormElementIf();
textfield.setName("String Attributes");
textfield.setPredicateExpression("aql:eStructuralFeature.isStringAttribute()");
textfield.setPredicateExpression("aql:self.isStringAttribute(eStructuralFeature)");
textfield.getChildren().add(this.createTextfieldWidget());
widgets.add(textfield);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.eclipse.syson.sysml.NamespaceImport;
import org.eclipse.syson.sysml.OccurrenceDefinition;
import org.eclipse.syson.sysml.OccurrenceUsage;
import org.eclipse.syson.sysml.PortConjugation;
import org.eclipse.syson.sysml.PortUsage;
import org.eclipse.syson.sysml.Redefinition;
import org.eclipse.syson.sysml.ReferenceSubsetting;
Expand Down Expand Up @@ -158,6 +159,15 @@ public List<EStructuralFeature> caseNamespaceImport(NamespaceImport object) {
return features;
}

@Override
public List<EStructuralFeature> casePortConjugation(PortConjugation object) {
var features = new ArrayList<EStructuralFeature>();
features.addAll(this.caseElement(object));
features.add(SysmlPackage.eINSTANCE.getConjugation_ConjugatedType());
features.add(SysmlPackage.eINSTANCE.getPortConjugation_OriginalPortDefinition());
return features;
}

@Override
public List<EStructuralFeature> casePortUsage(PortUsage object) {
var features = new ArrayList<EStructuralFeature>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.syson.application.configuration.SysMLStandardLibrariesConfiguration;
import org.eclipse.syson.application.configuration.SysMLv2PropertiesConfigurer;
import org.eclipse.syson.services.ImportService;
import org.eclipse.syson.sysml.ConjugatedPortDefinition;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.SysmlPackage;

Expand Down Expand Up @@ -103,40 +104,53 @@ public boolean setNewValue(Element element, String eStructuralFeatureName, Objec
}

public boolean isReadOnly(EStructuralFeature eStructuralFeature) {
return eStructuralFeature.isDerived() || !eStructuralFeature.isChangeable();
boolean isReadOnly = false;
if (SysmlPackage.eINSTANCE.getConjugation_ConjugatedType().equals(eStructuralFeature)) {
isReadOnly = true;
} else if (SysmlPackage.eINSTANCE.getPortConjugation_OriginalPortDefinition().equals(eStructuralFeature)) {
isReadOnly = true;
} else {
isReadOnly = eStructuralFeature.isDerived() || !eStructuralFeature.isChangeable();
}
return isReadOnly;
}

public boolean isReadOnly(Element element) {
boolean isReadOnly = false;
Resource resource = element.eResource();
if (resource != null) {
String uri = resource.getURI().toString();
return uri.startsWith(SysMLStandardLibrariesConfiguration.SYSML_LIBRARY_SCHEME) || uri.startsWith(SysMLStandardLibrariesConfiguration.KERML_LIBRARY_SCHEME);
isReadOnly = uri.startsWith(SysMLStandardLibrariesConfiguration.SYSML_LIBRARY_SCHEME) || uri.startsWith(SysMLStandardLibrariesConfiguration.KERML_LIBRARY_SCHEME);
}
return false;
return isReadOnly;
}

public boolean isReadOnlyStringAttribute(EStructuralFeature eStructuralFeature) {
public boolean isReadOnlyStringAttribute(Element element, EStructuralFeature eStructuralFeature) {
if (eStructuralFeature instanceof EAttribute) {
EClassifier eType = eStructuralFeature.getEType();
boolean readOnlyProperty = false;
if (SysmlPackage.eINSTANCE.getElement_ElementId().equals(eStructuralFeature)) {
readOnlyProperty = true;
} else if (eStructuralFeature.isDerived() || !eStructuralFeature.isChangeable()) {
readOnlyProperty = true;
} else if (element instanceof ConjugatedPortDefinition) {
readOnlyProperty = true;
}
return readOnlyProperty && (!eStructuralFeature.isMany() && (eType.equals(EcorePackage.Literals.ESTRING) || Objects.equals(eType.getInstanceClassName(), String.class.getName())));
}
return false;
}

public boolean isStringAttribute(EStructuralFeature eStructuralFeature) {
public boolean isStringAttribute(Element element, EStructuralFeature eStructuralFeature) {
if (eStructuralFeature instanceof EAttribute) {
EClassifier eType = eStructuralFeature.getEType();
boolean readOnlyProperty = false;
if (SysmlPackage.eINSTANCE.getElement_ElementId().equals(eStructuralFeature)) {
readOnlyProperty = true;
} else if (eStructuralFeature.isDerived() || !eStructuralFeature.isChangeable()) {
readOnlyProperty = true;
} else if (element instanceof ConjugatedPortDefinition) {
readOnlyProperty = true;
}
return !readOnlyProperty && (!eStructuralFeature.isMany() && (eType.equals(EcorePackage.Literals.ESTRING) || Objects.equals(eType.getInstanceClassName(), String.class.getName())));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class LabelConstants {

public static final String COLON = ":";

public static final String CONJUGATED = "\u007E";

public static final String CLOSE_BRACKET = "]";

public static final String CLOSE_PARENTHESIS = ")";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.eclipse.syson.sysml.PortConjugation;
import org.eclipse.syson.sysml.PortDefinition;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.sysml.helper.LabelConstants;

/**
* <!-- begin-user-doc -->
Expand Down Expand Up @@ -61,8 +62,8 @@ protected EClass eStaticClass() {
*/
@Override
public PortDefinition getOriginalPortDefinition() {
PortDefinition originalPortDefinition = basicGetOriginalPortDefinition();
return originalPortDefinition != null && originalPortDefinition.eIsProxy() ? (PortDefinition)eResolveProxy((InternalEObject)originalPortDefinition) : originalPortDefinition;
PortDefinition originalPortDefinition = this.basicGetOriginalPortDefinition();
return originalPortDefinition != null && originalPortDefinition.eIsProxy() ? (PortDefinition)this.eResolveProxy((InternalEObject)originalPortDefinition) : originalPortDefinition;
}

/**
Expand All @@ -85,19 +86,47 @@ public PortDefinition basicGetOriginalPortDefinition() {
*/
@Override
public PortConjugation getOwnedPortConjugator() {
PortConjugation ownedPortConjugator = basicGetOwnedPortConjugator();
return ownedPortConjugator != null && ownedPortConjugator.eIsProxy() ? (PortConjugation)eResolveProxy((InternalEObject)ownedPortConjugator) : ownedPortConjugator;
PortConjugation ownedPortConjugator = this.basicGetOwnedPortConjugator();
return ownedPortConjugator != null && ownedPortConjugator.eIsProxy() ? (PortConjugation)this.eResolveProxy((InternalEObject)ownedPortConjugator) : ownedPortConjugator;
}

/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @generated NOT
*/
public PortConjugation basicGetOwnedPortConjugator() {
// TODO: implement this method to return the 'Owned Port Conjugator' reference
// -> do not perform proxy resolution
// Ensure that you remove @generated or mark it @generated NOT
return this.getOwnedRelationship().stream()
.filter(PortConjugation.class::isInstance)
.map(PortConjugation.class::cast)
.findFirst()
.orElse(null);
}

/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
@Override
public void setDeclaredName(String newDeclaredName) {
// Nothing to do here
}

/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
@Override
public String getDeclaredName() {
PortDefinition originalPortDefinition = this.getOriginalPortDefinition();
if (originalPortDefinition != null) {
StringBuilder declaredName = new StringBuilder();
declaredName.append(LabelConstants.CONJUGATED);
declaredName.append(originalPortDefinition.getDeclaredName());
return declaredName.toString();
}
return null;
}

Expand All @@ -110,11 +139,15 @@ public PortConjugation basicGetOwnedPortConjugator() {
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case SysmlPackage.CONJUGATED_PORT_DEFINITION__ORIGINAL_PORT_DEFINITION:
if (resolve) return getOriginalPortDefinition();
return basicGetOriginalPortDefinition();
if (resolve) {
return this.getOriginalPortDefinition();
}
return this.basicGetOriginalPortDefinition();
case SysmlPackage.CONJUGATED_PORT_DEFINITION__OWNED_PORT_CONJUGATOR:
if (resolve) return getOwnedPortConjugator();
return basicGetOwnedPortConjugator();
if (resolve) {
return this.getOwnedPortConjugator();
}
return this.basicGetOwnedPortConjugator();
}
return super.eGet(featureID, resolve, coreType);
}
Expand All @@ -128,9 +161,9 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) {
public boolean eIsSet(int featureID) {
switch (featureID) {
case SysmlPackage.CONJUGATED_PORT_DEFINITION__ORIGINAL_PORT_DEFINITION:
return basicGetOriginalPortDefinition() != null;
return this.basicGetOriginalPortDefinition() != null;
case SysmlPackage.CONJUGATED_PORT_DEFINITION__OWNED_PORT_CONJUGATOR:
return basicGetOwnedPortConjugator() != null;
return this.basicGetOwnedPortConjugator() != null;
}
return super.eIsSet(featureID);
}
Expand Down

Large diffs are not rendered by default.

Loading

0 comments on commit 162699e

Please sign in to comment.