package org.flowerplatform.editor.model.change_processor; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.change.FeatureChange; import org.flowerplatform.editor.model.change_processor.DiagramUpdaterChangeProcessorContext; import org.flowerplatform.editor.model.change_processor.IDiagrammableElementFeatureChangesProcessor; import org.flowerplatform.editor.model.properties.DiagramPropertiesProvider; import org.flowerplatform.editor.model.remote.ViewDetailsUpdate; import org.flowerplatform.emf_model.notation.Diagram; import org.flowerplatform.emf_model.notation.NotationPackage; import org.flowerplatform.emf_model.notation.View; /** * @author Cristina Constantinescu */ public class DiagramPropertiesChangeProcessor implements IDiagrammableElementFeatureChangesProcessor { @Override public void processFeatureChanges(EObject object, List<FeatureChange> featureChanges, View associatedViewOnOpenDiagram, Map<String, Object> context) { Map<String, Object> viewDetails = new HashMap<String, Object>(); if (featureChanges == null) { // i.e. full content update when opening diagram processFeatureChange(object, null, associatedViewOnOpenDiagram, viewDetails); } else { // i.e. differential, during change description processing for (FeatureChange featureChange : featureChanges) { processFeatureChange(object, featureChange, associatedViewOnOpenDiagram, viewDetails); } } if (!viewDetails.isEmpty()) { ViewDetailsUpdate update = new ViewDetailsUpdate(); update.setViewId(associatedViewOnOpenDiagram.eResource().getURIFragment(associatedViewOnOpenDiagram)); update.setViewDetails(viewDetails); DiagramUpdaterChangeProcessorContext.getDiagramUpdaterChangeDescriptionProcessingContext(context, true). getViewDetailsUpdates().add(update); } } protected void processFeatureChange(EObject object, FeatureChange featureChange, View associatedViewOnOpenDiagram, Map<String, Object> viewDetails) { if (featureChange == null || NotationPackage.eINSTANCE.getDiagram_ShowLocationForNewElementsDialog().equals(featureChange.getFeature())) { viewDetails.put(DiagramPropertiesProvider.SHOW_LOCATION_FOR_NEW_ELEMENTS_DILOG_PROPERTY, ((Diagram) associatedViewOnOpenDiagram).isShowLocationForNewElementsDialog()); } if (featureChange == null || NotationPackage.eINSTANCE.getDiagram_LocationForNewElements().equals(featureChange.getFeature())) { viewDetails.put(DiagramPropertiesProvider.LOCATION_FOR_NEW_ELEMENTS_PROPERTY, ((Diagram) associatedViewOnOpenDiagram).getLocationForNewElements()); } } }