Skip to content

Commit

Permalink
WIP Added the possibility to invoke tools that were declared in diffe…
Browse files Browse the repository at this point in the history
…rent View projects.

Bug : eclipse-sirius#1860

Signed-off-by: Michaël Charfadi <[email protected]>
  • Loading branch information
mcharfadi committed Mar 30, 2023
1 parent cb3e909 commit d24120a
Show file tree
Hide file tree
Showing 22 changed files with 486 additions and 118 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ NodeDescription#descriptionId to siriusComponents://nodeDescription?sourceKind=v
EdgeDescription#descriptionId to vers siriusComponents://edgeDescription?sourceKind=view&sourceId=UUID_OF_DOCUMENT&sourceElementId=UUID_OF_SOURCE_ELEMENT
+
Added a common interface IDiagramElement that is implemented by Node and Edge
+
Added the possibility to invoke tools that were declared in different View projects.

- https://github.com/eclipse-sirius/sirius-components/issues/1643[1643] [core] Removed our dependencies to Spring Security
- https://github.com/eclipse-sirius/sirius-components/issues/1592[#1592] [view] In View-based diagram definition, all tools applicable on a given element are now configured inside the new _Palette_ element directly inside the element (diagram, node or edge) description.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.Map;
import java.util.UUID;

import org.eclipse.sirius.components.compatibility.api.IIdOdesignElementsProvider;
import org.eclipse.sirius.components.compatibility.api.IIdentifierProvider;
import org.eclipse.sirius.components.compatibility.api.IModelOperationHandlerSwitchProvider;
import org.eclipse.sirius.components.compatibility.api.ISemanticCandidatesProviderFactory;
Expand Down Expand Up @@ -83,7 +84,7 @@ public String getIdentifier(Object element) {
ISemanticCandidatesProviderFactory semanticCandidatesProviderFactory = SemanticCandidatesProvider::new;
IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider = interpeter -> new ModelOperationHandlerSwitch(objectService, representationMetadataSearchService, identifierProvider,
List.of(), interpeter);
EdgeMappingConverter edgeMappingConverter = new EdgeMappingConverter(new IObjectService.NoOp(), new IEditService.NoOp(), identifierProvider, semanticCandidatesProviderFactory,
EdgeMappingConverter edgeMappingConverter = new EdgeMappingConverter(new IIdOdesignElementsProvider.NoOp(), new IObjectService.NoOp(), new IEditService.NoOp(), identifierProvider, semanticCandidatesProviderFactory,
modelOperationHandlerSwitchProvider);

EdgeDescription edgeDescription = edgeMappingConverter.convert(edgeMapping, new AQLInterpreter(List.of(), List.of()), id2NodeDescriptions);
Expand Down Expand Up @@ -160,7 +161,7 @@ public String getIdentifier(Object element) {

IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider = interpeter -> new ModelOperationHandlerSwitch(objectService, representationMetadataSearchService, identifierProvider,
List.of(), interpeter);
EdgeMappingConverter edgeMappingConverter = new EdgeMappingConverter(objectService, new IEditService.NoOp(), identifierProvider, semanticCandidatesProviderFactory,
EdgeMappingConverter edgeMappingConverter = new EdgeMappingConverter(new IIdOdesignElementsProvider.NoOp(), objectService, new IEditService.NoOp(), identifierProvider, semanticCandidatesProviderFactory,
modelOperationHandlerSwitchProvider);

EdgeDescription edgeDescription = edgeMappingConverter.convert(edgeMapping, new AQLInterpreter(List.of(), List.of()), id2NodeDescriptions);
Expand Down Expand Up @@ -200,7 +201,7 @@ public String getIdentifier(Object element) {
ISemanticCandidatesProviderFactory semanticCandidatesProviderFactory = SemanticCandidatesProvider::new;
IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider = interpeter -> new ModelOperationHandlerSwitch(objectService, representationMetadataSearchService, identifierProvider,
List.of(), interpeter);
EdgeMappingConverter edgeMappingConverter = new EdgeMappingConverter(objectService, new IEditService.NoOp(), identifierProvider, semanticCandidatesProviderFactory,
EdgeMappingConverter edgeMappingConverter = new EdgeMappingConverter(new IIdOdesignElementsProvider.NoOp(), objectService, new IEditService.NoOp(), identifierProvider, semanticCandidatesProviderFactory,
modelOperationHandlerSwitchProvider);

EdgeDescription edgeDescription = edgeMappingConverter.convert(edgeMapping, new AQLInterpreter(List.of(), List.of()), id2NodeDescriptions);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*******************************************************************************
* Copyright (c) 2023 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.components.compatibility.api;

import org.eclipse.sirius.diagram.description.AbstractNodeMapping;
import org.eclipse.sirius.diagram.description.DiagramDescription;
import org.eclipse.sirius.diagram.description.EdgeMapping;

/**
* Interface to provide ids for DiagramDescription & DiagramElementDescription.
*
* @author mcharfadi
*/
public interface IIdOdesignElementsProvider {

String SIRIUS_PROTOCOL = "siriusComponents://";

String SOURCE_KIND_VIEW = "?sourceKind=odesign";

String DIAGRAM_PATH_VIEW = SIRIUS_PROTOCOL + "diagramDescription" + SOURCE_KIND_VIEW;

String EDGE_PATH_VIEW = SIRIUS_PROTOCOL + "edgeDescription" + SOURCE_KIND_VIEW;

String NODE_PATH_VIEW = SIRIUS_PROTOCOL + "nodeDescription" + SOURCE_KIND_VIEW;

String SOURCE_ID = "sourceId=";

String SOURCE_ELEMENT_ID = "sourceElementId=";

String AMPERSAND = "&";

String getIdDiagramDescription(DiagramDescription diagramDescription);

String getIdElementDescription(AbstractNodeMapping abstractNodeMapping);

String getIdEdgeMapping(EdgeMapping edgeMapping);

/**
* Implementation which does nothing, used for mocks in unit tests.
*
* @author mcharfadi
*/
class NoOp implements IIdOdesignElementsProvider {

@Override
public String getIdDiagramDescription(DiagramDescription diagramDescription) {
return "";
}

@Override
public String getIdElementDescription(AbstractNodeMapping abstractNodeMapping) {
return "";
}

@Override
public String getIdEdgeMapping(EdgeMapping edgeMapping) {
return "";
}

}

}

Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Function;

import org.eclipse.sirius.components.compatibility.api.IIdOdesignElementsProvider;
import org.eclipse.sirius.components.compatibility.api.IIdentifierProvider;
import org.eclipse.sirius.components.compatibility.api.IModelOperationHandlerSwitchProvider;
import org.eclipse.sirius.components.compatibility.api.ISemanticCandidatesProviderFactory;
Expand Down Expand Up @@ -65,8 +65,11 @@ public class AbstractNodeMappingConverter {

private final ImageSizeProvider imageSizeProvider;

public AbstractNodeMappingConverter(IObjectService objectService, IEditService editService, IIdentifierProvider identifierProvider,
private final IIdOdesignElementsProvider idOdesignElementsProvider;

public AbstractNodeMappingConverter(IIdOdesignElementsProvider idOdesignElementsProvider, IObjectService objectService, IEditService editService, IIdentifierProvider identifierProvider,
ISemanticCandidatesProviderFactory semanticCandidatesProviderFactory, IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider, ImageSizeProvider imageSizeService) {
this.idOdesignElementsProvider = Objects.requireNonNull(idOdesignElementsProvider);
this.objectService = Objects.requireNonNull(objectService);
this.editService = Objects.requireNonNull(editService);
this.identifierProvider = Objects.requireNonNull(identifierProvider);
Expand Down Expand Up @@ -146,7 +149,7 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter
}

// @formatter:off
NodeDescription description = NodeDescription.newNodeDescription(UUID.fromString(this.identifierProvider.getIdentifier(abstractNodeMapping)).toString())
NodeDescription description = NodeDescription.newNodeDescription(this.idOdesignElementsProvider.getIdElementDescription(abstractNodeMapping))
.typeProvider(typeProvider)
.targetObjectIdProvider(semanticTargetIdProvider)
.targetObjectKindProvider(semanticTargetKindProvider)
Expand All @@ -166,7 +169,7 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter
// @formatter:on

id2NodeDescriptions.put(description.getId(), description);

// System.out.println(description.getId());
return description;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Function;

import org.eclipse.sirius.components.compatibility.api.IIdOdesignElementsProvider;
import org.eclipse.sirius.components.compatibility.api.IIdentifierProvider;
import org.eclipse.sirius.components.compatibility.api.IModelOperationHandlerSwitchProvider;
import org.eclipse.sirius.components.compatibility.api.ISemanticCandidatesProviderFactory;
Expand Down Expand Up @@ -59,8 +59,11 @@ public class EdgeMappingConverter {

private final IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider;

public EdgeMappingConverter(IObjectService objectService, IEditService editService, IIdentifierProvider identifierProvider, ISemanticCandidatesProviderFactory semanticCandidatesProviderFactory,
private final IIdOdesignElementsProvider idOdesignElementsProvider;

public EdgeMappingConverter(IIdOdesignElementsProvider idOdesignElementsProvider, IObjectService objectService, IEditService editService, IIdentifierProvider identifierProvider, ISemanticCandidatesProviderFactory semanticCandidatesProviderFactory,
IModelOperationHandlerSwitchProvider modelOperationHandlerSwitchProvider) {
this.idOdesignElementsProvider = Objects.requireNonNull(idOdesignElementsProvider);
this.objectService = Objects.requireNonNull(objectService);
this.editService = Objects.requireNonNull(editService);
this.identifierProvider = Objects.requireNonNull(identifierProvider);
Expand Down Expand Up @@ -115,7 +118,7 @@ public EdgeDescription convert(EdgeMapping edgeMapping, AQLInterpreter interpret
var deleteHandler = toolConverter.createDeleteToolHandler(edgeMapping.getDeletionDescription());
var labelEditHandler = toolConverter.createEdgeDirectEditToolHandler(edgeMapping.getLabelDirectEdit());

Builder builder = EdgeDescription.newEdgeDescription(UUID.fromString(this.identifierProvider.getIdentifier(edgeMapping)).toString())
Builder builder = EdgeDescription.newEdgeDescription(this.idOdesignElementsProvider.getIdEdgeMapping(edgeMapping))
.targetObjectIdProvider(targetIdProvider)
.targetObjectKindProvider(targetKindProvider)
.targetObjectLabelProvider(targetLabelProvider)
Expand All @@ -130,6 +133,15 @@ public EdgeDescription convert(EdgeMapping edgeMapping, AQLInterpreter interpret
optionalBeginLabelDescription.ifPresent(builder::beginLabelDescription);
optionalCenterLabelDescription.ifPresent(builder::centerLabelDescription);
optionalEndLabelDescription.ifPresent(builder::endLabelDescription);

System.out.println(builder.build().getId());
EdgeDescription ed = builder.build();
System.out.println("///////////////////////////////////////");
System.out.println("SOURCE / TARGET");
System.out.println(ed.getId().toString());
System.out.println(ed.getTargetNodeDescriptions());
System.out.println(ed.getSourceNodeDescriptions());
System.out.println("///////////////////////////////////////");
return builder.build();
// @formatter:on
}
Expand Down Expand Up @@ -171,7 +183,7 @@ private List<NodeDescription> getNodeDescriptions(List<DiagramElementMapping> ma
return mappings.stream()
.filter(AbstractNodeMapping.class::isInstance)
.map(AbstractNodeMapping.class::cast)
.map(mapping -> UUID.fromString(this.identifierProvider.getIdentifier(mapping)).toString())
.map(mapping -> this.idOdesignElementsProvider.getIdElementDescription(mapping))
.map(id2NodeDescriptions::get)
.filter(Objects::nonNull)
.toList();
Expand Down
Loading

0 comments on commit d24120a

Please sign in to comment.