diff options
author | Nathalie Lepine | 2020-10-19 14:08:16 +0000 |
---|---|---|
committer | Maxime Porhel | 2021-02-22 20:05:33 +0000 |
commit | b4963e8b55063bc4ff1ff68185f78537974307b5 (patch) | |
tree | ad8577e86111e590d3b69342deb0ba47089b2461 | |
parent | fe81d0ca7d80e2d56c3e5600f75e49a303cf36c4 (diff) | |
download | org.eclipse.sirius-b4963e8b55063bc4ff1ff68185f78537974307b5.tar.gz org.eclipse.sirius-b4963e8b55063bc4ff1ff68185f78537974307b5.tar.xz org.eclipse.sirius-b4963e8b55063bc4ff1ff68185f78537974307b5.zip |
[571400] Activate Sequence caches from drag trackers
- Activate SequenceDiagram and CacheHelper between handleButtonDown and
handleButtonUp in order to improve performances during all the
"dragInProgress" computations (validtors, feedback, build command, ...)
and disable cache before the command execution.
- Customize all sequence event resize and move drag trackers.
Bug: 571400
Cherry-picked-from: 567517
Change-Id: I113b078c748a8c936795c2072e7d8fe83025f548
Signed-off-by: Nathalie Lepine <nathalie.lepine@obeo.fr>
7 files changed, 100 insertions, 29 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/LifelineEditPart.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/LifelineEditPart.java index 63f5e8b98c..0e838e08a6 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/LifelineEditPart.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/part/LifelineEditPart.java @@ -23,6 +23,7 @@ import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.editpolicies.ResizableEditPolicy; import org.eclipse.gef.requests.SelectionRequest; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; import org.eclipse.gmf.runtime.draw2d.ui.figures.IBorderItemLocator; import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure; @@ -33,7 +34,6 @@ import org.eclipse.sirius.diagram.DDiagramElement; import org.eclipse.sirius.diagram.DNode; import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceElementAccessor; import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceEvent; -import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.sequence.description.EndOfLifeMapping; import org.eclipse.sirius.diagram.sequence.description.ExecutionMapping; import org.eclipse.sirius.diagram.sequence.description.StateMapping; @@ -42,6 +42,7 @@ import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.ExecutionItem import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.LifelineNodeFigure; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.SouthCenteredBorderItemLocator; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.layout.LayoutEditPartConstants; +import org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui.SequenceDragEditPartsTrackerEx.SequenceCacheDragTrackerHelper; import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramBorderNodeEditPartOperation; import org.eclipse.sirius.diagram.ui.tools.api.figure.anchor.AnchorProvider; import org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.styles.IStyleConfigurationRegistry; @@ -284,10 +285,9 @@ public class LifelineEditPart extends AbstractSequenceBorderedEditPart { * @see org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx#handleButtonDown(int) {@inheritDoc} */ @Override - protected boolean handleButtonDown(int button) { - boolean handleButtonDown = super.handleButtonDown(button); - CacheHelper.initCaches(); - return handleButtonDown; + protected boolean handleButtonUp(int button) { + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getSourceEditPart()); + return super.handleButtonUp(button); } /** @@ -296,9 +296,10 @@ public class LifelineEditPart extends AbstractSequenceBorderedEditPart { * @see org.eclipse.gef.tools.DragEditPartsTracker#handleButtonUp(int) {@inheritDoc} */ @Override - protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); - return super.handleButtonUp(button); + protected boolean handleButtonDown(int button) { + boolean handleButtonDown = super.handleButtonDown(button); + SequenceCacheDragTrackerHelper.handleButtonDown((IGraphicalEditPart) getSourceEditPart()); + return handleButtonDown; } } } diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/AbstractFrameResizableEditPolicy.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/AbstractFrameResizableEditPolicy.java index 174c73a600..893abff35f 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/AbstractFrameResizableEditPolicy.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/AbstractFrameResizableEditPolicy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES and others. + * Copyright (c) 2010, 2021 THALES GLOBAL SERVICES and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -29,15 +29,16 @@ import org.eclipse.gef.requests.AlignmentRequest; import org.eclipse.gef.requests.ChangeBoundsRequest; import org.eclipse.gef.tools.ResizeTracker; import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.sirius.diagram.sequence.business.internal.RangeHelper; import org.eclipse.sirius.diagram.sequence.business.internal.elements.AbstractFrame; import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceEvent; -import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.part.ISequenceEventEditPart; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.validator.AbstractInteractionFrameValidator; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.validator.ISEComplexMoveValidator; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.HorizontalGuide; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.RangeGuide; +import org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui.SequenceDragEditPartsTrackerEx.SequenceCacheDragTrackerHelper; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.util.RequestQuery; import org.eclipse.sirius.diagram.sequence.util.Range; import org.eclipse.sirius.diagram.ui.graphical.edit.policies.AirResizableEditPolicy; @@ -280,16 +281,17 @@ public abstract class AbstractFrameResizableEditPolicy extends AirResizableEditP @Override protected ResizeTracker getResizeTracker(int direction) { return new SiriusResizeTracker((GraphicalEditPart) getHost(), direction) { + @Override protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getOwner()); return super.handleButtonUp(button); } @Override protected boolean handleButtonDown(int button) { boolean handleButtonDown = super.handleButtonDown(button); - CacheHelper.initCaches(); + SequenceCacheDragTrackerHelper.handleButtonDown((IGraphicalEditPart) getOwner()); return handleButtonDown; } }; diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/ExecutionSelectionEditPolicy.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/ExecutionSelectionEditPolicy.java index 443e3ea4c2..d5b0f0bb5a 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/ExecutionSelectionEditPolicy.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/ExecutionSelectionEditPolicy.java @@ -57,7 +57,6 @@ import org.eclipse.sirius.diagram.sequence.business.internal.operation.ShiftDire import org.eclipse.sirius.diagram.sequence.business.internal.operation.VerticalSpaceExpansion; import org.eclipse.sirius.diagram.sequence.business.internal.ordering.EventEndHelper; import org.eclipse.sirius.diagram.sequence.business.internal.query.ISequenceEventQuery; -import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.sequence.business.internal.util.EventFinder; import org.eclipse.sirius.diagram.sequence.ordering.CompoundEventEnd; import org.eclipse.sirius.diagram.sequence.ordering.EventEnd; @@ -72,6 +71,7 @@ import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.validator.Abstr import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.validator.ISEComplexMoveValidator; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.HorizontalGuide; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.RangeGuide; +import org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui.SequenceDragEditPartsTrackerEx.SequenceCacheDragTrackerHelper; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.util.EditPartsHelper; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.util.RequestQuery; import org.eclipse.sirius.diagram.sequence.util.Range; @@ -745,14 +745,14 @@ public class ExecutionSelectionEditPolicy extends SpecificBorderItemSelectionEdi @Override protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getOwner()); return super.handleButtonUp(button); } @Override protected boolean handleButtonDown(int button) { boolean handleButtonDown = super.handleButtonDown(button); - CacheHelper.initCaches(); + SequenceCacheDragTrackerHelper.handleButtonDown((IGraphicalEditPart) getOwner()); return handleButtonDown; } }; diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/OperandResizableEditPolicy.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/OperandResizableEditPolicy.java index 12154312ac..a2e1cee576 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/OperandResizableEditPolicy.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/policy/OperandResizableEditPolicy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2017 THALES GLOBAL SERVICES and others. + * Copyright (c) 2010, 2021 THALES GLOBAL SERVICES and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -39,12 +39,12 @@ import org.eclipse.gmf.runtime.notation.Size; import org.eclipse.sirius.diagram.DNodeContainer; import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceElementAccessor; import org.eclipse.sirius.diagram.sequence.business.internal.elements.Operand; -import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.sequence.ui.Messages; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.operation.SequenceEditPartsOperations; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.part.CombinedFragmentEditPart; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.part.OperandEditPart; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.validator.OperandResizeValidator; +import org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui.SequenceDragEditPartsTrackerEx.SequenceCacheDragTrackerHelper; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.util.RequestQuery; import org.eclipse.sirius.diagram.sequence.util.Range; import org.eclipse.sirius.diagram.ui.graphical.edit.policies.AirResizableEditPolicy; @@ -359,16 +359,17 @@ public class OperandResizableEditPolicy extends AirResizableEditPolicy { @Override protected ResizeTracker getResizeTracker(int direction) { return new SiriusResizeTracker((GraphicalEditPart) getHost(), direction) { + @Override protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getOwner()); return super.handleButtonUp(button); } @Override protected boolean handleButtonDown(int button) { boolean handleButtonDown = super.handleButtonDown(button); - CacheHelper.initCaches(); + SequenceCacheDragTrackerHelper.handleButtonDown((IGraphicalEditPart) getOwner()); return handleButtonDown; } }; diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/tools/SequenceMessageSelectConnectionEditPartTracker.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/tools/SequenceMessageSelectConnectionEditPartTracker.java index 71679a2f07..d404647f8b 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/tools/SequenceMessageSelectConnectionEditPartTracker.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/edit/tools/SequenceMessageSelectConnectionEditPartTracker.java @@ -18,9 +18,11 @@ import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.DragTracker; import org.eclipse.gef.Request; import org.eclipse.gef.requests.BendpointRequest; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceEvent; import org.eclipse.sirius.diagram.sequence.business.internal.query.ISequenceEventQuery; -import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.part.SequenceMessageEditPart; +import org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui.SequenceDragEditPartsTrackerEx.SequenceCacheDragTrackerHelper; import org.eclipse.sirius.diagram.sequence.util.Range; import org.eclipse.sirius.diagram.ui.tools.internal.ui.SelectConnectionEditPartTracker; import org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper; @@ -75,10 +77,12 @@ public class SequenceMessageSelectConnectionEditPartTracker extends SelectConnec @Override protected boolean handleButtonDown(int button) { boolean res = super.handleButtonDown(button); - CacheHelper.initCaches(); SequenceMessageEditPart smep = (SequenceMessageEditPart) getSourceEditPart(); - if (new ISequenceEventQuery(smep.getISequenceEvent()).isReflectiveMessage()) { - Range range = smep.getISequenceEvent().getVerticalRange(); + SequenceCacheDragTrackerHelper.handleButtonDown(smep); + + ISequenceEvent iSequenceEvent = smep.getISequenceEvent(); + if (new ISequenceEventQuery(iSequenceEvent).isReflectiveMessage()) { + Range range = iSequenceEvent.getVerticalRange(); Point location = getLocation().getCopy(); GraphicalHelper.screen2logical(location, smep); @@ -101,7 +105,7 @@ public class SequenceMessageSelectConnectionEditPartTracker extends SelectConnec */ @Override protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getSourceEditPart()); return super.handleButtonUp(button); } diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceDragEditPartsTrackerEx.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceDragEditPartsTrackerEx.java index 501865da24..b8bfeac72f 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceDragEditPartsTrackerEx.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceDragEditPartsTrackerEx.java @@ -11,8 +11,14 @@ package org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui; import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceElement; +import org.eclipse.sirius.diagram.sequence.business.internal.elements.ISequenceElementAccessor; +import org.eclipse.sirius.diagram.sequence.business.internal.elements.SequenceDiagram; import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.ui.tools.internal.ui.SiriusDragEditPartsTrackerEx; +import org.eclipse.sirius.ext.base.Option; /** * Specific implementation of {@link org.eclipse.sirius.diagram.ui.tools.internal.ui.SiriusDragEditPartsTrackerEx}. @@ -34,14 +40,70 @@ public class SequenceDragEditPartsTrackerEx extends SiriusDragEditPartsTrackerEx @Override protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getSourceEditPart()); return super.handleButtonUp(button); } @Override protected boolean handleButtonDown(int button) { boolean handleButtonDown = super.handleButtonDown(button); - CacheHelper.initCaches(); + SequenceCacheDragTrackerHelper.handleButtonDown((IGraphicalEditPart) getSourceEditPart()); return handleButtonDown; } + + /** + * Helper to share cache activation and deactivation among all Sequence drag trackers. + */ + public static final class SequenceCacheDragTrackerHelper { + + /** + * Private constructor. + */ + private SequenceCacheDragTrackerHelper() { + // prevent instantiation + } + + /** + * Disable and clear the caches used during the drag. + * + * @param smep + * the drag tracker source/owner edit part. + */ + public static void handleButtonUp(IGraphicalEditPart smep) { + SequenceDiagram diagram = getSequenceDiagram(smep); + if (diagram != null) { + diagram.useCache(false); + diagram.clearAllCaches(); + } + + CacheHelper.clearCaches(); + } + + /** + * Enable the caches to use during drag. + * + * @param smep + * the drag tracker source/owner edit part. + */ + public static void handleButtonDown(IGraphicalEditPart smep) { + CacheHelper.initCaches(); + + SequenceDiagram diagram = getSequenceDiagram(smep); + if (diagram != null) { + diagram.useCache(true); + } + } + + private static SequenceDiagram getSequenceDiagram(IGraphicalEditPart smep) { + SequenceDiagram diagram = null; + if (smep != null) { + View notationView = smep.getNotationView(); + Option<ISequenceElement> iSequenceElement = ISequenceElementAccessor.getISequenceElement(notationView); + if (iSequenceElement.some()) { + diagram = iSequenceElement.get().getDiagram(); + } + } + return diagram; + } + } } diff --git a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceNoCopyDragEditPartsTrackerEx.java b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceNoCopyDragEditPartsTrackerEx.java index d7b2e5e4cd..c6d79e2f2c 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceNoCopyDragEditPartsTrackerEx.java +++ b/plugins/org.eclipse.sirius.diagram.sequence.ui/src/org/eclipse/sirius/diagram/sequence/ui/tool/internal/ui/SequenceNoCopyDragEditPartsTrackerEx.java @@ -11,7 +11,8 @@ package org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui; import org.eclipse.gef.EditPart; -import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.sirius.diagram.sequence.ui.tool.internal.ui.SequenceDragEditPartsTrackerEx.SequenceCacheDragTrackerHelper; import org.eclipse.sirius.diagram.ui.tools.internal.ui.NoCopyDragEditPartsTrackerEx; /** @@ -33,14 +34,14 @@ public class SequenceNoCopyDragEditPartsTrackerEx extends NoCopyDragEditPartsTra @Override protected boolean handleButtonUp(int button) { - CacheHelper.clearCaches(); + SequenceCacheDragTrackerHelper.handleButtonUp((IGraphicalEditPart) getSourceEditPart()); return super.handleButtonUp(button); } @Override protected boolean handleButtonDown(int button) { boolean handleButtonDown = super.handleButtonDown(button); - CacheHelper.initCaches(); + SequenceCacheDragTrackerHelper.handleButtonDown((IGraphicalEditPart) getSourceEditPart()); return handleButtonDown; } |