Bug 558018 - [Layout] The arrange is not performed following external modification
Summary: [Layout] The arrange is not performed following external modification
Status: NEW
Alias: None
Product: Sirius
Classification: Modeling
Component: Diagram (show other bugs)
Version: unspecified   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: triaged
Depends on:
Blocks:
 
Reported: 2019-12-09 04:30 EST by Florian Barbin CLA
Modified: 2020-05-05 10:57 EDT (History)
1 user (show)

See Also:


Attachments
Use case (4.57 KB, application/zip)
2019-12-09 04:31 EST, Florian Barbin CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Florian Barbin CLA 2019-12-09 04:30:18 EST
The arrange command is not performed following external modifications and opened editor.

Steps to reproduce:
* Import the attached project
* Open digramWithoutELK
* Open My.ecore model
* add three classes C1, C2 and C3 in p3 package and save.
* The diagram is refreshed but the three classes are not properly layouted.

It seems that the ArrangeCommand is executed before the new edit part activation. 

The LayoutCommand is launched asynchronously on the UI Thread:

SiriusCanonicalLayoutCommand.doExecute() line: 85	
SiriusCanonicalLayoutCommand(RecordingCommand).execute() line: 135	
CompoundCommand.execute() line: 261	
EMFCommandOperation.doExecute(IProgressMonitor, IAdaptable) line: 119	
EMFCommandOperation(AbstractEMFOperation).execute(IProgressMonitor, IAdaptable) line: 150	
DefaultOperationHistory.execute(IUndoableOperation, IProgressMonitor, IAdaptable) line: 495	
NonDirtyingCapableWorkspaceCommandStack(WorkspaceCommandStackImpl).doExecute(Command, Map<?,?>) line: 208	
NonDirtyingCapableWorkspaceCommandStack.doExecute(Command, Map) line: 69	
NonDirtyingCapableWorkspaceCommandStack(AbstractTransactionalCommandStack).execute(Command, Map<?,?>) line: 165	
NonDirtyingCapableWorkspaceCommandStack(AbstractTransactionalCommandStack).execute(Command) line: 219	
SiriusCanonicalLayoutHandler.launchArrangeCommand(DiagramEditPart, boolean) line: 107	
SiriusCanonicalLayoutHandler.launchArrangeCommand(DiagramEditPart) line: 77	
DOperationHistoryListener.historyNotification(OperationHistoryEvent) line: 45	
DefaultOperationHistory$2.run() line: 875	
SafeRunner.run(ISafeRunnable) line: 45	
DefaultOperationHistory.notifyListeners(OperationHistoryEvent) line: 864	
DefaultOperationHistory.notifyDone(IUndoableOperation) line: 930	
DefaultOperationHistory.execute(IUndoableOperation, IProgressMonitor, IAdaptable) line: 511	
NonDirtyingCapableWorkspaceCommandStack(WorkspaceCommandStackImpl).doExecute(Command, Map<?,?>) line: 208	
NonDirtyingCapableWorkspaceCommandStack.doExecute(Command, Map) line: 69	
NonDirtyingCapableWorkspaceCommandStack(AbstractTransactionalCommandStack).execute(Command, Map<?,?>) line: 165	
NonDirtyingCapableWorkspaceCommandStack(AbstractTransactionalCommandStack).execute(Command) line: 219	
RefreshEditorsPrecommitListener.notify(int) line: 260	
CollaborativeDAnalysisSessionImpl(DAnalysisSessionImpl).notifyListeners(int) line: 1229	
SessionResourcesSynchronizer.reloadResource(Resource) line: 237	


But when the command is really executed, the three new edit parts are not yet activated and the layout is not performed:

ArrangeCommand.initLayoutNodes(Collection<IGraphicalEditPart>) line: 111	
ArrangeCommand.<init>(TransactionalEditingDomain, String, List, Collection<IGraphicalEditPart>, IAdaptable, boolean) line: 87	
NodeCreationEditPolicy(SiriusContainerEditPolicy).doDuplicatedGetArrangeCommand(ArrangeRequest) line: 145	
NodeCreationEditPolicy(SiriusContainerEditPolicy).getArrangeCommand(ArrangeRequest) line: 87	
NodeCreationEditPolicy(ContainerEditPolicy).getCommand(Request) line: 477	
NodeCreationEditPolicy(SiriusContainerEditPolicy).getCommand(Request) line: 75	
DNodeContainerViewNodeContainerCompartmentEditPart(AbstractEditPart).getCommand(Request) line: 502	
GraphicalEditPart.access$1(GraphicalEditPart, Request) line: 1	
GraphicalEditPart$1.run() line: 482	
CDOEditingDomainFactory$CDOEditingDomain(TransactionalEditingDomainImpl).runExclusive(Runnable) line: 328	
DNodeContainerViewNodeContainerCompartmentEditPart(GraphicalEditPart).getCommand(Request) line: 477	
DNodeContainerViewNodeContainerCompartmentEditPart(AbstractDNodeContainerCompartmentEditPart).getCommand(Request) line: 158	
DeferredLayoutCommand.doExecuteWithResult(IProgressMonitor, IAdaptable) line: 196	
DeferredLayoutCommand(AbstractTransactionalCommand).doExecute(IProgressMonitor, IAdaptable) line: 247	
DeferredLayoutCommand(AbstractEMFOperation).execute(IProgressMonitor, IAdaptable) line: 150	


Line 111. ep.isActive() return false:

if (ep.isActive() && view != null && view instanceof Node && ep != layoutHint.getAdapter(EditPart.class))
Comment 1 Florian Barbin CLA 2019-12-09 04:31:50 EST
Created attachment 281170 [details]
Use case
Comment 2 Florian Barbin CLA 2019-12-23 09:26:07 EST
Note that this issue is not specific to ELK but has been detected during the ELK layout experimental phase.
Comment 3 Pierre-Charles David CLA 2020-05-05 10:57:24 EDT
Reproduced using the steps mentioned.