Skip to content

Commit

Permalink
#20#23 Update to GLSP 0.9.0 release version (#24)
Browse files Browse the repository at this point in the history
* #20 Fix default getSourceUri in EMSModelSourceLoader

- Fix getSourceUri to return complete sourceUri instead of workspace relative Uri by default

Fixes #20

* #23 Update EMSBasicHandlers and update to GLSP 0.9.0.

- Update dependency to GLSP 0.9.0 release version
- Improve EMSBasic(Action|Operation)Handlers by injecting EMSModelState and reduce generic Types
- Replace deprecated usage of BasicOperationHandler/BasicCreateOperationHandler with AbstractOperationHandler/AbstractCreateOperationHandler

Fixes #23

* Address review comments

- Reuse injected GModelState in Basic*Handlers
- Provide getter method for EMSModelState in Basic*Handlers
  • Loading branch information
ndoschek authored Jan 10, 2022
1 parent 69e1a7b commit 0e5d086
Show file tree
Hide file tree
Showing 18 changed files with 80 additions and 117 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import org.eclipse.glsp.server.di.MultiBinding;
import org.eclipse.glsp.server.features.undoredo.UndoRedoActionHandler;
import org.eclipse.glsp.server.layout.LayoutEngine;
import org.eclipse.glsp.server.model.GModelState;
import org.eclipse.glsp.server.operations.OperationActionHandler;

public abstract class EMSGLSPModule extends GModelJsonDiagramModule {
Expand All @@ -50,7 +49,7 @@ protected Class<? extends LayoutEngine> bindLayoutEngine() {
}

@Override
protected Class<? extends GModelState> bindGModelState() {
protected Class<? extends EMSModelState> bindGModelState() {
return EMSModelState.class;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,12 @@
import java.util.List;

import org.eclipse.emfcloud.modelserver.glsp.EMSModelServerAccess;
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.actions.ActionHandler;

public interface EMSActionHandler<T extends Action, U extends EMSModelState, V extends EMSModelServerAccess>
public interface EMSActionHandler<T extends Action, U extends EMSModelServerAccess>
extends ActionHandler {

List<Action> executeAction(T action, U modelState, V modelServerAccess);
List<Action> executeAction(T action, U modelServerAccess);

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,16 @@
import com.google.inject.Inject;

@SuppressWarnings("restriction")
public abstract class EMSBasicActionHandler<T extends Action, U extends EMSModelState, V extends EMSModelServerAccess>
extends AbstractActionHandler<T> implements EMSActionHandler<T, U, V> {
public abstract class EMSBasicActionHandler<T extends Action, U extends EMSModelServerAccess>
extends AbstractActionHandler<T> implements EMSActionHandler<T, U> {

protected final Class<U> modelStateType;
protected final Class<V> modelServerAccessType;
protected final Class<U> modelServerAccessType;

@Inject
protected GModelState gModelState;

public EMSBasicActionHandler() {
super();
this.modelStateType = deriveModelStateType();
this.modelServerAccessType = deriveModelServerAccessType();
}

Expand All @@ -45,25 +43,20 @@ protected Class<T> deriveActionType() {
}

@SuppressWarnings("unchecked")
protected Class<U> deriveModelStateType() {
protected Class<U> deriveModelServerAccessType() {
return (Class<U>) (GenericsUtil.getParametrizedType(getClass(), EMSBasicActionHandler.class))
.getActualTypeArguments()[1];
}

@SuppressWarnings("unchecked")
protected Class<V> deriveModelServerAccessType() {
return (Class<V>) (GenericsUtil.getParametrizedType(getClass(), EMSBasicActionHandler.class))
.getActualTypeArguments()[2];
}

@Override
public List<Action> executeAction(final T actualAction) {
if (handles(actualAction)) {
EMSModelServerAccess modelServerAccess = EMSModelState.getModelServerAccess(gModelState);
return executeAction(actionType.cast(actualAction), modelStateType.cast(gModelState),
modelServerAccessType.cast(modelServerAccess));
return executeAction(actionType.cast(actualAction), modelServerAccessType.cast(modelServerAccess));
}
return none();
}

protected EMSModelState getEMSModelState() { return EMSModelState.getModelState(gModelState); }

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,15 @@

import org.apache.log4j.Logger;
import org.eclipse.emfcloud.modelserver.glsp.EMSModelServerAccess;
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.features.undoredo.RedoAction;

public class EMSRedoActionHandler extends EMSBasicActionHandler<RedoAction, EMSModelState, EMSModelServerAccess> {
public class EMSRedoActionHandler extends EMSBasicActionHandler<RedoAction, EMSModelServerAccess> {

private static final Logger LOGGER = Logger.getLogger(EMSRedoActionHandler.class.getSimpleName());

@Override
public List<Action> executeAction(final RedoAction action, final EMSModelState modelState,
public List<Action> executeAction(final RedoAction action,
final EMSModelServerAccess modelServerAccess) {

CompletableFuture<Void> result = modelServerAccess.redo().thenAccept(response -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

import org.eclipse.emfcloud.modelserver.glsp.EMSModelServerAccess;
import org.eclipse.emfcloud.modelserver.glsp.actions.EMSRefreshModelAction;
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.features.core.model.ModelSubmissionHandler;

Expand All @@ -24,16 +23,16 @@
* Handles model updates with an ActionHandler, to make sure we're in a thread-safe context.
*/
public class EMSRefreshModelActionHandler
extends EMSBasicActionHandler<EMSRefreshModelAction, EMSModelState, EMSModelServerAccess> {
extends EMSBasicActionHandler<EMSRefreshModelAction, EMSModelServerAccess> {

@Inject
protected ModelSubmissionHandler submissionHandler;

@Override
public List<Action> executeAction(final EMSRefreshModelAction action, final EMSModelState modelState,
public List<Action> executeAction(final EMSRefreshModelAction action,
final EMSModelServerAccess modelServerAccess) {
// reload models
modelState.loadSourceModels();
getEMSModelState().loadSourceModels();
// refresh GModelRoot
return submissionHandler.submitModel();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,15 @@
import java.util.List;

import org.eclipse.emfcloud.modelserver.glsp.EMSModelServerAccess;
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.actions.SaveModelAction;
import org.eclipse.glsp.server.types.GLSPServerException;

public class EMSSaveModelActionHandler
extends EMSBasicActionHandler<SaveModelAction, EMSModelState, EMSModelServerAccess> {
extends EMSBasicActionHandler<SaveModelAction, EMSModelServerAccess> {

@Override
public List<Action> executeAction(final SaveModelAction action, final EMSModelState modelState,
final EMSModelServerAccess modelServerAccess) {
public List<Action> executeAction(final SaveModelAction action, final EMSModelServerAccess modelServerAccess) {

modelServerAccess.save().thenAccept(response -> {
if (!response.body()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,16 @@

import org.apache.log4j.Logger;
import org.eclipse.emfcloud.modelserver.glsp.EMSModelServerAccess;
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.actions.Action;
import org.eclipse.glsp.server.features.undoredo.UndoAction;

public class EMSUndoActionHandler
extends EMSBasicActionHandler<UndoAction, EMSModelState, EMSModelServerAccess> {
extends EMSBasicActionHandler<UndoAction, EMSModelServerAccess> {

private static final Logger LOGGER = Logger.getLogger(EMSUndoActionHandler.class.getSimpleName());

@Override
public List<Action> executeAction(final UndoAction action, final EMSModelState modelState,
final EMSModelServerAccess modelServerAccess) {
public List<Action> executeAction(final UndoAction action, final EMSModelServerAccess modelServerAccess) {

CompletableFuture<Void> result = modelServerAccess.undo().thenAccept(response -> {
int status = response.getStatusCode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,13 @@
import org.eclipse.glsp.server.model.GModelState;
import org.eclipse.glsp.server.types.GLSPServerException;
import org.eclipse.glsp.server.utils.ClientOptionsUtil;
import org.eclipse.glsp.server.utils.MapUtil;

import com.google.inject.Inject;

public abstract class EMSModelSourceLoader implements ModelSourceLoader {

private static Logger LOGGER = Logger.getLogger(EMSModelSourceLoader.class.getSimpleName());

public static final String WORKSPACE_ROOT_OPTION = "workspaceRoot";

@Inject
protected ModelServerClientProvider modelServerClientProvider;

Expand Down Expand Up @@ -88,10 +85,7 @@ public EMSSubscriptionListener createSubscriptionListener(final EMSModelState mo
protected String getSourceURI(final Map<String, String> clientOptions) {
String sourceURI = ClientOptionsUtil.getSourceUri(clientOptions)
.orElseThrow(() -> new GLSPServerException("No source URI given to load model!"));
String workspaceRoot = MapUtil.getValue(clientOptions, WORKSPACE_ROOT_OPTION)
.orElseThrow(() -> new GLSPServerException("No workspace URI given to load model!"));

return sourceURI.replace(ClientOptionsUtil.adaptUri(workspaceRoot), "").replaceFirst("/", "");
return sourceURI;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
package org.eclipse.emfcloud.modelserver.glsp.notation.integration;

import org.eclipse.emfcloud.modelserver.glsp.EMSGLSPModule;
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.emfcloud.modelserver.glsp.operations.handlers.EMSChangeBoundsOperationHandler;
import org.eclipse.emfcloud.modelserver.glsp.operations.handlers.EMSLayoutOperationHandler;
import org.eclipse.glsp.server.di.MultiBinding;
import org.eclipse.glsp.server.model.GModelState;
import org.eclipse.glsp.server.operations.OperationHandler;
import org.eclipse.glsp.server.operations.gmodel.ChangeBoundsOperationHandler;
import org.eclipse.glsp.server.operations.gmodel.LayoutOperationHandler;
Expand All @@ -29,7 +29,7 @@ protected void configureOperationHandlers(final MultiBinding<OperationHandler> b
}

@Override
protected Class<? extends GModelState> bindGModelState() {
protected Class<? extends EMSModelState> bindGModelState() {
return EMSNotationModelState.class;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,18 @@
package org.eclipse.emfcloud.modelserver.glsp.notation.integration;

import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.model.GModelState;

public abstract class EMSNotationModelState extends EMSModelState {

@Override
public abstract EMSNotationModelIndex getIndex();

public static EMSNotationModelState getModelState(final GModelState state) {
if (!(state instanceof EMSNotationModelState)) {
throw new IllegalArgumentException("Argument must be a EMSNotationModelState");
}
return ((EMSNotationModelState) state);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,28 @@
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.internal.util.GenericsUtil;
import org.eclipse.glsp.server.model.GModelState;
import org.eclipse.glsp.server.operations.BasicCreateOperationHandler;
import org.eclipse.glsp.server.operations.AbstractCreateOperationHandler;
import org.eclipse.glsp.server.operations.CreateOperation;

import com.google.common.collect.Lists;
import com.google.inject.Inject;

@SuppressWarnings("restriction")
public abstract class EMSBasicCreateOperationHandler<T extends CreateOperation, U extends EMSModelState, V extends EMSModelServerAccess>
extends BasicCreateOperationHandler<T> implements EMSOperationHandler<T, U, V> {
public abstract class EMSBasicCreateOperationHandler<T extends CreateOperation, U extends EMSModelServerAccess>
extends AbstractCreateOperationHandler<T> implements EMSOperationHandler<T, U> {

protected final Class<U> modelStateType;
protected final Class<V> modelServerAccessType;
@Inject
protected GModelState gModelState;

protected final Class<U> modelServerAccessType;

public EMSBasicCreateOperationHandler(final String... elementTypeIds) {
super(Lists.newArrayList(elementTypeIds));
this.modelStateType = deriveModelStateType();
this.modelServerAccessType = deriveModelServerAccessType();
}

public EMSBasicCreateOperationHandler(final List<String> handledElementTypeIds) {
super(handledElementTypeIds);
this.modelStateType = deriveModelStateType();
this.modelServerAccessType = deriveModelServerAccessType();
}

Expand All @@ -48,33 +49,19 @@ protected Class<T> deriveOperationType() {
}

@SuppressWarnings("unchecked")
protected Class<U> deriveModelStateType() {
protected Class<U> deriveModelServerAccessType() {
return (Class<U>) (GenericsUtil.getParametrizedType(getClass(), EMSBasicCreateOperationHandler.class))
.getActualTypeArguments()[1];
}

@SuppressWarnings("unchecked")
protected Class<V> deriveModelServerAccessType() {
return (Class<V>) (GenericsUtil.getParametrizedType(getClass(), EMSBasicCreateOperationHandler.class))
.getActualTypeArguments()[2];
}

@Override
public void executeOperation(final T operation, final GModelState gModelState) {
public void executeOperation(final T operation) {
if (handles(operation)) {
EMSModelState modelState = getModelState(gModelState);
EMSModelServerAccess modelServerAccess = getModelServerAccess(gModelState);
executeOperation(operationType.cast(operation), modelStateType.cast(modelState),
modelServerAccessType.cast(modelServerAccess));
EMSModelServerAccess modelServerAccess = EMSModelState.getModelServerAccess(gModelState);
executeOperation(operationType.cast(operation), modelServerAccessType.cast(modelServerAccess));
}
}

protected EMSModelState getModelState(final GModelState gModelState) {
return EMSModelState.getModelState(gModelState);
}

protected EMSModelServerAccess getModelServerAccess(final GModelState gModelState) {
return EMSModelState.getModelServerAccess(gModelState);
}
protected EMSModelState getEMSModelState() { return EMSModelState.getModelState(gModelState); }

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,22 @@
import org.eclipse.emfcloud.modelserver.glsp.model.EMSModelState;
import org.eclipse.glsp.server.internal.util.GenericsUtil;
import org.eclipse.glsp.server.model.GModelState;
import org.eclipse.glsp.server.operations.BasicOperationHandler;
import org.eclipse.glsp.server.operations.AbstractOperationHandler;
import org.eclipse.glsp.server.operations.Operation;

import com.google.inject.Inject;

@SuppressWarnings("restriction")
public abstract class EMSBasicOperationHandler<T extends Operation, U extends EMSModelState, V extends EMSModelServerAccess>
extends BasicOperationHandler<T> implements EMSOperationHandler<T, U, V> {
public abstract class EMSBasicOperationHandler<T extends Operation, U extends EMSModelServerAccess>
extends AbstractOperationHandler<T> implements EMSOperationHandler<T, U> {

@Inject
protected GModelState gModelState;

protected final Class<U> modelStateType;
protected final Class<V> modelServerAccessType;
protected final Class<U> modelServerAccessType;

public EMSBasicOperationHandler() {
super();
this.modelStateType = deriveModelStateType();
this.modelServerAccessType = deriveModelServerAccessType();
}

Expand All @@ -38,32 +41,18 @@ protected Class<T> deriveOperationType() {
}

@SuppressWarnings("unchecked")
protected Class<U> deriveModelStateType() {
protected Class<U> deriveModelServerAccessType() {
return (Class<U>) (GenericsUtil.getParametrizedType(getClass(), EMSBasicOperationHandler.class))
.getActualTypeArguments()[1];
}

@SuppressWarnings("unchecked")
protected Class<V> deriveModelServerAccessType() {
return (Class<V>) (GenericsUtil.getParametrizedType(getClass(), EMSBasicOperationHandler.class))
.getActualTypeArguments()[2];
}

@Override
public void executeOperation(final T operation, final GModelState gModelState) {
public void executeOperation(final T operation) {
if (handles(operation)) {
EMSModelState modelState = getModelState(gModelState);
EMSModelServerAccess modelServerAccess = getModelServerAccess(gModelState);
executeOperation(operationType.cast(operation), modelStateType.cast(modelState),
modelServerAccessType.cast(modelServerAccess));
EMSModelServerAccess modelServerAccess = EMSModelState.getModelServerAccess(gModelState);
executeOperation(operationType.cast(operation), modelServerAccessType.cast(modelServerAccess));
}
}

protected EMSModelState getModelState(final GModelState gModelState) {
return EMSModelState.getModelState(gModelState);
}

protected EMSModelServerAccess getModelServerAccess(final GModelState gModelState) {
return EMSModelState.getModelServerAccess(gModelState);
}
protected EMSModelState getEMSModelState() { return EMSModelState.getModelState(gModelState); }
}
Loading

0 comments on commit 0e5d086

Please sign in to comment.