Skip to content

Collab advanced #241

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 289 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
289 commits
Select commit Hold shift + click to select a range
e0a973b
Add plugin sources to p2 update site
tortmayr Feb 10, 2020
256efb0
Add timeouts to CI pipline stages (#42)
tortmayr Feb 11, 2020
aca65d5
Fix CenterAction and FitToScreenAction (#47)
ndoschek Feb 18, 2020
07b0d59
Update README.md
planger Feb 19, 2020
e028999
Align snapshot version numbers (#48)
tortmayr Feb 20, 2020
d8d6b5a
#18 Revise Action/Operation API (#46)
tortmayr Feb 24, 2020
4cede84
Fix guava version contraint
tortmayr Feb 25, 2020
69458c6
Add CONTRIBUTION.MD
planger Feb 27, 2020
20239aa
Fix BasicActionHandler constructor (#49)
tortmayr Mar 3, 2020
5e6c70f
Fix uri of graph package
tortmayr Mar 9, 2020
127954b
Create issue template
planger Mar 12, 2020
d5ae6f0
Add unit tests for glsp.graph (#50)
planger Mar 12, 2020
62521fd
Add custom action for sending messages from the server to the client …
martin-fleck-at Mar 16, 2020
8d378b1
Fallback to model search when the GModelIndexImpl is still indexing
planger Mar 16, 2020
c146392
DefaultToolPaletteItemProvider should provide a consistent order (#53)
planger Mar 17, 2020
8adc42b
Add auto-complete widget and generic edit validation support (#54)
planger Apr 2, 2020
16c762b
#58 Support for multiple elementTypes per CreateOperationHandler
tortmayr Apr 9, 2020
b03b60d
Subtype support for GModelElementTypeAdapter (#56)
tortmayr May 8, 2020
b57e6b8
Add navigation support and navigation target resolution (#57)
planger May 18, 2020
e7442ca
Also support line and columns that have double style (e.g. 1.0) (#58)
planger May 19, 2020
e4e1637
Remove unnecessary arguments and usages of this
planger May 19, 2020
29a124a
Add support for CompoundOperations (#59) (#60)
tortmayr Jun 4, 2020
3ac4556
#75 Update to LSP4J 0.9.0 (#61)
tortmayr Jun 26, 2020
711aea7
#82 Properly dispose sockets after client connection close (#63)
tortmayr Jul 3, 2020
1372448
Reduce minimum requirement for lsp4j (#64)
tortmayr Jul 6, 2020
75f5577
#42 Add customizable location retrieval to CreateNodeOperationHandler
tortmayr Jul 1, 2020
ecc595e
#87 Add readonly support for GLSP diagrams (#65)
tortmayr Jul 20, 2020
09bd204
Fix typo in OperationActionhandler
tortmayr Jul 20, 2020
509762f
Fixes #21: Align action processor with client-side action dispatcher …
martin-fleck-at Aug 3, 2020
7660f10
#87 Make editMode retrievable via ModelState (#67)
tortmayr Aug 5, 2020
810a4ae
#21 Refactor ActionProcessor (#68)
tortmayr Aug 6, 2020
add144a
#95 Cleanup GLSPServerLauncher & add CLI parsing (#69)
tortmayr Aug 14, 2020
e39ff76
#88 Apply fix for PropertyBasedTyeAdapter (#70)
tortmayr Aug 14, 2020
240aa82
Ensure Java 1.8 compatibility in LaunchUtil (#71)
tortmayr Aug 17, 2020
4a8be94
#101 Ensure proper handling of empty DeleteElementOperation (#72)
tortmayr Aug 20, 2020
a2aa2e0
#96 #94 Cleanup and refactor client-server communication (#73)
tortmayr Aug 25, 2020
fd93384
Align jetty version & shutdown server on websocket close
tortmayr Aug 25, 2020
869bd2e
#97 ActionDispatcher should process all messages in the same thread (…
CamilleLetavernier Aug 27, 2020
169c1d9
#96 Introduce InitializeClientSessionAction (#75)
tortmayr Aug 27, 2020
0a15627
Use clientId provided by DisposeClientSession
tortmayr Aug 27, 2020
d598a99
#109 Remove the UUID requirement / ApplicationID (#76)
CamilleLetavernier Aug 28, 2020
44fd729
#109 Fix concurrent modification exception when a client disconnects …
CamilleLetavernier Aug 28, 2020
5fcc9ff
#96 Propagate errors to client in case of non-initialized session
tortmayr Aug 30, 2020
51383ac
Fix errorHandling in GLPSDefaultServer (#78)
tortmayr Sep 1, 2020
b68e8cc
#111 Restructure workflow server example (#79)
tortmayr Sep 4, 2020
ee0273d
#123 Centralize configuration in the server (#80)
CamilleLetavernier Sep 30, 2020
321094d
Refactor internal and public API (#81)
planger Oct 9, 2020
22ba4e0
#112, #131: Minor adaptations for consistency
martin-fleck-at Oct 12, 2020
3cce802
Add model source change notification (#83)
planger Oct 30, 2020
388160c
Fix failing test cases by avoiding debouncing on file watching (#85)
martin-fleck-at Oct 30, 2020
6508f85
Properly use completable future during server initialization (#84)
tortmayr Oct 30, 2020
211fe3c
#140 Improve extendibility of DefaultGLSPServer (#87)
tortmayr Nov 6, 2020
537502e
#124 [Server - ActionDispatcher] Missing error handling for responses…
CamilleLetavernier Nov 9, 2020
e565e25
#35 Extend server launcher for embedded use case (#88)
tortmayr Nov 17, 2020
3ce80ce
#132 Further clean up server API (#89)
tortmayr Nov 19, 2020
7c94bc9
0.8.0 Release
tortmayr Nov 20, 2020
b28dc41
Update to 0.9.0-SNAPSHOT versions
tortmayr Nov 20, 2020
72c1c59
Websocket: Do not reuse the same Injector for each client connection …
CamilleLetavernier Nov 26, 2020
94f7658
#153: Improve external navigation support through dedicated action (#92)
martin-fleck-at Dec 1, 2020
893663a
#153: Add utility class for JsonOpenerOptions (#93)
martin-fleck-at Dec 1, 2020
828eb37
Set minimal version constraint for javax.websocket to 1.0.0
tortmayr Dec 2, 2020
2ee2d54
#156 Use package-import rather than require-bundle for javax.servlet …
CamilleLetavernier Dec 7, 2020
17b959b
#122 #123 Centralize configuration in the server (#95)
planger Dec 16, 2020
d3f70af
[136] Readme for Workflow example and integrations (#97)
CamilleLetavernier Dec 18, 2020
b14d1ba
Remove unneeded question mark
planger Dec 18, 2020
19600e7
Prevent exception when starting from fat jar
planger Dec 18, 2020
bffdd11
Fix item list
planger Dec 18, 2020
1d3f8b4
Remove additional GIF at the end
planger Dec 18, 2020
dc6239f
Fix command to build fat jar
planger Dec 21, 2020
3d9df79
In-comment Elk Layout Initialization
planger Dec 21, 2020
fdcc09c
Centralize model loading and GModel creation (#96)
planger Jan 4, 2021
66c8e7d
#191: Provide correct kind for SelectAction (#98)
martin-fleck-at Feb 15, 2021
c3ff7f8
Adds SetViewportAction (#99)
planger Feb 19, 2021
8ebeee8
Add args to SModelElements (#100)
planger Mar 1, 2021
4057635
#197, #196: Improve dirty state handling (#101)
tortmayr Mar 23, 2021
2e3477b
#193 #200 Update model loading & saving (#102)
tortmayr Mar 23, 2021
eeece97
#208 Add `fileUri` to `SaveModelAction` (#103)
tortmayr Mar 25, 2021
0644ec8
#180: Add additional default types and improve arguments handling (#105)
martin-fleck-at Apr 21, 2021
5cc08aa
#220 Rework workflow-example (#107)
lucas-koehler May 3, 2021
acc8e99
#233 Add operation arguments to CreateNodeOperationHandler (#108)
tortmayr May 10, 2021
bef86fa
#81 Migrate to emfcloud checkstyle project (#106)
tortmayr May 14, 2021
736732c
#151 Cleanup incomplee Refactoring of `ShapeTypeHint` (#109)
tortmayr May 25, 2021
94d0469
#60 #17 Cleanup/update CI & maven build (#112)
tortmayr May 25, 2021
9e0966f
Update CONTRIBUTING.md (#113)
planger Jun 11, 2021
5ef121f
Update maven config
tortmayr Jun 13, 2021
eb92049
Update README.md (#114)
tortmayr Jun 16, 2021
500248a
#253 Align operation definitions for ChangeContainerOperation (#115)
ndoschek Jul 7, 2021
fadb5e5
#246 Use generic stand-in developer (#116)
tortmayr Jul 12, 2021
4aff77d
Replace `mvn install` with `mvn verify` (#117)
planger Jul 15, 2021
9ca913d
#237 Setup automated code scanning alerts (#118)
tortmayr Aug 2, 2021
6816814
Update codeql-analysis.yml
tortmayr Aug 2, 2021
d36f040
#260 Update to Guice 5.0.1 (#119)
tortmayr Aug 3, 2021
0c45065
Bump Guava to version 30.1 to fix security alert (#122)
tortmayr Aug 4, 2021
b19c75c
Update maven build to fix security alert (#124)
tortmayr Aug 15, 2021
e2ee370
#315 Refactor base protocol (#123)
tortmayr Aug 16, 2021
a41def6
Spectrum to GH Discussions (#125)
planger Aug 18, 2021
1cdaf34
#385 Improve customizability of DefaultGLSPServerLauncher (#128)
tortmayr Sep 9, 2021
55413f7
Fix error in popup rendering if <br> is unclosed (#130)
planger Sep 20, 2021
f4caf3d
Create SECURITY.md (#131)
tortmayr Sep 21, 2021
ef228ce
#150 #141 Rework dependency injection architecture (#127)
tortmayr Oct 5, 2021
e3212d2
Add property map in model state to store values in between handler ca…
planger Oct 15, 2021
de979e3
#421 Improve implementation of DefaultGLSPServer (#133)
tortmayr Oct 18, 2021
3b69c61
392: Add categories to the model (#129)
CamilleLetavernier Oct 19, 2021
bfd1d4a
#406 Update to Theia 1.18.0 and switch to Codicons
ndoschek Oct 18, 2021
673a5c5
Change to Import-Package for org.apache.log4j
ivy-cst Oct 25, 2021
80861b1
Change org.apache.log4j from Require-Bundle to Import-Package (#137)
ivy-cst Oct 25, 2021
93602f6
#425#120 Rework Actionhandler/Operationhandler API (#135)
tortmayr Oct 26, 2021
2689a11
#422 Cleanup ActionDispatcher API (#138)
tortmayr Nov 1, 2021
45d8bb7
#441#219 Ensure that `newBounds` of ChangeBoundsAction are properly a…
tortmayr Nov 2, 2021
48c8421
#441 Always apply size in `ChangeBoundsOperationHandler` (#140)
tortmayr Nov 2, 2021
2a13df9
#448 Implement dispatching of actions on next model-update (#141)
tortmayr Nov 4, 2021
edfdeec
#467: Use graph as default root element instead of plain model root (…
martin-fleck-at Dec 7, 2021
4f63c49
#460: Notify source/target feature change on source/target id change …
martin-fleck-at Dec 7, 2021
d8c5aea
#432#257 Align server action with client protocol
tortmayr Nov 9, 2021
010c9c0
v.0.9.0
tortmayr Dec 6, 2021
03b2954
Switch to 0.10.0-SNAPSHOT versions
tortmayr Dec 9, 2021
690a6ae
Set minimum version for jetty to 4.4
tortmayr Dec 14, 2021
968a911
#484 Update WorkflowPopupFactory (#145)
tortmayr Dec 20, 2021
abfee53
#487 Improve GLSP Server API documentation (#146)
ndoschek Dec 22, 2021
7dbeac2
#487 Fix Javadoc parameter (#147)
ndoschek Dec 22, 2021
ecfd74c
Improve styling and simplify workflow example (#148)
planger Jan 17, 2022
870cbac
#529 Add GitHub issue templates to the repositories
ndoschek Feb 7, 2022
e01800e
#503: Add 'model' directory to generated maven artifacts (#149)
martin-fleck-at Feb 7, 2022
20f1d2a
#571 Properly dispose temporary configuration session injectors (#151)
tortmayr Mar 7, 2022
49add54
#534: Provide utility methods to properly match actual type argument …
martin-fleck-at Mar 21, 2022
1dfd99f
Ensure that LayoutEngine is only injected into an optional field
planger Mar 22, 2022
4031e35
Refactorings regarding source model loading and saving (#154)
planger Mar 25, 2022
fe0583f
Improve workflow layouter (#156)
planger Apr 18, 2022
24d6e3e
Remove dependency to Apache Commons IO (org.apache.commons.io) (#157)
ivy-cst Apr 20, 2022
1c88981
#622 Add reusable API for EMF use cases and add notation model (#159)
ndoschek Apr 28, 2022
5b2ddd5
#622: Remove 'setRoot' from API in favor of 'updateRoot' (#161)
martin-fleck-at May 3, 2022
6ae7edb
#579 Update to log4j 2.17.1 (#163)
ndoschek May 5, 2022
9c23872
648: Clean up operation handlers (#164)
martin-fleck-at May 13, 2022
afc9995
#622 Add new plugin to p2 deployment (#160)
ndoschek May 14, 2022
7d77a6a
Fix video and add more info for GLSP client frames (#162)
planger May 14, 2022
cde176a
Update changelog (#166)
tortmayr May 16, 2022
b658f26
Refactor classes that are only useful for GModel source models (#165)
planger May 16, 2022
7b83708
Remove final modifier from DefaultClientSessionManager (#167)
tortmayr May 19, 2022
4b59106
GH-641 Implement GShapePrerenderedElement builder (#168)
tortmayr May 23, 2022
e9e541d
Rename `ModelSourceChangedAction` etc to `SourceModelChangedAction` (…
planger Jun 1, 2022
42df2f9
#658 Fix console log level for WebsocketLauncher (#170)
ndoschek Jun 2, 2022
c53b472
#635: Execute all pending actions before disposing action dispatcher …
martin-fleck-at Jun 2, 2022
3e896ab
v1.0.0 (#173)
tortmayr Jul 1, 2022
f599b30
Change to 1.1.0-SNAPSHOT Version (#174)
tortmayr Jul 5, 2022
2e68379
#622 Add glsp.server.emf source to p2 plugin (#176)
ndoschek Jul 6, 2022
4086508
#622 Export missing package org.eclipse.glsp.server.emf.idgen (#177)
ndoschek Jul 6, 2022
6a73618
#694: Add Layoutable interface (#175)
CamilleLetavernier Jul 14, 2022
2c98175
#694 Update CHANGELOG (#178)
ndoschek Jul 14, 2022
8e04f99
GH-706 Update protocol version (#179)
xai Sep 23, 2022
9d5605c
#738: Extend ComputedBoundsAction with route (#181)
martin-fleck-at Nov 14, 2022
bb8c083
added a new constructor method providing a custom sort string (#182)
rsoika Nov 16, 2022
ffdd8d2
Update tycho maven version: 2.3.0 => 2.7.5 (#180)
xai Dec 9, 2022
db1154f
Update Jenkinsconfiguration (#184)
tortmayr Dec 14, 2022
a0ede16
Replace shield.io bages
tortmayr Dec 16, 2022
5de00e2
Update server.websocket to Jetty 11 (#185)
tortmayr Jan 20, 2023
2c89a2d
Switch to Jetty 10 (#186)
tortmayr Jan 23, 2023
cd912b2
Update changelog (#188)
tortmayr Jan 24, 2023
284e2dd
don't wait on stdin in websocket server (#189)
mockersf Jan 26, 2023
cbff858
Let OperationHandlers return an optional command to control execution…
martin-fleck-at Jan 27, 2023
88719d8
Fix Javadoc comment (#190)
martin-fleck-at Jan 27, 2023
e1e1ef4
Remove unnecessary 'ApplyTaskEditAction' and update operation handler…
martin-fleck-at Jan 30, 2023
3cd5d8a
Ensure existing IdKeeperAdapters are found
planger Feb 1, 2023
30f049b
Update changelog (#193)
tortmayr Feb 6, 2023
a398b24
Maintain the revision of graph models in `EMFGModelFactory`
planger Feb 6, 2023
24a9ee7
Adds Ares Spifly to target & update site (#196)
tortmayr Feb 22, 2023
75284c4
GLSP-964 Properly bind WorkflowGLSPServer (#197)
tortmayr Mar 22, 2023
406046b
chore: align startup message to include port number (#195)
xai Mar 24, 2023
5a0d50b
GLSP-974: Use interface-injection for all subclasses of ModelState (#…
CamilleLetavernier Apr 17, 2023
0ef0a7e
implement subclientId for server
hege088 Apr 21, 2023
a5107f0
implement subclientId for server
hege088 Apr 21, 2023
4a5bb99
Add validation reason and distinguish between live and batch validati…
planger Apr 21, 2023
75cf930
feat: adjust server startup to use autoassigned ports (#198)
xai May 3, 2023
593b597
GLSP-991: Switch Jenkins build to Java 17 (#201)
tortmayr May 8, 2023
6d96d40
fix selection bug: subclientId not passed to response actions
hege088 May 8, 2023
f4ebcf0
fix selection bug: subclientId not passed to response actions
hege088 May 8, 2023
365d38b
Merge branch 'master' into glsp-collaboration
hege088 May 8, 2023
63dc23b
Merge branch 'master' into glsp-collaboration
hege088 May 8, 2023
cfa7065
add subclientId to EmfModelState interface
hege088 May 8, 2023
017bf0e
add subclientId to EmfModelState interface
hege088 May 8, 2023
d835a03
move CommandStackManager out of internal
hege088 May 8, 2023
adb437d
move CommandStackManager out of internal
hege088 May 8, 2023
19a4bfd
give access to command package from outside
hege088 May 9, 2023
dbc2f53
give access to command package from outside
hege088 May 9, 2023
353b98a
Adding max version requirements for guava to prevent version conflicts
N1k145 Jul 4, 2023
de002f8
Replace VSCode with VS Code in readme
planger Jul 4, 2023
63ac005
GLSP-979: Introduce 'deselectAll' flag for SelectAction (#204)
martin-fleck-at Jul 5, 2023
92b3258
Add support for progress reporting
planger Jul 14, 2023
975dec8
Fix Javadoc @returns and use @return instead (#206)
planger Jul 17, 2023
d01e5da
Expected and actual are swapped
planger Jul 17, 2023
0f9e3ee
GLSP-77: Allow WebSocket connections to reconnect after interrupt (#208)
ndoschek Jul 24, 2023
3e31289
Remove constant for deprecated stack layout
planger Aug 24, 2023
7ecc193
GLSP-1116 Revise model loading
tortmayr Sep 12, 2023
947ad04
GLSP-1117: Remove need for explicit definition of client actions
tortmayr Sep 14, 2023
c8389fa
GLSP-1071: Rename ServerStatus/ServerMessage action
tortmayr Sep 14, 2023
ff544bc
Fix typo in javadoc
tortmayr Sep 15, 2023
4e59c8e
Remove accidential commited code
tortmayr Sep 20, 2023
b061e44
Add hostname arg to cli parser (#214)
tortmayr Sep 22, 2023
7dc105e
211: Revise TypeHints and server side feedback for creation actions (…
CamilleLetavernier Sep 26, 2023
c242862
GLSP-211 Fix typos in new Edge Checker API (#215)
tortmayr Sep 27, 2023
2d38664
Updated Guice to 7.0.0 (#216)
N1k145 Sep 28, 2023
0814290
Update to Java 17 (#217)
tortmayr Oct 9, 2023
c17a028
GLSP-1127: Fix publish build (#218)
tortmayr Oct 11, 2023
3a422c8
Bugfixes for 2.0 (#219)
tortmayr Oct 13, 2023
28f8498
v2.0.0 (#220)
tortmayr Oct 15, 2023
3ba1ec1
Switch back to snapshot versions (#222)
tortmayr Nov 16, 2023
6df5044
Add ghost elements to tool palette items through trigger actions (#221)
martin-fleck-at Nov 21, 2023
3586921
Fixes https://github.com/eclipse-glsp/glsp/issues/1199 (#223)
dmm9 Dec 15, 2023
dece944
GLSP-1213 Fix ELK version to 0.8.1 (#225)
tortmayr Jan 24, 2024
de3825e
Fixes eclipse-glsp/glsp#1212 (#224)
ivy-cst Jan 24, 2024
3d47c33
v2.1.0 (#226)
tortmayr Jan 25, 2024
78a5fbd
fix findings
xai May 3, 2023
7a40ce7
fix findings
xai May 3, 2023
78ec6bc
Merge branch 'master' into glsp-collaboration
hege088 Feb 1, 2024
bae2608
Merge branch 'master' into glsp-collaboration
hege088 Feb 1, 2024
3d8d7f4
Add comment to subclientId, fix remaining findings from Merge
hege088 Feb 1, 2024
960bfb6
Add comment to subclientId, fix remaining findings from Merge
hege088 Feb 1, 2024
9738515
Add PR template
planger Feb 8, 2024
3f46eee
Fix log4j maven version (#230)
haydar-metin May 10, 2024
384e49c
Add Resizable with 'resizeLocations' to shape elements (#231)
martin-fleck-at May 27, 2024
d1f939b
Minor improvements (#233)
tortmayr Jun 11, 2024
f421a56
Configure fork and join nodes as not resizable (#232)
tortmayr Jun 12, 2024
e7f46ab
Make ActionDispatcher more easily customizable (#235)
martin-fleck-at Jun 18, 2024
f137307
Improve customizability through more protected methods and fields (#236)
martin-fleck-at Jun 19, 2024
f5eda9c
Update changelog (#237)
tortmayr Jun 22, 2024
cfb3ec5
Fix workflow documentation navigation example (#238)
tortmayr Jun 24, 2024
4a2c8dc
Update to 2.2.0 snapshot versions (#239)
tortmayr Jul 1, 2024
fee6301
v2.2.1
tortmayr Jul 22, 2024
2830044
Switch to 2.3.0-SNAPSHOT version
tortmayr Jul 22, 2024
d37d7df
* set subclientid within ActionDispatcher to remove it from method si…
Aug 9, 2024
b214e07
* set subclientid within ActionDispatcher to remove it from method si…
Aug 9, 2024
411ddfa
Merge branch 'refs/heads/master' into collabAdvanced
Oct 11, 2024
ae71e47
Merge branch 'refs/heads/master' into collabAdvanced
Oct 11, 2024
2fb9f99
* implement fixes of PR comments
Dec 13, 2024
6441a5b
* implement fixes of PR comments
Dec 13, 2024
36832c4
* set subclientid within ActionDispatcher to remove it from method si…
MatthiasHofstaetter Aug 9, 2024
76e45eb
Add PR template
planger Feb 8, 2024
64419ec
Fix log4j maven version (#230)
haydar-metin May 10, 2024
00a8f77
Add Resizable with 'resizeLocations' to shape elements (#231)
martin-fleck-at May 27, 2024
050c1b0
Minor improvements (#233)
tortmayr Jun 11, 2024
44188ce
Configure fork and join nodes as not resizable (#232)
tortmayr Jun 12, 2024
6bea5d5
Make ActionDispatcher more easily customizable (#235)
martin-fleck-at Jun 18, 2024
952d7ed
Improve customizability through more protected methods and fields (#236)
martin-fleck-at Jun 19, 2024
04ec7b9
Update changelog (#237)
tortmayr Jun 22, 2024
2484659
Fix workflow documentation navigation example (#238)
tortmayr Jun 24, 2024
354a11e
Update to 2.2.0 snapshot versions (#239)
tortmayr Jul 1, 2024
66a75da
v2.2.1
tortmayr Jul 22, 2024
c8715d2
Switch to 2.3.0-SNAPSHOT version
tortmayr Jul 22, 2024
dbce3c0
* implement fixes of PR comments
MatthiasHofstaetter Dec 13, 2024
03c6f94
Merge remote-tracking branch 'origin/collabAdvanced' into collabAdvanced
MatthiasHofstaetter Dec 16, 2024
7ab57b6
Merge branch 'collabAdvanced' of https://github.com/MatthiasHofstaett…
MatthiasHofstaetter Dec 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.glsp.graph.GModelIndex;
import org.eclipse.glsp.graph.GModelRoot;
import org.eclipse.glsp.server.command.CommandStackManager;
import org.eclipse.glsp.server.model.DefaultGModelState;
import org.eclipse.glsp.server.session.ClientSession;
import org.eclipse.glsp.server.session.ClientSessionListener;
Expand All @@ -50,6 +52,9 @@ public class EMFModelStateImpl extends DefaultGModelState implements EMFModelSta
@Inject
protected ClientSessionManager clientSessionManager;

@Inject
protected CommandStackManager commandStackManager;

@Inject
protected EMFIdGenerator idGenerator;

Expand All @@ -64,7 +69,7 @@ public void init() {
@Override
public void setEditingDomain(final EditingDomain editingDomain) {
this.editingDomain = editingDomain;
setCommandStack(this.editingDomain.getCommandStack());
commandStackManager.setCommandStack(this.editingDomain.getCommandStack(), this.participationId);
}

@Override
Expand Down Expand Up @@ -107,8 +112,12 @@ protected void closeResourceSet() {
}
}
if (result) {
commandStack.flush();
saveIsDone();
commandStackManager.getAllCommandStacks().forEach(commandStack -> {
commandStack.flush();
if (commandStack instanceof BasicCommandStack) {
((BasicCommandStack) commandStack).saveIsDone();
}
});
}
}

Expand Down
1 change: 1 addition & 0 deletions plugins/org.eclipse.glsp.server/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Export-Package: org.eclipse.glsp.server.actions,
org.eclipse.glsp.server.features.validation,
org.eclipse.glsp.server.gmodel,
org.eclipse.glsp.server.gson,
org.eclipse.glsp.server.command,
org.eclipse.glsp.server.internal.actions;x-internal:=true,
org.eclipse.glsp.server.internal.di.scope;x-internal:=true,
org.eclipse.glsp.server.internal.diagram;x-internal:=true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package org.eclipse.glsp.server.actions;

import org.eclipse.glsp.server.protocol.GLSPServer;
import org.eclipse.glsp.server.utils.CollaborationUtil;

/**
* Java-implementation of the `Action` interface. An action is a declarative description of a behavior that
Expand All @@ -40,9 +41,20 @@ public abstract class Action {
*/
private boolean receivedFromClient;

public Action(final String kind) {
/**
* Unique identifier specifying the initiator of the action in a collaboration session.
* This value is initialized on the initating client.
*/
private String subclientId;

public Action(final String kind, final String subclientId) {
super();
this.kind = kind;
this.subclientId = subclientId;
}

public Action(final String kind) {
this(kind, null);
}

public String getKind() { return kind; }
Expand All @@ -51,6 +63,10 @@ public Action(final String kind) {

public void setReceivedFromClient(final boolean receivedFromClient) { this.receivedFromClient = receivedFromClient; }

public String getSubclientId() {
return this.subclientId == null ? CollaborationUtil.FALLBACK_SUBCLIENT_ID : this.subclientId;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
Expand All @@ -60,4 +76,11 @@ public String toString() {
return builder.toString();
}

public static Action addSubclientId(final Action initialAction, final Action extendedAction) {
if (initialAction.getSubclientId() != null) {
extendedAction.subclientId = initialAction.subclientId;
}
return extendedAction;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ public List<Action> executeAction(final SaveModelAction action) {
} finally {
modelSourceWatcher.ifPresent(watcher -> watcher.continueWatching());
}
return listOf(new SetDirtyStateAction(modelState.isDirty(), SetDirtyStateAction.Reason.SAVE));
return listOf(
new SetDirtyStateAction(modelState.isDirty(), SetDirtyStateAction.Reason.SAVE));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*******************************************************************************
* Copyright (c) 2019-2021 EclipseSource and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
******************************************************************************/
package org.eclipse.glsp.server.command;

import org.eclipse.emf.common.command.CommandStack;

public interface CommandStackFactory {
CommandStack createCommandStack();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*******************************************************************************
* Copyright (c) 2019-2021 EclipseSource and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
******************************************************************************/
package org.eclipse.glsp.server.command;

import java.util.List;

import org.eclipse.emf.common.command.CommandStack;

public interface CommandStackManager {
CommandStack getOrCreateCommandStack(String subclientId);

List<CommandStack> getAllCommandStacks();

void setCommandStack(CommandStack commandStack, String subclientId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*******************************************************************************
* Copyright (c) 2019-2021 EclipseSource and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
******************************************************************************/
package org.eclipse.glsp.server.command;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.glsp.server.utils.CollaborationUtil;

import com.google.inject.Inject;

public class DefaultCommandStackManager implements CommandStackManager {

@Inject
CommandStackFactory factory;

Check warning on line 31 in plugins/org.eclipse.glsp.server/src/org/eclipse/glsp/server/command/DefaultCommandStackManager.java

View check run for this annotation

Jenkins - GLSP / CheckStyle

VisibilityModifierCheck

NORMAL: Variable 'factory' must be private and have accessor methods.
Raw output
<p>Since Checkstyle 3.0</p><p> Checks visibility of class members. Only static final, immutable or annotated by specified annotation members may be public; other class members must be private unless the property <code>protectedAllowed</code> or <code>packageAllowed</code> is set. </p><p> Public members are not flagged if the name matches the public member regular expression (contains <code>"^serialVersionUID$"</code> by default). </p><p>Note that Checkstyle 2 used to include <code>"^f[A-Z][a-zA-Z0-9]*$"</code> in the default pattern to allow names used in container-managed persistence for Enterprise JavaBeans (EJB) 1.1 with the default settings. With EJB 2.0 it is no longer necessary to have public access for persistent fields, so the default has been changed. </p><p> Rationale: Enforce encapsulation. </p><p> Check also has options making it less strict: </p><p><b>ignoreAnnotationCanonicalNames</b> - the list of annotations which ignore variables in consideration. If user will provide short annotation name that type will match to any named the same type without consideration of package </p><p><b>allowPublicFinalFields</b> - which allows public final fields. Default value is <b>false</b></p><p><b>allowPublicImmutableFields</b> - which allows immutable fields to be declared as public if defined in final class. Default value is <b>false</b></p><p> Field is known to be immutable if: - It's declared as final - Has either a primitive type or instance of class user defined to be immutable (such as String, ImmutableCollection from Guava and etc) </p><p> Classes known to be immutable are listed in <b>immutableClassCanonicalNames</b> by their <b>canonical</b> names. </p><p> Rationale: Forcing all fields of class to have private modified by default is good in most cases, but in some cases it drawbacks in too much boilerplate get/set code. One of such cases are immutable classes. </p><p><b>Restriction</b>: Check doesn't check if class is immutable, there's no checking if accessory methods are missing and all fields are immutable, we only check <b>if current field is immutable or final</b>. Under the flag <b>allowPublicImmutableFields</b>, the enclosing class must also be final, to encourage immutability. Under the flag <b>allowPublicFinalFields</b>, the final modifier on the enclosing class is optional. </p><p> Star imports are out of scope of this Check. So if one of type imported via <b>star import</b> collides with user specified one by its short name - there won't be Check's violation. </p>

// subclientId, CommandStack
protected Map<String, CommandStack> commandStackMap = new HashMap<>();

@Override
public CommandStack getOrCreateCommandStack(final String subclientId) {
String subclientIdOrFallback = getSubclientIdOrFallback(subclientId);
if (commandStackMap.containsKey(subclientIdOrFallback)) {
return commandStackMap.get(subclientIdOrFallback);
}

CommandStack commandStack = factory.createCommandStack();
commandStackMap.put(subclientIdOrFallback, commandStack);
return commandStack;
}

@Override
public List<CommandStack> getAllCommandStacks() { return new ArrayList<>(commandStackMap.values()); }

@Override
public void setCommandStack(final CommandStack commandStack, final String subclientId) {
String subclientIdOrFallback = getSubclientIdOrFallback(subclientId);
if (commandStackMap.containsKey(subclientIdOrFallback)) {
commandStackMap.get(subclientIdOrFallback).flush();
}
commandStackMap.put(subclientIdOrFallback, commandStack);
}

private String getSubclientIdOrFallback(final String subclientId) {
if (subclientId != null) {
return subclientId;
}
return CollaborationUtil.FALLBACK_SUBCLIENT_ID;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,14 @@
import org.eclipse.glsp.server.gson.GraphGsonConfigurationFactory;
import org.eclipse.glsp.server.internal.actions.DefaultActionDispatcher;
import org.eclipse.glsp.server.internal.actions.DefaultActionHandlerRegistry;
import org.eclipse.glsp.server.command.CommandStackFactory;
import org.eclipse.glsp.server.command.CommandStackManager;
import org.eclipse.glsp.server.command.DefaultCommandStackManager;
import org.eclipse.glsp.server.internal.diagram.DefaultServerConfigurationContribution;
import org.eclipse.glsp.server.internal.featues.directediting.DefaultContextEditValidatorRegistry;
import org.eclipse.glsp.server.internal.featues.navigation.DefaultNavigationTargetProviderRegistry;
import org.eclipse.glsp.server.internal.features.contextactions.DefaultContextActionsProviderRegistry;
import org.eclipse.glsp.server.internal.gmodel.commandstack.GModelCommandStackFactory;
import org.eclipse.glsp.server.internal.gson.DefaultGraphGsonConfigurationFactory;
import org.eclipse.glsp.server.internal.operations.DefaultOperationHandlerRegistry;
import org.eclipse.glsp.server.internal.toolpalette.DefaultToolPaletteItemProvider;
Expand Down Expand Up @@ -189,6 +193,10 @@ protected void configureBase() {
bindOptionally(LayoutEngine.class, bindLayoutEngine());
bindOptionally(GraphExtension.class, bindGraphExtension());
bindOptionally(EdgeCreationChecker.class, bindEdgeCreationChecker());

// Command Stack
bind(CommandStackFactory.class).to(bindCommandStackFactory()).in(Singleton.class);
bind(CommandStackManager.class).to(bindCommandStackManager()).in(Singleton.class);
}

protected void bindDiagramType() {
Expand Down Expand Up @@ -328,5 +336,13 @@ protected Class<? extends EdgeCreationChecker> bindEdgeCreationChecker() {
return null;
}

protected Class<? extends CommandStackFactory> bindCommandStackFactory() {
return GModelCommandStackFactory.class;
}

protected Class<? extends CommandStackManager> bindCommandStackManager() {
return DefaultCommandStackManager.class;
}

public abstract String getDiagramType();
}
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public List<Action> submitModel() {
* Returns a list of actions to directly update the client-side model without any server- or client-side layouting.
* <p>
* Typically {@link ActionHandler action handlers} don't invoke this method but use
* {@link #submitModel(String)}
* {@link #submitModel(String, String)}
* instead, as this is only used to eventually submit the model on the client directly after all layouting is already
* performed before. The only foreseen caller of this method is {@link ComputedBoundsActionHandler}.
* </p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,20 +64,23 @@ public class RequestModelActionHandler extends AbstractActionHandler<RequestMode

@Override
public List<Action> executeAction(final RequestModelAction action) {
modelState.setClientOptions(action.getOptions());

boolean isReconnecting = ClientOptionsUtil.isReconnecting(action.getOptions());

ProgressMonitor monitor = notifyStartLoading();
if (isReconnecting) {
handleReconnect(action);
} else {
sourceModelStorage.loadSourceModel(action);
}
notifyFinishedLoading(monitor);

if (!isReconnecting) {
sourceModelWatcher.ifPresent(watcher -> watcher.startWatching());
// only reload if not initialized
if (!ClientOptionsUtil.disableReloadIsTrue(action.getOptions()) || modelState.getRoot() == null) {
modelState.setClientOptions(action.getOptions());

boolean isReconnecting = ClientOptionsUtil.isReconnecting(action.getOptions());

ProgressMonitor monitor = notifyStartLoading();
if (isReconnecting) {
handleReconnect(action);
} else {
sourceModelStorage.loadSourceModel(action);
}
notifyFinishedLoading(monitor);

if (!isReconnecting) {
sourceModelWatcher.ifPresent(watcher -> watcher.startWatching());
}
}

return modelSubmissionHandler.submitInitialModel(action);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.eclipse.glsp.graph.GModelElement;
import org.eclipse.glsp.graph.GNode;
import org.eclipse.glsp.graph.GPoint;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.actions.ActionDispatcher;
import org.eclipse.glsp.server.actions.SelectAction;
import org.eclipse.glsp.server.operations.AbstractCreateOperationHandler;
Expand Down Expand Up @@ -59,7 +60,9 @@ public void executeOperation(final CreateNodeOperation operation) {
.map(location -> LayoutUtil.getRelativeLocation(location, container));
GModelElement element = createNode(relativeLocation, operation.getArgs());
container.getChildren().add(element);
actionDispatcher.dispatchAfterNextUpdate(new SelectAction(), new SelectAction(List.of(element.getId())));
actionDispatcher.dispatchAfterNextUpdate(
Action.addSubclientId(operation, new SelectAction()),
Action.addSubclientId(operation, new SelectAction(List.of(element.getId()))));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.eclipse.glsp.graph.GModelElement;
import org.eclipse.glsp.graph.GNode;
import org.eclipse.glsp.graph.GPoint;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.actions.ActionDispatcher;
import org.eclipse.glsp.server.actions.GhostElement;
import org.eclipse.glsp.server.actions.SelectAction;
Expand Down Expand Up @@ -63,7 +64,10 @@ public void executeCreation(final CreateNodeOperation operation) {
Optional<GPoint> relativeLocation = getRelativeLocation(container, absoluteLocation);
GModelElement element = createNode(relativeLocation, operation.getArgs());
container.getChildren().add(element);
actionDispatcher.dispatchAfterNextUpdate(SelectAction.addSelection(List.of(element.getId())));
actionDispatcher.dispatchAfterNextUpdate(
Action.addSubclientId(
operation,
SelectAction.addSelection(List.of(element.getId()))));
}

protected Optional<GPoint> getLocation(final CreateNodeOperation operation) {
Expand Down
Loading