From 72603ac855a42bab3409f89658b4c01e7e461e60 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 30 Nov 2016 15:26:02 +0100 Subject: [PATCH] added eclipse language server plugin and feature for cloud foundry to tycho build --- .../pom.xml | 22 +---- .../META-INF/MANIFEST.MF | 6 +- .../build.properties | 4 +- .../plugin.xml | 18 ++++ .../pom.xml | 49 +++++++---- .../CloudFoundryManifestLanguageServer.java | 83 +++++++++++++++++++ .../ide/cloudfoundry/server/Constants.java | 20 +++++ .../ide/properties/servers/Constants.java | 13 +++ .../category.xml | 4 + eclipse-language-servers/pom.xml | 6 +- 10 files changed, 186 insertions(+), 39 deletions(-) create mode 100644 eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/plugin.xml create mode 100644 eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/CloudFoundryManifestLanguageServer.java create mode 100644 eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/Constants.java diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server.feature/pom.xml b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server.feature/pom.xml index 30683f0ce..400001a81 100644 --- a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server.feature/pom.xml +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server.feature/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.springframework.boot.ide - org.springframework.boot.ide + org.springframework.boot.ide.servers 4.0.0-SNAPSHOT ../pom.xml @@ -12,24 +12,4 @@ org.springframework.boot.ide.cloudfoundry.server.feature eclipse-feature - - - - org.eclipse.tycho - tycho-p2-plugin - ${tycho-version} - - - second-generate-p2-metadata - - p2-metadata - - verify - - - - - - - diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/META-INF/MANIFEST.MF index caffeba3a..6c4ebee7d 100644 --- a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/META-INF/MANIFEST.MF +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/META-INF/MANIFEST.MF @@ -1,6 +1,10 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Server -Bundle-SymbolicName: org.springframework.boot.ide.cloudfoundry.server +Bundle-SymbolicName: org.springframework.boot.ide.cloudfoundry.server;singleton:=true Bundle-Version: 4.0.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.eclipse.languageserver;bundle-version="0.1.0", + org.eclipse.jdt.launching;bundle-version="3.9.0", + org.eclipse.core.runtime;bundle-version="3.12.0" +Import-Package: org.osgi.framework diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/build.properties b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/build.properties index 34d2e4d2d..3b7db0f69 100644 --- a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/build.properties +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/build.properties @@ -1,4 +1,6 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ - . + .,\ + plugin.xml,\ + servers/ diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/plugin.xml b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/plugin.xml new file mode 100644 index 000000000..1ef77e33a --- /dev/null +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/plugin.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/pom.xml b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/pom.xml index 276937df8..f5f632bfc 100644 --- a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/pom.xml +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/pom.xml @@ -1,35 +1,56 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 org.springframework.boot.ide - org.springframework.boot.ide + org.springframework.boot.ide.servers 4.0.0-SNAPSHOT ../pom.xml - org.springframework.boot.ide.cloudfoundry.server - eclipse-plugin + org.springframework.boot.ide.cloudfoundry.server + eclipse-plugin - + + + org.springframework.ide.vscode + vscode-manifest-yaml + 0.0.1-SNAPSHOT + + + + - org.eclipse.tycho - tycho-p2-plugin - ${tycho-version} + org.apache.maven.plugins + maven-dependency-plugin + 2.10 - second-generate-p2-metadata + copy + prepare-package - p2-metadata + copy - verify + + + + org.springframework.ide.vscode + vscode-manifest-yaml + true + ${project.build.directory}/../servers + + + true + true + - + + diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/CloudFoundryManifestLanguageServer.java b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/CloudFoundryManifestLanguageServer.java new file mode 100644 index 000000000..4cf81cf15 --- /dev/null +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/CloudFoundryManifestLanguageServer.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2016 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.boot.ide.cloudfoundry.server; + +import java.io.File; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jdt.internal.launching.StandardVMType; +import org.eclipse.jdt.launching.IVMInstall; +import org.eclipse.jdt.launching.JavaRuntime; +import org.eclipse.languageserver.ProcessStreamConnectionProvider; +import org.osgi.framework.Bundle; + +/** + * @author Martin Lippert + */ +@SuppressWarnings("restriction") +public class CloudFoundryManifestLanguageServer extends ProcessStreamConnectionProvider { + + public CloudFoundryManifestLanguageServer() { + List commands = new ArrayList<>(); + commands.add(getJDKLocation()); + commands.add("-jar"); + commands.add(getLanguageServerJARLocation()); + + String workingDir = getWorkingDirLocation(); + + setCommands(commands); + setWorkingDirectory(workingDir); + } + + protected String getJDKLocation() { + IVMInstall jdk = JavaRuntime.getDefaultVMInstall(); + File javaExecutable = StandardVMType.findJavaExecutable(jdk.getInstallLocation()); + return javaExecutable.getAbsolutePath(); + } + + protected String getLanguageServerJARLocation() { + String languageServer = "vscode-manifest-yaml-0.0.1-SNAPSHOT.jar"; + + Bundle bundle = Platform.getBundle(Constants.PLUGIN_ID); + File dataFile = bundle.getDataFile(languageServer); + if (!dataFile.exists()) { + try { + copyLanguageServerJAR(); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + return dataFile.getAbsolutePath(); + } + + protected String getWorkingDirLocation() { + // TODO: identify a reasonable working directory for the language server process + return System.getProperty("user.dir"); + } + + protected void copyLanguageServerJAR() throws Exception { + Bundle bundle = Platform.getBundle(Constants.PLUGIN_ID); + InputStream stream = FileLocator.openStream( bundle, new Path("servers/vscode-manifest-yaml-0.0.1-SNAPSHOT.jar"), false ); + + File dataFile = bundle.getDataFile("vscode-manifest-yaml-0.0.1-SNAPSHOT.jar"); + Files.copy(stream, dataFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + } + +} diff --git a/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/Constants.java b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/Constants.java new file mode 100644 index 000000000..d9ac69981 --- /dev/null +++ b/eclipse-language-servers/org.springframework.boot.ide.cloudfoundry.server/src/org/springframework/boot/ide/cloudfoundry/server/Constants.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2016 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.boot.ide.cloudfoundry.server; + +/** + * @author Martin Lippert + */ +public class Constants { + + public static final String PLUGIN_ID = "org.springframework.boot.ide.cloudfoundry.server"; + +} diff --git a/eclipse-language-servers/org.springframework.boot.ide.properties.servers/src/org/springframework/boot/ide/properties/servers/Constants.java b/eclipse-language-servers/org.springframework.boot.ide.properties.servers/src/org/springframework/boot/ide/properties/servers/Constants.java index 7ab0e31d5..1e75215f8 100644 --- a/eclipse-language-servers/org.springframework.boot.ide.properties.servers/src/org/springframework/boot/ide/properties/servers/Constants.java +++ b/eclipse-language-servers/org.springframework.boot.ide.properties.servers/src/org/springframework/boot/ide/properties/servers/Constants.java @@ -1,5 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2016 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ package org.springframework.boot.ide.properties.servers; +/** + * @author Martin Lippert + */ public class Constants { public static final String PLUGIN_ID = "org.springframework.boot.ide.properties.servers"; diff --git a/eclipse-language-servers/org.springframework.boot.ide.servers.repository/category.xml b/eclipse-language-servers/org.springframework.boot.ide.servers.repository/category.xml index 6149f5de1..298ae4fb7 100644 --- a/eclipse-language-servers/org.springframework.boot.ide.servers.repository/category.xml +++ b/eclipse-language-servers/org.springframework.boot.ide.servers.repository/category.xml @@ -6,6 +6,10 @@ + + + + diff --git a/eclipse-language-servers/pom.xml b/eclipse-language-servers/pom.xml index ef237a8b4..cd63148d0 100644 --- a/eclipse-language-servers/pom.xml +++ b/eclipse-language-servers/pom.xml @@ -29,8 +29,10 @@ org.springframework.boot.ide.properties.servers org.springframework.boot.ide.properties.servers.feature - + + org.springframework.boot.ide.cloudfoundry.server + org.springframework.boot.ide.cloudfoundry.server.feature + org.springframework.boot.ide.servers.repository