From a694dfab22db3eb3ec87206090a2ecb000f56a4f Mon Sep 17 00:00:00 2001 From: Anatoliy Bazko Date: Thu, 9 Aug 2018 08:10:28 +0000 Subject: [PATCH] Update project config when event is fired (#10677) Signed-off-by: Anatoliy Bazko --- .../JavaLanguageServerLauncher.java | 2 + .../che-plugin-languageserver-ide/pom.xml | 4 ++ .../ExecuteClientCommandProcessor.java | 38 ++++++++++++++++++- .../server/impl/ProjectServiceApi.java | 3 ++ .../server/impl/RootDirRemovalHandler.java | 3 ++ 5 files changed, 48 insertions(+), 2 deletions(-) diff --git a/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/JavaLanguageServerLauncher.java b/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/JavaLanguageServerLauncher.java index 022ac3da441..2b1d01305ea 100644 --- a/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/JavaLanguageServerLauncher.java +++ b/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/JavaLanguageServerLauncher.java @@ -16,6 +16,7 @@ import static org.eclipse.che.api.languageserver.util.JsonUtil.convertToJson; import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECT; import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECTS_CLASSPATH; +import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECT_CONFIG; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -137,6 +138,7 @@ private ExecuteCommandParams convertParams(ExecuteCommandParams params) { params.setArguments(fixedPathList); break; case CLIENT_UPDATE_PROJECT: + case CLIENT_UPDATE_PROJECT_CONFIG: Object projectUri = params.getArguments().get(0); params.setArguments( singletonList(removePrefixUri(convertToJson(projectUri).getAsString()))); diff --git a/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml b/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml index 9d80d372e32..1378b686326 100644 --- a/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml +++ b/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml @@ -82,6 +82,10 @@ org.eclipse.che.core che-core-api-project-shared + + org.eclipse.che.core + che-core-api-workspace-shared + org.eclipse.che.core che-core-commons-gwt diff --git a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ExecuteClientCommandProcessor.java b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ExecuteClientCommandProcessor.java index 5ad6425a0fc..41ffa8177f4 100644 --- a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ExecuteClientCommandProcessor.java +++ b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ExecuteClientCommandProcessor.java @@ -13,13 +13,17 @@ import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECT; import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECTS_CLASSPATH; +import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECT_CONFIG; import com.google.gwt.json.client.JSONString; import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.web.bindery.event.shared.EventBus; +import java.util.List; import org.eclipse.che.ide.api.app.AppContext; +import org.eclipse.che.ide.project.ProjectServiceClient; import org.eclipse.che.ide.project.node.ProjectClasspathChangedEvent; +import org.eclipse.che.ide.resource.Path; import org.eclipse.lsp4j.ExecuteCommandParams; /** @@ -32,11 +36,14 @@ public class ExecuteClientCommandProcessor { private EventBus eventBus; private AppContext appContext; + private final ProjectServiceClient projectService; @Inject - public ExecuteClientCommandProcessor(EventBus eventBus, AppContext appContext) { + public ExecuteClientCommandProcessor( + EventBus eventBus, AppContext appContext, ProjectServiceClient projectService) { this.eventBus = eventBus; this.appContext = appContext; + this.projectService = projectService; } public void execute(ExecuteCommandParams params) { @@ -49,6 +56,9 @@ public void execute(ExecuteCommandParams params) { case CLIENT_UPDATE_PROJECT: updateProject(stringValue(params.getArguments())); break; + case CLIENT_UPDATE_PROJECT_CONFIG: + updateProjectConfig(stringValue(params.getArguments())); + break; default: break; } @@ -66,7 +76,31 @@ private void updateProject(String project) { }); } + private void updateProjectConfig(String project) { + appContext + .getWorkspaceRoot() + .getContainer(project) + .then( + container -> { + projectService + .getProject(Path.valueOf(project)) + .then( + projectConfigDto -> { + projectService + .updateProject(projectConfigDto) + .then( + arg -> { + if (container.isPresent()) { + container.get().synchronize(); + } + }); + }); + }); + } + private String stringValue(Object value) { - return value instanceof JSONString ? ((JSONString) value).stringValue() : String.valueOf(value); + return value instanceof JSONString + ? ((JSONString) value).stringValue() + : (value instanceof List ? stringValue(((List) value).get(0)) : String.valueOf(value)); } } diff --git a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/ProjectServiceApi.java b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/ProjectServiceApi.java index 01cceb1cf1c..441c22cc900 100644 --- a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/ProjectServiceApi.java +++ b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/ProjectServiceApi.java @@ -65,6 +65,7 @@ import org.eclipse.che.api.fs.server.FsManager; import org.eclipse.che.api.project.server.ProjectManager; import org.eclipse.che.api.project.server.ProjectService; +import org.eclipse.che.api.project.server.notification.PreProjectDeletedEvent; import org.eclipse.che.api.project.server.notification.ProjectCreatedEvent; import org.eclipse.che.api.project.server.notification.ProjectDeletedEvent; import org.eclipse.che.api.project.server.notification.ProjectItemModifiedEvent; @@ -237,6 +238,8 @@ public void delete(String wsPath) wsPath = absolutize(wsPath); if (projectManager.isRegistered(wsPath)) { + eventService.publish(new PreProjectDeletedEvent(wsPath)); + projectManager .delete(wsPath) .map(RegisteredProject::getPath) diff --git a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/RootDirRemovalHandler.java b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/RootDirRemovalHandler.java index 5980df2c2b5..3ba104379a3 100644 --- a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/RootDirRemovalHandler.java +++ b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/RootDirRemovalHandler.java @@ -19,6 +19,7 @@ import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.core.notification.EventService; import org.eclipse.che.api.project.server.ProjectManager; +import org.eclipse.che.api.project.server.notification.PreProjectDeletedEvent; import org.eclipse.che.api.project.server.notification.ProjectDeletedEvent; import org.eclipse.che.api.project.shared.RegisteredProject; import org.eclipse.che.api.watcher.server.FileWatcherManager; @@ -59,6 +60,8 @@ private void registerOperation() { private void consumeDelete(String wsPath) { try { if (projectConfigRegistry.isRegistered(wsPath)) { + eventService.publish(new PreProjectDeletedEvent(wsPath)); + projectConfigRegistry .getAll(wsPath) .stream()