Skip to content

Commit

Permalink
Improve General View
Browse files Browse the repository at this point in the history
Signed-off-by: Axel RICHARD <axel.richard@obeo.fr>
  • Loading branch information
AxelRICHARD committed Nov 28, 2023
1 parent 2c8bae1 commit c8b39f6
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.FeatureTyping;
import org.eclipse.syson.sysml.Redefinition;
import org.eclipse.syson.sysml.Specialization;
import org.eclipse.syson.sysml.Subclassification;
Expand Down Expand Up @@ -46,6 +47,14 @@ public List<EStructuralFeature> caseElement(Element object) {
return features;
}

@Override
public List<EStructuralFeature> caseFeatureTyping(FeatureTyping object) {
var features = new ArrayList<EStructuralFeature>();
features.addAll(this.caseSpecialization(object));
features.add(SysmlPackage.eINSTANCE.getFeatureTyping_Type());
return features;
}

@Override
public List<EStructuralFeature> caseRedefinition(Redefinition object) {
var features = new ArrayList<EStructuralFeature>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.eclipse.syson.sysml.Annotation;
import org.eclipse.syson.sysml.Documentation;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.Membership;
import org.eclipse.syson.sysml.Namespace;
import org.eclipse.syson.sysml.OwningMembership;
import org.eclipse.syson.sysml.Relationship;
Expand Down Expand Up @@ -521,7 +522,13 @@ else if (eNotificationRequired())
public String getQualifiedName() {
StringBuilder qualifiedName = new StringBuilder();
EObject container = this.eContainer();
if (container instanceof Element element) {
if (container instanceof Membership membership) {
EObject membershipContainer = membership.eContainer();
if (membershipContainer instanceof Element element) {
qualifiedName.append(element.getQualifiedName());
qualifiedName.append("::");
}
} else if (container instanceof Element element) {
qualifiedName.append(element.getQualifiedName());
qualifiedName.append("::");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,23 +60,26 @@ public void exitTypingExpression(TypingExpressionContext ctx) {
if (definition == null) {
var containerPackage = this.generalViewUtilService.getContainerPackage(this.element);
var newMembership = SysmlFactory.eINSTANCE.createOwningMembership();
containerPackage.getOwnedMembership().add(newMembership);
EClassifier eClassifier = SysmlPackage.eINSTANCE.getEClassifier(this.element.eClass().getInstanceTypeName().replace("Usage", "Definition"));
containerPackage.getOwnedRelationship().add(newMembership);
EClassifier eClassifier = SysmlPackage.eINSTANCE.getEClassifier(this.element.eClass().getName().replace("Usage", "Definition"));
if (eClassifier instanceof EClass eClass) {
definition = (Definition) SysmlFactory.eINSTANCE.create(eClass);
definition.setDeclaredName(typeAsString);
newMembership.getOwnedRelatedElement().add(definition);
}
}
var featureTyping = this.element.getOwnedRelationship().stream()
.filter(FeatureTyping.class::isInstance)
.map(FeatureTyping.class::cast)
.findFirst();
if (featureTyping.isPresent()) {
featureTyping.get().setType(definition);
} else {
var newFeatureTyping = SysmlFactory.eINSTANCE.createFeatureTyping();
this.element.getOwnedRelationship().add(newFeatureTyping);
featureTyping.get().setType(definition);
if (definition != null) {
var featureTyping = this.element.getOwnedRelationship().stream()
.filter(FeatureTyping.class::isInstance)
.map(FeatureTyping.class::cast)
.findFirst();
if (featureTyping.isPresent()) {
featureTyping.get().setType(definition);
} else {
var newFeatureTyping = SysmlFactory.eINSTANCE.createFeatureTyping();
this.element.getOwnedRelationship().add(newFeatureTyping);
featureTyping.get().setType(definition);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ protected NodeDescription createDefinitionAttributesCompartmentItem(String name)
.defaultHeightExpression(GeneralViewDiagramDescriptionProvider.DEFAULT_COMPARTMENT_NODE_ITEM_HEIGHT)
.defaultWidthExpression(GeneralViewDiagramDescriptionProvider.DEFAULT_NODE_WIDTH)
.domainType(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getAttributeUsage()))
.labelExpression(GeneralViewDiagramDescriptionProvider.DEFAULT_LABEL_EXPRESSION)
.labelExpression("aql:self.getCompartmentItemLabel()")
.name(name + " AttributesCompartmentItem")
.semanticCandidatesExpression(AQLConstants.AQL_SELF + "." + SysmlPackage.eINSTANCE.getDefinition_OwnedAttribute().getName())
.style(this.createDefinitionCompartmentItemNodeStyle())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import org.eclipse.syson.diagram.general.view.directedit.grammars.generated.DirectEditParser;
import org.eclipse.syson.sysml.Dependency;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.FeatureTyping;
import org.eclipse.syson.sysml.Usage;

/**
* Label-related Java services used by the {@link GeneralViewDiagramDescriptionProvider}.
Expand All @@ -43,6 +45,56 @@ public String getContainerLabel(Element element) {
return new ContainerLabelSwitch().doSwitch(element);
}

/**
* Return the compartment item label for the given {@link Usage}.
*
* @param usage
* the given {@link Usage}.
* @return the compartment item label for the given {@link Usage}.
*/
public String getCompartmentItemLabel(Usage usage) {
StringBuilder builder = new StringBuilder();
builder.append(usage.getDeclaredName());
builder.append(this.getTypingLabel(usage));
builder.append(this.getValueLabel(usage));
return builder.toString();
}

/**
* Return the label of the value part of the given {@link Usage}.
*
* @param usage
* the given {@link Usage}.
* @return the label of the value part of the given {@link Usage} if there is one, an empty string otherwise.
*/
private String getValueLabel(Usage usage) {
return "";
}

/**
* Return the label of the typing part of the given {@link Usage}.
*
* @param usage
* the given {@link Usage}.
* @return the label of the typing part of the given {@link Usage} if there is one, an empty string otherwise.
*/
private String getTypingLabel(Usage usage) {
StringBuilder builder = new StringBuilder();
builder.append("");
var featureTyping = usage.getOwnedRelationship().stream()
.filter(FeatureTyping.class::isInstance)
.map(FeatureTyping.class::cast)
.findFirst();
if (featureTyping.isPresent()) {
var type = featureTyping.get().getType();
if (type != null) {
builder.append(" : ");
builder.append(type.getDeclaredName());
}
}
return builder.toString();
}

/**
* Return the edge label for the given {@link Dependency}.
*
Expand All @@ -68,7 +120,6 @@ public Element directEdit(Element element, String newLabel) {
CommonTokenStream tokens = new CommonTokenStream(lexer);
DirectEditParser parser = new DirectEditParser(tokens);
ParseTree tree = parser.expression();

ParseTreeWalker walker = new ParseTreeWalker();
DirectEditListener listener = new GeneralViewDirectEditListener(element);
walker.walk(listener, tree);
Expand All @@ -83,6 +134,9 @@ public Element directEdit(Element element, String newLabel) {
* @return the value to display.
*/
public String getInitialDirectEditLabel(Element element) {
if (element instanceof Usage usage) {
return this.getCompartmentItemLabel(usage);
}
return element.getDeclaredName();
}
}

0 comments on commit c8b39f6

Please sign in to comment.