Skip to content

Commit b56bf62

Browse files
Extends LayoutOperation with more data and add to layout as parameter (#259)
Relates to eclipse-glsp/glsp#1561
1 parent fc37ba6 commit b56bf62

File tree

7 files changed

+62
-6
lines changed

7 files changed

+62
-6
lines changed

examples/org.eclipse.glsp.example.workflow/src/org/eclipse/glsp/example/workflow/layout/WorkflowLayoutEngine.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
********************************************************************************/
1616
package org.eclipse.glsp.example.workflow.layout;
1717

18+
import java.util.Optional;
19+
1820
import org.eclipse.elk.alg.layered.options.FixedAlignment;
1921
import org.eclipse.elk.alg.layered.options.LayeredOptions;
2022
import org.eclipse.glsp.graph.GEdge;
2123
import org.eclipse.glsp.graph.GGraph;
2224
import org.eclipse.glsp.layout.ElkLayoutEngine;
2325
import org.eclipse.glsp.layout.GLSPLayoutConfigurator;
2426
import org.eclipse.glsp.server.model.GModelState;
27+
import org.eclipse.glsp.server.operations.LayoutOperation;
2528

2629
import com.google.inject.Inject;
2730

@@ -31,7 +34,7 @@ public class WorkflowLayoutEngine extends ElkLayoutEngine {
3134
protected GModelState modelState;
3235

3336
@Override
34-
public void layout() {
37+
public void layout(final Optional<LayoutOperation> operation) {
3538
if (modelState.getRoot() instanceof GGraph) {
3639
GLSPLayoutConfigurator configurator = new GLSPLayoutConfigurator();
3740
configurator.configureByType("graph")

plugins/org.eclipse.glsp.layout/src/org/eclipse/glsp/layout/ElkLayoutEngine.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.LinkedList;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.Optional;
2829

2930
import org.eclipse.elk.core.IGraphLayoutEngine;
3031
import org.eclipse.elk.core.RecursiveGraphLayoutEngine;
@@ -63,6 +64,7 @@
6364
import org.eclipse.glsp.graph.GraphFactory;
6465
import org.eclipse.glsp.server.layout.LayoutEngine;
6566
import org.eclipse.glsp.server.model.GModelState;
67+
import org.eclipse.glsp.server.operations.LayoutOperation;
6668

6769
import com.google.inject.Inject;
6870

@@ -100,7 +102,7 @@ public static void initialize(final ILayoutMetaDataProvider... providers) {
100102
* for your model using a {@link SprottyLayoutConfigurator}.
101103
*/
102104
@Override
103-
public void layout() {
105+
public void layout(final Optional<LayoutOperation> operation) {
104106
if (modelState.getRoot() instanceof GGraph) {
105107
layout((GGraph) modelState.getRoot(), null);
106108
}

plugins/org.eclipse.glsp.server/src/org/eclipse/glsp/server/features/core/model/ModelSubmissionHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public List<Action> submitModel() {
154154
public List<Action> submitModelDirectly(final String reason) {
155155
GModelRoot gModel = modelState.getRoot();
156156
if (diagramConfiguration.getLayoutKind() == ServerLayoutKind.AUTOMATIC && layoutEngine.isPresent()) {
157-
layoutEngine.get().layout();
157+
layoutEngine.get().layout(Optional.empty());
158158
}
159159
Action modelAction = this.requestModelAction.isPresent()
160160
? createSetModeAction(gModel)

plugins/org.eclipse.glsp.server/src/org/eclipse/glsp/server/layout/LayoutEngine.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@
1515
******************************************************************************/
1616
package org.eclipse.glsp.server.layout;
1717

18+
import java.util.Optional;
19+
20+
import org.eclipse.glsp.server.operations.LayoutOperation;
21+
1822
/**
1923
* A layout engine is able to compute layout information for a model.
2024
*/
2125
public interface LayoutEngine {
2226
/**
2327
* Compute a layout for the model state and modify the model accordingly.
28+
*
29+
* @param layoutOperation The optional operation that triggered this layout.
2430
*/
25-
void layout();
31+
void layout(Optional<LayoutOperation> layoutOperation);
2632
}

plugins/org.eclipse.glsp.server/src/org/eclipse/glsp/server/operations/LayoutOperation.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,21 @@
1717

1818
import java.util.ArrayList;
1919
import java.util.List;
20+
import java.util.Optional;
21+
22+
import org.eclipse.glsp.graph.GBounds;
23+
import org.eclipse.glsp.server.types.Viewport;
2024

2125
public class LayoutOperation extends Operation {
2226

2327
public static final String KIND = "layout";
2428

2529
private List<String> elementIds;
2630

31+
private Optional<GBounds> canvasBounds;
32+
33+
private Optional<Viewport> viewport;
34+
2735
public LayoutOperation() {
2836
this(new ArrayList<>());
2937
}
@@ -33,8 +41,22 @@ public LayoutOperation(final List<String> elementIds) {
3341
this.elementIds = elementIds;
3442
}
3543

44+
public LayoutOperation(final List<String> elementIds, final GBounds canvasBounds, final Viewport viewport) {
45+
this(elementIds);
46+
this.canvasBounds = Optional.ofNullable(canvasBounds);
47+
this.viewport = Optional.ofNullable(viewport);
48+
}
49+
3650
public List<String> getElementIds() { return elementIds; }
3751

3852
public void setElementIds(final List<String> elementIds) { this.elementIds = elementIds; }
3953

54+
public Optional<GBounds> getCanvasBounds() { return canvasBounds; }
55+
56+
public void setCanvasBounds(final GBounds canvasBounds) { this.canvasBounds = Optional.ofNullable(canvasBounds); }
57+
58+
public Optional<Viewport> getViewport() { return viewport; }
59+
60+
public void setViewport(final Viewport viewport) { this.viewport = Optional.ofNullable(viewport); }
61+
4062
}

plugins/org.eclipse.glsp.server/src/org/eclipse/glsp/server/operations/LayoutOperationHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ public class LayoutOperationHandler extends BasicOperationHandler<LayoutOperatio
4242
public Optional<Command> createCommand(final LayoutOperation operation) {
4343
return layoutEngine.isEmpty() || diagramConfiguration.getLayoutKind() != ServerLayoutKind.MANUAL
4444
? doNothing()
45-
: Optional.of(new GModelRecordingCommand(modelState.getRoot(), getLabel(), () -> layoutEngine.get().layout()));
45+
: Optional.of(
46+
new GModelRecordingCommand(modelState.getRoot(), getLabel(),
47+
() -> layoutEngine.get().layout(Optional.of(operation))));
4648
}
4749

4850
}

plugins/org.eclipse.glsp.server/src/org/eclipse/glsp/server/types/Viewport.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,19 @@ public Viewport(final double x, final double y, final double zoom) {
3636

3737
public double getZoom() { return zoom; }
3838

39+
@Override
40+
public String toString() {
41+
StringBuilder result = new StringBuilder(getClass().getSimpleName());
42+
result.append(" [scroll: ");
43+
result.append(scroll);
44+
result.append(", zoom: ");
45+
result.append(zoom);
46+
result.append(']');
47+
return result.toString();
48+
}
49+
3950
@SuppressWarnings("checkstyle:VisibilityModifier")
4051
class Point {
41-
4252
final double x;
4353
final double y;
4454

@@ -48,6 +58,17 @@ class Point {
4858
this.y = y;
4959
}
5060

61+
@Override
62+
public String toString() {
63+
StringBuilder result = new StringBuilder(getClass().getSimpleName());
64+
result.append(" [x: ");
65+
result.append(x);
66+
result.append(", y: ");
67+
result.append(y);
68+
result.append(']');
69+
return result.toString();
70+
}
71+
5172
}
5273

5374
}

0 commit comments

Comments
 (0)