diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessor.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessor.java index 5754d5dff7..0db7501772 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessor.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessor.java @@ -12,13 +12,19 @@ *******************************************************************************/ package org.eclipse.sirius.components.collaborative.gantt; +import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import org.eclipse.sirius.components.collaborative.api.ChangeDescription; import org.eclipse.sirius.components.collaborative.api.ChangeKind; import org.eclipse.sirius.components.collaborative.api.ISubscriptionManager; +import org.eclipse.sirius.components.collaborative.dto.RenameRepresentationInput; +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttEventHandler; import org.eclipse.sirius.components.collaborative.gantt.api.IGanttEventProcessor; +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttInput; +import org.eclipse.sirius.components.collaborative.gantt.dto.input.RenameGanttInput; import org.eclipse.sirius.components.collaborative.gantt.service.GanttCreationService; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IInput; @@ -36,8 +42,8 @@ import reactor.core.publisher.Sinks.One; /** - * Reacts to the input that targets the gantt of a specific object and publishes updated versions of the - * {@link Gantt} to interested subscribers. + * Reacts to the input that targets the gantt of a specific object and publishes updated versions of the {@link Gantt} + * to interested subscribers. * * @author lfasani */ @@ -57,12 +63,16 @@ public class GanttEventProcessor implements IGanttEventProcessor { private final GanttEventFlux ganttEventFlux; - public GanttEventProcessor(IEditingContext editingContext, Gantt ganttDiagram, ISubscriptionManager subscriptionManager, GanttCreationService ganttCreationService) { + private final List ganttEventHandlers; + + public GanttEventProcessor(IEditingContext editingContext, Gantt ganttDiagram, ISubscriptionManager subscriptionManager, GanttCreationService ganttCreationService, + List ganttEventHandlers) { this.logger.trace("Creating the gantt event processor {}", ganttDiagram.getId()); this.editingContext = Objects.requireNonNull(editingContext); this.subscriptionManager = Objects.requireNonNull(subscriptionManager); this.ganttCreationService = Objects.requireNonNull(ganttCreationService); + this.ganttEventHandlers = Objects.requireNonNull(ganttEventHandlers); // We automatically refresh the representation before using it since things may have changed since the moment it // has been saved in the database. @@ -85,7 +95,21 @@ public ISubscriptionManager getSubscriptionManager() { @Override public void handle(One payloadSink, Many changeDescriptionSink, IRepresentationInput representationInput) { - // TODO + IRepresentationInput effectiveInput = representationInput; + if (representationInput instanceof RenameRepresentationInput renameRepresentationInput) { + effectiveInput = new RenameGanttInput(renameRepresentationInput.id(), renameRepresentationInput.editingContextId(), renameRepresentationInput.representationId(), + renameRepresentationInput.newLabel()); + } + if (effectiveInput instanceof IGanttInput ganttInput) { + Optional optionalGanttEventHandler = this.ganttEventHandlers.stream().filter(handler -> handler.canHandle(ganttInput)).findFirst(); + + if (optionalGanttEventHandler.isPresent()) { + IGanttEventHandler ganttEventHandler = optionalGanttEventHandler.get(); + ganttEventHandler.handle(payloadSink, changeDescriptionSink, this.editingContext, this.currentGantt.get(), ganttInput); + } else { + this.logger.warn("No handler found for event: {}", ganttInput); + } + } } @Override @@ -110,10 +134,7 @@ private boolean shouldRefresh(ChangeDescription changeDescription) { @Override public Flux getOutputEvents(IInput input) { - return Flux.merge( - this.ganttEventFlux.getFlux(input), - this.subscriptionManager.getFlux(input) - ); + return Flux.merge(this.ganttEventFlux.getFlux(input), this.subscriptionManager.getFlux(input)); } @Override diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessorFactory.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessorFactory.java index 9c3583ed72..16045931df 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessorFactory.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/GanttEventProcessorFactory.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.sirius.components.collaborative.gantt; +import java.util.List; import java.util.Objects; import java.util.Optional; @@ -20,6 +21,7 @@ import org.eclipse.sirius.components.collaborative.api.IRepresentationEventProcessorFactory; import org.eclipse.sirius.components.collaborative.api.IRepresentationSearchService; import org.eclipse.sirius.components.collaborative.api.ISubscriptionManagerFactory; +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttEventHandler; import org.eclipse.sirius.components.collaborative.gantt.api.IGanttEventProcessor; import org.eclipse.sirius.components.collaborative.gantt.service.GanttCreationService; import org.eclipse.sirius.components.core.api.IEditingContext; @@ -40,11 +42,14 @@ public class GanttEventProcessorFactory implements IRepresentationEventProcessor private final ISubscriptionManagerFactory subscriptionManagerFactory; - public GanttEventProcessorFactory(IRepresentationSearchService representationSearchService, GanttCreationService ganttCreationService, - ISubscriptionManagerFactory subscriptionManagerFactory) { + private final List ganttEventHandlers; + + public GanttEventProcessorFactory(IRepresentationSearchService representationSearchService, GanttCreationService ganttCreationService, ISubscriptionManagerFactory subscriptionManagerFactory, + List ganttEventHandlers) { this.representationSearchService = Objects.requireNonNull(representationSearchService); this.ganttCreationService = Objects.requireNonNull(ganttCreationService); this.subscriptionManagerFactory = Objects.requireNonNull(subscriptionManagerFactory); + this.ganttEventHandlers = Objects.requireNonNull(ganttEventHandlers); } @Override @@ -61,7 +66,7 @@ public Optional createRepresentatio Gantt gantt = optionalGantt.get(); IRepresentationEventProcessor ganttEventProcessor = new GanttEventProcessor(editingContext, gantt, - this.subscriptionManagerFactory.create(), this.ganttCreationService); + this.subscriptionManagerFactory.create(), this.ganttCreationService, this.ganttEventHandlers); return Optional.of(ganttEventProcessor) .map(representationEventProcessorClass::cast); diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/dto/input/RenameGanttInput.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/dto/input/RenameGanttInput.java new file mode 100644 index 0000000000..3dfb079af0 --- /dev/null +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/dto/input/RenameGanttInput.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * 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.collaborative.gantt.dto.input; + +import java.util.UUID; + +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttInput; + +/** + * The input of the rename gantt mutation. + * + * @author lfasani + */ +public record RenameGanttInput(UUID id, String editingContextId, String representationId, String newLabel) implements IGanttInput { +} diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/CreateGanttEventHandler.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/CreateGanttEventHandler.java index 55ce624f7b..9032c8218e 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/CreateGanttEventHandler.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/CreateGanttEventHandler.java @@ -60,10 +60,10 @@ public class CreateGanttEventHandler implements IEditingContextEventHandler { private final Counter counter; public CreateGanttEventHandler(IRepresentationDescriptionSearchService representationDescriptionSearchService, IRepresentationPersistenceService representationPersistenceService, - IGanttCreationService diagramCreationService, IObjectService objectService, ICollaborativeMessageService messageService, MeterRegistry meterRegistry) { + IGanttCreationService ganttCreationService, IObjectService objectService, ICollaborativeMessageService messageService, MeterRegistry meterRegistry) { this.representationDescriptionSearchService = Objects.requireNonNull(representationDescriptionSearchService); this.representationPersistenceService = Objects.requireNonNull(representationPersistenceService); - this.ganttCreationService = Objects.requireNonNull(diagramCreationService); + this.ganttCreationService = Objects.requireNonNull(ganttCreationService); this.objectService = Objects.requireNonNull(objectService); this.messageService = Objects.requireNonNull(messageService); @@ -97,10 +97,10 @@ public void handle(One payloadSink, Many changeDesc Optional optionalObject = this.objectService.getObject(editingContext, createRepresentationInput.objectId()); if (optionalDiagramDescription.isPresent() && optionalObject.isPresent()) { - GanttDescription diagramDescription = optionalDiagramDescription.get(); + GanttDescription ganttDescription = optionalDiagramDescription.get(); Object object = optionalObject.get(); - Gantt ganttDiagram = this.ganttCreationService.create(createRepresentationInput.representationName(), object, diagramDescription, editingContext); + Gantt ganttDiagram = this.ganttCreationService.create(createRepresentationInput.representationName(), object, ganttDescription, editingContext); this.representationPersistenceService.save(editingContext, ganttDiagram); diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/RenameGanttEventHandler.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/RenameGanttEventHandler.java new file mode 100644 index 0000000000..eb3315cb5d --- /dev/null +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/handlers/RenameGanttEventHandler.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * 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.collaborative.gantt.handlers; + +import java.util.Objects; +import java.util.Optional; + +import org.eclipse.sirius.components.collaborative.api.ChangeDescription; +import org.eclipse.sirius.components.collaborative.api.ChangeKind; +import org.eclipse.sirius.components.collaborative.api.IRepresentationPersistenceService; +import org.eclipse.sirius.components.collaborative.api.IRepresentationSearchService; +import org.eclipse.sirius.components.collaborative.api.Monitoring; +import org.eclipse.sirius.components.collaborative.dto.RenameRepresentationSuccessPayload; +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttEventHandler; +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttInput; +import org.eclipse.sirius.components.collaborative.gantt.dto.input.RenameGanttInput; +import org.eclipse.sirius.components.collaborative.gantt.message.ICollaborativeGanttMessageService; +import org.eclipse.sirius.components.core.api.ErrorPayload; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IPayload; +import org.eclipse.sirius.components.gantt.Gantt; +import org.springframework.stereotype.Service; + +import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.MeterRegistry; +import reactor.core.publisher.Sinks.Many; +import reactor.core.publisher.Sinks.One; + +/** + * Handler used to rename a gantt. + * + * @author lfasani + */ +@Service +public class RenameGanttEventHandler implements IGanttEventHandler { + + private final IRepresentationSearchService representationSearchService; + + private final IRepresentationPersistenceService representationPersistenceService; + + private final ICollaborativeGanttMessageService messageService; + + private final Counter counter; + + public RenameGanttEventHandler(IRepresentationSearchService representationSearchService, IRepresentationPersistenceService representationPersistenceService, + ICollaborativeGanttMessageService messageService, MeterRegistry meterRegistry) { + this.representationSearchService = Objects.requireNonNull(representationSearchService); + this.representationPersistenceService = Objects.requireNonNull(representationPersistenceService); + this.messageService = Objects.requireNonNull(messageService); + + this.counter = Counter.builder(Monitoring.EVENT_HANDLER) + .tag(Monitoring.NAME, this.getClass().getSimpleName()) + .register(meterRegistry); + } + + @Override + public boolean canHandle(IGanttInput ganttInput) { + return ganttInput instanceof RenameGanttInput; + } + + @Override + public void handle(One payloadSink, Many changeDescriptionSink, IEditingContext editingContext, Gantt gantt, IGanttInput ganttInput) { + this.counter.increment(); + + String message = this.messageService.invalidInput(ganttInput.getClass().getSimpleName(), RenameGanttInput.class.getSimpleName()); + IPayload payload = new ErrorPayload(ganttInput.id(), message); + ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, ganttInput.representationId(), ganttInput); + + if (ganttInput instanceof RenameGanttInput) { + RenameGanttInput renameRepresentationInput = (RenameGanttInput) ganttInput; + String representationId = renameRepresentationInput.representationId(); + String newLabel = renameRepresentationInput.newLabel(); + Optional optionalDiagram = this.representationSearchService.findById(editingContext, representationId, Gantt.class); + if (optionalDiagram.isPresent()) { + Gantt currentGantt = optionalDiagram.get(); + + Gantt renamedGantt = Gantt.newGantt(currentGantt).label(newLabel).build(); + this.representationPersistenceService.save(editingContext, renamedGantt); + + payload = new RenameRepresentationSuccessPayload(ganttInput.id(), renamedGantt); + changeDescription = new ChangeDescription(ChangeKind.REPRESENTATION_RENAMING, renameRepresentationInput.representationId(), ganttInput); + } + } + + payloadSink.tryEmitValue(payload); + changeDescriptionSink.tryEmitNext(changeDescription); + } +} diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/CollaborativeGanttMessageService.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/CollaborativeGanttMessageService.java new file mode 100644 index 0000000000..7ba3df5f2c --- /dev/null +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/CollaborativeGanttMessageService.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * 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.collaborative.gantt.message; + +import java.util.Objects; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.support.MessageSourceAccessor; +import org.springframework.stereotype.Service; + +/** + * Implementation of the collaborative gantt message service. + * + * @author lfasani + */ +@Service +public class CollaborativeGanttMessageService implements ICollaborativeGanttMessageService { + private final MessageSourceAccessor messageSourceAccessor; + + public CollaborativeGanttMessageService(@Qualifier("collaborativeGanttMessageSourceAccessor") MessageSourceAccessor messageSourceAccessor) { + this.messageSourceAccessor = Objects.requireNonNull(messageSourceAccessor); + } + + @Override + public String invalidInput(String expectedInputTypeName, String receivedInputTypeName) { + return this.messageSourceAccessor.getMessage(MessageConstants.INVALID_INPUT, new Object[] { expectedInputTypeName, receivedInputTypeName }); + } +} diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/CollaborativeGanttMessageServiceConfiguration.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/CollaborativeGanttMessageServiceConfiguration.java new file mode 100644 index 0000000000..e0326b1f21 --- /dev/null +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/CollaborativeGanttMessageServiceConfiguration.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * 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.collaborative.gantt.message; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.MessageSourceAccessor; +import org.springframework.context.support.ResourceBundleMessageSource; + +/** + * Configuration used to retrieve the message source accessor for the project. + * + * @author lfasani + */ +@Configuration +public class CollaborativeGanttMessageServiceConfiguration { + private static final String PATH = "messages/sirius-web-collaborative-gantt"; + + @Bean + public MessageSourceAccessor collaborativeGanttMessageSourceAccessor() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.addBasenames(PATH); + return new MessageSourceAccessor(messageSource); + } +} diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/ICollaborativeGanttMessageService.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/ICollaborativeGanttMessageService.java new file mode 100644 index 0000000000..d92144816c --- /dev/null +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/ICollaborativeGanttMessageService.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * 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.collaborative.gantt.message; + +/** + * Interface of the collaborative gantt message service. + * + * @author lfasani + */ +public interface ICollaborativeGanttMessageService { + + String invalidInput(String expectedInputTypeName, String receivedInputTypeName); + + /** + * Implementation which does nothing, used for mocks in unit tests. + * + * @author lfasani + */ + class NoOp implements ICollaborativeGanttMessageService { + + @Override + public String invalidInput(String expectedInputTypeName, String receivedInputTypeName) { + return ""; + } + } +} diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/MessageConstants.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/MessageConstants.java new file mode 100644 index 0000000000..5f0a82cea0 --- /dev/null +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/message/MessageConstants.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * 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.collaborative.gantt.message; + +/** + * This class is used to hold all the keys of the internationalization messages. + * + * @author lfasani + */ +public final class MessageConstants { + + public static final String INVALID_INPUT = "INVALID_INPUT"; + + + private MessageConstants() { + // Prevent instantiation + } +} diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/service/GanttCreationService.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/service/GanttCreationService.java index d4c4c852bf..a88c8757a9 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/service/GanttCreationService.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/main/java/org/eclipse/sirius/components/collaborative/gantt/service/GanttCreationService.java @@ -44,8 +44,6 @@ public class GanttCreationService implements IGanttCreationService { private final IRepresentationDescriptionSearchService representationDescriptionSearchService; - private final IRepresentationPersistenceService representationPersistenceService; - private final IObjectService objectService; private final Timer timer; @@ -53,7 +51,6 @@ public class GanttCreationService implements IGanttCreationService { public GanttCreationService(IRepresentationDescriptionSearchService representationDescriptionSearchService, IRepresentationPersistenceService representationPersistenceService, IObjectService objectService, MeterRegistry meterRegistry) { this.representationDescriptionSearchService = Objects.requireNonNull(representationDescriptionSearchService); - this.representationPersistenceService = Objects.requireNonNull(representationPersistenceService); this.objectService = Objects.requireNonNull(objectService); this.timer = Timer.builder(Monitoring.REPRESENTATION_EVENT_PROCESSOR_REFRESH) .tag(Monitoring.NAME, "gantt") diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/ArchitectureConstants.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/ArchitectureConstants.java index f5c0297d30..7694f402fe 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/ArchitectureConstants.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/ArchitectureConstants.java @@ -22,14 +22,12 @@ * @author sbegaudeau */ public final class ArchitectureConstants { - public static final String SIRIUS_COMPONENTS_COLLABORATIVE_FORMS_ROOT_PACKAGE = "org.eclipse.sirius.components.collaborative.forms.."; + public static final String SIRIUS_COMPONENTS_COLLABORATIVE_GANTT_ROOT_PACKAGE = "org.eclipse.sirius.components.collaborative.gantt.."; - // @formatter:off public static final JavaClasses CLASSES = new ClassFileImporter() .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS) .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) - .importPackages(SIRIUS_COMPONENTS_COLLABORATIVE_FORMS_ROOT_PACKAGE); - // @formatter:on + .importPackages(SIRIUS_COMPONENTS_COLLABORATIVE_GANTT_ROOT_PACKAGE); private ArchitectureConstants() { // Prevent instantiation diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/CodingRulesTests.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/CodingRulesTests.java index 19d503631b..6036b0783f 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/CodingRulesTests.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/CodingRulesTests.java @@ -26,7 +26,7 @@ public class CodingRulesTests extends AbstractCodingRulesTests { @Override protected String getProjectRootPackage() { - return ArchitectureConstants.SIRIUS_COMPONENTS_COLLABORATIVE_FORMS_ROOT_PACKAGE; + return ArchitectureConstants.SIRIUS_COMPONENTS_COLLABORATIVE_GANTT_ROOT_PACKAGE; } @Override diff --git a/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/SpringCodingRulesTests.java b/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/SpringCodingRulesTests.java index 09e6650faa..cb9facac81 100644 --- a/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/SpringCodingRulesTests.java +++ b/packages/gantt/backend/sirius-components-collaborative-gantt/src/test/java/org/eclipse/sirius/components/collaborative/gantt/architecture/SpringCodingRulesTests.java @@ -25,7 +25,7 @@ public class SpringCodingRulesTests extends AbstractSpringCodingRulesTests { @Override protected String getProjectRootPackage() { - return ArchitectureConstants.SIRIUS_COMPONENTS_COLLABORATIVE_FORMS_ROOT_PACKAGE; + return ArchitectureConstants.SIRIUS_COMPONENTS_COLLABORATIVE_GANTT_ROOT_PACKAGE; } @Override diff --git a/packages/gantt/backend/sirius-components-gantt/pom.xml b/packages/gantt/backend/sirius-components-gantt/pom.xml index a607214ef4..d3e0254f5e 100644 --- a/packages/gantt/backend/sirius-components-gantt/pom.xml +++ b/packages/gantt/backend/sirius-components-gantt/pom.xml @@ -31,17 +31,6 @@ 17 - - - Central - https://repo.maven.apache.org/maven2 - - - github-sirius-components - https://maven.pkg.github.com/eclipse-sirius/sirius-components - - - github @@ -51,14 +40,6 @@ - - org.springframework - spring-context - - - io.micrometer - micrometer-core - org.eclipse.sirius sirius-components-representations @@ -75,10 +56,6 @@ 2023.12.0 test - - com.fasterxml.jackson.core - jackson-annotations - diff --git a/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/Gantt.java b/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/Gantt.java index 2c009af001..f29bb5418a 100644 --- a/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/Gantt.java +++ b/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/Gantt.java @@ -57,4 +57,62 @@ public String getLabel() { public String getKind() { return KIND; } + + public static Builder newGantt(Gantt gantt) { + return new Builder(gantt); + } + + /** + * The builder used to create a gantt. + * + * @author lfasani + */ + @SuppressWarnings("checkstyle:HiddenField") + public static final class Builder { + private String id; + + private String targetObjectId; + + private String descriptionId; + + private String label; + + private List tasks; + + private Builder(String id) { + this.id = Objects.requireNonNull(id); + } + + private Builder(Gantt gantt) { + this.id = gantt.getId(); + this.targetObjectId = gantt.getTargetObjectId(); + this.descriptionId = gantt.getDescriptionId(); + this.label = gantt.getLabel(); + } + + public Builder targetObjectId(String targetObjectId) { + this.targetObjectId = Objects.requireNonNull(targetObjectId); + return this; + } + + public Builder descriptionId(String descriptionId) { + this.descriptionId = Objects.requireNonNull(descriptionId); + return this; + } + + public Builder label(String label) { + this.label = Objects.requireNonNull(label); + return this; + } + + public Builder tasks(List tasks) { + this.tasks = Objects.requireNonNull(tasks); + return this; + } + + public Gantt build() { + Gantt gantt = new Gantt(this.id, this.descriptionId, this.targetObjectId, this.label, this.tasks); + return gantt; + } + } } diff --git a/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/renderer/GanttElementFactory.java b/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/renderer/GanttElementFactory.java index 14558f355e..dc7a278417 100644 --- a/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/renderer/GanttElementFactory.java +++ b/packages/gantt/backend/sirius-components-gantt/src/main/java/org/eclipse/sirius/components/gantt/renderer/GanttElementFactory.java @@ -40,23 +40,19 @@ public Object instantiateElement(String type, IProps props, List childre } private Gantt instantiateGantt(GanttElementProps props, List children) { - // @formatter:off List tasks = children.stream() .filter(Task.class::isInstance) .map(Task.class::cast) .toList(); - // @formatter:on return new Gantt(props.id(), props.descriptionId(), props.targetObjectId(), props.label(), tasks); } private Task instantiateTask(TaskElementProps props, List children) { - // @formatter:off List subTasks = children.stream() .filter(Task.class::isInstance) .map(Task.class::cast) .toList(); - // @formatter:on return new Task(props.id(), props.descriptionId(), props.targetObjectId(), props.targetObjectKind(), props.targetObjectLabel(), props.detail(), subTasks); } diff --git a/packages/gantt/frontend/sirius-components-gantt/package.json b/packages/gantt/frontend/sirius-components-gantt/package.json index d0176229b5..1ddbd1d4fe 100644 --- a/packages/gantt/frontend/sirius-components-gantt/package.json +++ b/packages/gantt/frontend/sirius-components-gantt/package.json @@ -31,7 +31,7 @@ "peerDependencies": { "@apollo/client": "3.8.1", "@ObeoNetwork/gantt-task-react": "0.3.10", - "@eclipse-sirius/sirius-components-core": "~2023.12.0", + "@eclipse-sirius/sirius-components-core": "*", "@material-ui/core": "4.12.4", "@material-ui/icons": "4.11.3", "@xstate/react": "1.6.3", @@ -41,8 +41,8 @@ }, "devDependencies": { "@apollo/client": "3.8.1", - "@eclipse-sirius/sirius-components-core": "~2023.12.0", - "@eclipse-sirius/sirius-components-tsconfig": "~2023.12.0", + "@eclipse-sirius/sirius-components-core": "*", + "@eclipse-sirius/sirius-components-tsconfig": "*", "@material-ui/core": "4.12.4", "@material-ui/icons": "4.11.3", "@ObeoNetwork/gantt-task-react": "0.3.10", diff --git a/packages/task/backend/pom.xml b/packages/task/backend/pom.xml index 895c4ad440..4004f8a833 100644 --- a/packages/task/backend/pom.xml +++ b/packages/task/backend/pom.xml @@ -1,6 +1,6 @@ org.eclipse.sirius @@ -31,7 +31,7 @@ github Apache Maven Packages - https://maven.pkg.github.com/eclipse-sirius/sirius-components + https://maven.pkg.github.com/eclipse-sirius/sirius-web diff --git a/packages/view/backend/sirius-components-view-gantt/pom.xml b/packages/view/backend/sirius-components-view-gantt/pom.xml index 07516e4316..4b3dd89d90 100644 --- a/packages/view/backend/sirius-components-view-gantt/pom.xml +++ b/packages/view/backend/sirius-components-view-gantt/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.6 + 3.1.2 org.eclipse.sirius @@ -31,7 +31,7 @@ github Apache Maven Packages - https://maven.pkg.github.com/eclipse-sirius/sirius-components + https://maven.pkg.github.com/eclipse-sirius/sirius-web