From c1e2d4b8169eeb0bda1de930c8d94d1332e9cf8b Mon Sep 17 00:00:00 2001 From: Mukhtar Haji Date: Tue, 27 Jun 2017 12:16:34 +0100 Subject: [PATCH] Manually generate boilerplate for Java Maven This will eventually be replaced with something like Maven archetypes. --- fn/langs/java_maven.go | 92 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/fn/langs/java_maven.go b/fn/langs/java_maven.go index 83c1fe96c..869e49853 100644 --- a/fn/langs/java_maven.go +++ b/fn/langs/java_maven.go @@ -8,6 +8,7 @@ import ( "bytes" "strings" "net/url" + "io/ioutil" ) // JavaMavenLangHelper provides a set of helper methods for the build lifecycle of Java Maven projects @@ -90,3 +91,94 @@ func (lh *JavaMavenLangHelper) PreBuild() error { func (lh *JavaMavenLangHelper) Entrypoint() string { return "java -cp app/*:lib/* com.oracle.faas.runtime.EntryPoint com.example.faas.HelloFunction::handleRequest" } + +// HasPreBuild returns whether the Java Maven runtime has boilerplate that can be generated. +func (lh *JavaMavenLangHelper) HasBoilerplate() bool { return true } + +// GenerateBoilerplate will generate function boilerplate for a Java Maven runtime +func (lh *JavaMavenLangHelper) GenerateBoilerplate() error { + wd, err := os.Getwd() + if err != nil { + return err + } + + pathToPomFile := filepath.Join(wd, "pom.xml") + if exists(pathToPomFile) { + return ErrBoilerplateExists + } + + if err := ioutil.WriteFile(pathToPomFile, []byte(pomFile), os.FileMode(0644)); err != nil { + return err + } + + helloJavaFunctionFileDir := filepath.Join(wd, "src/main/java/com/example/faas") + if err = os.MkdirAll(helloJavaFunctionFileDir, os.FileMode(0755)); err != nil { + os.Remove(pathToPomFile) + return err + } + + helloJavaFunctionFile := filepath.Join(helloJavaFunctionFileDir, "HelloFunction.java") + return ioutil.WriteFile(helloJavaFunctionFile, []byte(helloJavaFunctionBoilerplate), os.FileMode(0644)) +} + + +/* TODO temporarily generate maven project boilerplate from hardcoded values. + Will eventually move to using a maven archetype. +*/ + +const ( + pomFile = ` + + 4.0.0 + + UTF-8 + + com.example.faas + hello + 1.0.0-SNAPSHOT + + + + nexus-box + http://10.167.103.241:8081/repository/maven-snapshots/ + + + + + + com.oracle.faas + fdk + 1.0.0-SNAPSHOT + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + +` + + helloJavaFunctionBoilerplate = `package com.example.faas; + +public class HelloFunction { + + public String handleRequest(String input) { + String name = (input == null || input.isEmpty()) ? "world" : input; + + return "Hello, " + name + "!"; + } + +}` +)