From 964a93b080e6f9ba5e409388e9e3ffedc62e0cae Mon Sep 17 00:00:00 2001 From: Evgen Vidolob Date: Mon, 26 Sep 2016 16:48:56 +0300 Subject: [PATCH] #2509 create project.json file in C# project (#2587) * #2509 create project.json file in C# project --- .../che-plugin-csharp-lang-server/pom.xml | 12 ++++ .../plugin/csharp/inject/CSharpModule.java | 5 ++ .../csharp/projecttype/CSharpProjectType.java | 2 +- .../CreateNetCoreProjectHandler.java | 60 +++++++++++++++++++ .../src/main/resources/project.json.default | 17 ++++++ 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java create mode 100644 plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/resources/project.json.default diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml b/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml index be999a9cdec..20e3d2fd1f8 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml @@ -24,6 +24,10 @@ false + + com.google.guava + guava + com.google.inject guice @@ -32,6 +36,10 @@ com.google.inject.extensions guice-multibindings + + org.eclipse.che.core + che-core-api-core + org.eclipse.che.core che-core-api-project @@ -44,5 +52,9 @@ org.eclipse.che.plugin che-plugin-csharp-lang-shared + + org.slf4j + slf4j-api + diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/inject/CSharpModule.java b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/inject/CSharpModule.java index 76817d3a988..ca859731029 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/inject/CSharpModule.java +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/inject/CSharpModule.java @@ -13,9 +13,11 @@ import com.google.inject.AbstractModule; import com.google.inject.multibindings.Multibinder; +import org.eclipse.che.api.project.server.handlers.ProjectHandler; import org.eclipse.che.api.project.server.type.ProjectTypeDef; import org.eclipse.che.inject.DynaModule; import org.eclipse.che.plugin.csharp.projecttype.CSharpProjectType; +import org.eclipse.che.plugin.csharp.projecttype.CreateNetCoreProjectHandler; /** * @author Anatolii Bazko @@ -26,5 +28,8 @@ public class CSharpModule extends AbstractModule { protected void configure() { Multibinder projectTypeMultibinder = Multibinder.newSetBinder(binder(), ProjectTypeDef.class); projectTypeMultibinder.addBinding().to(CSharpProjectType.class); + + Multibinder projectHandlersMultibinder = Multibinder.newSetBinder(binder(), ProjectHandler.class); + projectHandlersMultibinder.addBinding().to(CreateNetCoreProjectHandler.class); } } diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CSharpProjectType.java b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CSharpProjectType.java index b1d9cab1761..ae41674df6a 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CSharpProjectType.java +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CSharpProjectType.java @@ -22,7 +22,7 @@ public class CSharpProjectType extends ProjectTypeDef { @Inject public CSharpProjectType() { - super(Constants.CSHARP_PROJECT_TYPE_ID, "C#", true, false, true); + super(Constants.CSHARP_PROJECT_TYPE_ID, "C# .NET Core", true, false, true); addConstantDefinition(Constants.LANGUAGE, "language", Constants.CSHARP_LANG); } } diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java new file mode 100644 index 00000000000..a150e57bfab --- /dev/null +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2012-2016 Codenvy, S.A. + * 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: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.plugin.csharp.projecttype; + +import org.eclipse.che.api.core.ConflictException; +import org.eclipse.che.api.core.ForbiddenException; +import org.eclipse.che.api.core.ServerException; +import org.eclipse.che.api.project.server.FolderEntry; +import org.eclipse.che.api.project.server.handlers.CreateProjectHandler; +import org.eclipse.che.api.project.server.type.AttributeValue; +import org.eclipse.che.plugin.csharp.shared.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.Map; + +import static com.google.common.io.Resources.getResource; +import static com.google.common.io.Resources.toByteArray; + +/** + * @author Evgen Vidolob + */ +public class CreateNetCoreProjectHandler implements CreateProjectHandler { + + private static final Logger LOG = LoggerFactory.getLogger(CreateNetCoreProjectHandler.class); + + private final String PROJECT_FILE_NAME = "project.json"; + + + @Override + public void onCreateProject(FolderEntry baseFolder, Map attributes, Map options) + throws ForbiddenException, ConflictException, ServerException { + baseFolder.createFile(PROJECT_FILE_NAME, getProjectContent()); + + } + + private byte[] getProjectContent() { + String filename = "project.json.default"; + try { + return toByteArray(getResource(filename)); + } catch (IOException e) { + LOG.warn("File %s not found so content of %s will be empty.", filename, PROJECT_FILE_NAME); + return new byte[0]; + } + } + + @Override + public String getProjectType() { + return Constants.CSHARP_PROJECT_TYPE_ID; + } +} diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/resources/project.json.default b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/resources/project.json.default new file mode 100644 index 00000000000..452b99407a7 --- /dev/null +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/resources/project.json.default @@ -0,0 +1,17 @@ +{ + "version": "1.0.0-*", + "buildOptions": { + "emitEntryPoint": true + }, + "dependencies": { + "Microsoft.NETCore.App": { + "type": "platform", + "version": "1.0.0-rc2-3002702" + } + }, + "frameworks": { + "netcoreapp1.0": { + "imports": "dnxcore50" + } + } +} \ No newline at end of file