From c272fdc0c9a92e67b7e23d486844dfd3a8b9faae Mon Sep 17 00:00:00 2001 From: jmeis Date: Tue, 6 Aug 2019 17:34:21 -0500 Subject: [PATCH 1/3] feat(sdkgen): remove sdkgen --- .travis.yml | 8 +- generator-java/generators/app/index.js | 21 +- .../java/application/openapi/ProductApi.java | 59 - .../java/application/openapi/ProductsApi.java | 46 - .../spring/src/main/java/io/swagger/Info.java | 2 - .../app/templates/blank/spring/control.js | 3 - generator-java/generators/liberty/exports.js | 1 - generator-java/generators/liberty/index.js | 13 - .../generators/liberty/lib/assert.openapi.js | 53 - .../generators/liberty/lib/openapi.js | 163 --- .../liberty/templates/build/config.js | 13 - .../integration/generator.openapi.test.js | 119 -- generator-java/generators/prompts/patterns.js | 8 - generator-java/generators/spring/exports.js | 1 - generator-java/generators/spring/index.js | 21 - .../generators/spring/lib/assert.openapi.js | 104 -- .../generators/spring/lib/openapi.js | 159 --- .../resources/openapi/basicswagger.json | 1043 ----------------- .../resources/openapi/basicswagger1.json | 68 -- .../spring/templates/build/config.js | 6 - .../src/main/resources/application.properties | 5 - .../main/java/application/SBApplication.java | 11 - .../integration/generator.openapi.test.js | 118 -- generator-java/index.js | 2 - .../lib/assert/internal/assert.liberty.js | 9 - .../lib/assert/internal/assert.spring.js | 13 - .../lib/assert/starters/assert.bff.js | 88 -- .../lib/assert/starters/assert.openapi.js | 56 - generator-java/package-lock.json | 2 +- generator-java/package.json | 2 - .../endToEnd/generator.openapi.e2e.test.js | 76 -- .../integration/generator.openapi.test.js | 182 --- 32 files changed, 6 insertions(+), 2469 deletions(-) delete mode 100644 generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductApi.java delete mode 100644 generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductsApi.java delete mode 100644 generator-java/generators/liberty/lib/assert.openapi.js delete mode 100644 generator-java/generators/liberty/lib/openapi.js delete mode 100644 generator-java/generators/liberty/test/integration/generator.openapi.test.js delete mode 100644 generator-java/generators/spring/lib/assert.openapi.js delete mode 100644 generator-java/generators/spring/lib/openapi.js delete mode 100644 generator-java/generators/spring/resources/openapi/basicswagger.json delete mode 100644 generator-java/generators/spring/resources/openapi/basicswagger1.json delete mode 100644 generator-java/generators/spring/test/integration/generator.openapi.test.js delete mode 100644 generator-java/lib/assert/starters/assert.bff.js delete mode 100644 generator-java/lib/assert/starters/assert.openapi.js delete mode 100644 generator-java/test/endToEnd/generator.openapi.e2e.test.js delete mode 100644 generator-java/test/integration/generator.openapi.test.js diff --git a/.travis.yml b/.travis.yml index 8eb473ec..798f2034 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: java jdk: - openjdk10 before_install: - - nvm install 8.9.4 + - nvm install 10.16.2 - cd ./generator-java - npm i -g makeshift && makeshift -r https://registry.npmjs.org - npm i -g standard-version @@ -11,9 +11,9 @@ install: - npm run install_linked_dependencies before_script: - cd /tmp - - wget http://services.gradle.org/distributions/gradle-5.0-bin.zip - - unzip -qq gradle-5.0-bin.zip - - export GRADLE_HOME=/tmp/gradle-5.0 + - wget http://services.gradle.org/distributions/gradle-5.5.1-bin.zip + - unzip -qq gradle-5.5.1-bin.zip + - export GRADLE_HOME=/tmp/gradle-5.5.1 - wget https://github.com/github/hub/releases/download/v2.5.1/hub-linux-386-2.5.1.tgz - tar -xvzf hub-linux-386-2.5.1.tgz - mv hub-linux-386-2.5.1 hub diff --git a/generator-java/generators/app/index.js b/generator-java/generators/app/index.js index c181a9ee..85743a53 100644 --- a/generator-java/generators/app/index.js +++ b/generator-java/generators/app/index.js @@ -20,7 +20,6 @@ const Generator = require('yeoman-generator') const fspath = require('path') const fs = require('fs') const extend = require('extend') -const yml = require('js-yaml') const Defaults = require('../lib/defaults') const EnablementContext = require('../lib/enablementContext') @@ -158,25 +157,7 @@ module.exports = class extends Generator { if (config.frameworkType === 'liberty' && config.createType === 'bff/liberty') { config.enableApiDiscovery = true } - if (config.frameworkType === 'spring' && config.createType === 'bff/spring') { - const resource = this._loadresource('bff/swagger.yaml'); - const bffSwagger = JSON.stringify(yml.safeLoad(resource)); - if (config.bluemix) { - if (config.bluemix.openApiServers) { - config.bluemix.openApiServers.push({'spec': bffSwagger}) - } else { - config.bluemix.openApiServers = [{'spec': bffSwagger}] - } - } else { - config.bluemix = { - openApiServers: [ - { - 'spec': bffSwagger - } - ] - } - } - } + //configure this generator and then pass that down through the contexts const control = new Control(fspath.resolve(config.templateRoot, config.createType), config) this.paths = control.getComposition() diff --git a/generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductApi.java b/generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductApi.java deleted file mode 100644 index e1515d66..00000000 --- a/generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductApi.java +++ /dev/null @@ -1,59 +0,0 @@ -package application.openapi; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - -import application.model.Product; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; - -@Path("/product") - -@Api(description = "the product API") -@Consumes({ "text/plain" }) -@Produces({ "application/json" }) -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJAXRSSpecServerCodegen", date = "2017-03-12T23:51:45.548Z") - -public class ProductApi { - - @DELETE - @Path("/{id}") - @Consumes({ "text/plain" }) - @Produces({ "application/json" }) - @ApiOperation(value = "", notes = "Delete product by ID", response = Product.class, tags={ "products", }) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "One product", response = Product.class) }) - public Response delete(@PathParam("id") Long id) { - return Response.ok().entity("{}").build(); - } - - @GET - @Path("/{id}") - @Consumes({ "text/plain" }) - @Produces({ "application/json" }) - @ApiOperation(value = "", notes = "Get product by ID", response = Product.class, tags={ "products", }) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "One product", response = Product.class) }) - public Response get(@PathParam("id") Long id) { - return Response.ok().entity("{}").build(); - } - - @PUT - @Path("/{id}") - @Consumes({ "text/plain" }) - @Produces({ "application/json" }) - @ApiOperation(value = "", notes = "Update product by ID", response = Product.class, tags={ "products" }) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "One product", response = Product.class) }) - public Response update(@PathParam("id") Long id,String productName) { - return Response.ok().entity("{}").build(); - } -} diff --git a/generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductsApi.java b/generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductsApi.java deleted file mode 100644 index 725c0f54..00000000 --- a/generator-java/generators/app/templates/bff/liberty/src/main/java/application/openapi/ProductsApi.java +++ /dev/null @@ -1,46 +0,0 @@ -package application.openapi; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - -import application.model.Product; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; - -@Path("/products") - -@Api(description = "the products API") -@Consumes({ "text/plain" }) -@Produces({ "application/json" }) -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJAXRSSpecServerCodegen", date = "2017-03-12T23:51:45.548Z") - -public class ProductsApi { - - @POST - - @Consumes({ "text/plain" }) - @Produces({ "application/json" }) - @ApiOperation(value = "", notes = "Add new product", response = Product.class, tags={ "products", }) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "One product", response = Product.class) }) - public Response add(String productName) { - return Response.ok().entity("{}").build(); - } - - @GET - - @Consumes({ "text/plain" }) - @Produces({ "application/json" }) - @ApiOperation(value = "", notes = "Get all products", response = Product.class, responseContainer = "List", tags={ "products" }) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "List of all products", response = Product.class, responseContainer = "List") }) - public Response getAll() { - return Response.ok().entity("{}").build(); - } -} diff --git a/generator-java/generators/app/templates/bff/spring/src/main/java/io/swagger/Info.java b/generator-java/generators/app/templates/bff/spring/src/main/java/io/swagger/Info.java index 3a47d43b..0bb017fe 100644 --- a/generator-java/generators/app/templates/bff/spring/src/main/java/io/swagger/Info.java +++ b/generator-java/generators/app/templates/bff/spring/src/main/java/io/swagger/Info.java @@ -10,8 +10,6 @@ public class Info { @EventListener(ApplicationReadyEvent.class) public void contextRefreshedEvent() { System.out.println("The following endpoints are available by default :-"); - System.out.println(" OpenAPI UI : http://localhost:8080/swagger-ui.html"); - System.out.println(" OpenAPI json : http://localhost:8080/swagger/api"); } } \ No newline at end of file diff --git a/generator-java/generators/app/templates/blank/spring/control.js b/generator-java/generators/app/templates/blank/spring/control.js index 61dee0ea..483ac46e 100644 --- a/generator-java/generators/app/templates/blank/spring/control.js +++ b/generator-java/generators/app/templates/blank/spring/control.js @@ -1,8 +1,5 @@ { "excludes" : [ -{{#if bluemix.openApiServers}} - "src/main/java/application/SBApplication.java", -{{/if}} ".classpath", ".project" ], diff --git a/generator-java/generators/liberty/exports.js b/generator-java/generators/liberty/exports.js index 4598a0ec..1e87b429 100644 --- a/generator-java/generators/liberty/exports.js +++ b/generator-java/generators/liberty/exports.js @@ -20,7 +20,6 @@ module.exports = { integrationAsserts : { technologies : require('./lib/assert.technologies'), liberty : require('./lib/assert.liberty'), - openapi : require('./lib/assert.openapi') }, defaults: require('./lib/defaults'), prompts: [require('./prompts/liberty')] diff --git a/generator-java/generators/liberty/index.js b/generator-java/generators/liberty/index.js index 6d028ed3..6505b9ae 100644 --- a/generator-java/generators/liberty/index.js +++ b/generator-java/generators/liberty/index.js @@ -20,7 +20,6 @@ const constant = require('./lib/constant') const Generator = require('yeoman-generator'); const extend = require('extend'); const Defaults = require('./lib/defaults'); -const OpenApi = require('./lib/openapi'); const defaults = new Defaults(); const logId = require('../../package.json').name; @@ -34,7 +33,6 @@ module.exports = class extends Generator { this.logger.writeToLog(`${logId}:constructor - context`, JSON.stringify(opts.context)); this.patterns.push('picnmix'); this.conf.addMissing(opts, defaults); - this.openApiDir = []; this.conf.enableApiDiscovery = this.config.enableApiDiscovery || false; if (this.options.libertyVersion === 'beta' || opts.context.conf.libertyVersion === 'beta') { @@ -58,14 +56,6 @@ module.exports = class extends Generator { if (this.conf.technologies.includes('swagger')) { this.conf.enableApiDiscovery = true; } - this.openApiDir = []; - if (this.conf.bluemix && this.conf.bluemix.openApiServers && this.conf.bluemix.backendPlatform == 'JAVA') { - this.conf.enableApiDiscovery = true; - return OpenApi.generate(this.conf.bluemix.openApiServers) - .then(dir => { - this.openApiDir = dir; - }); - } } writing() { @@ -75,9 +65,6 @@ module.exports = class extends Generator { if (this.conf.buildType == 'gradle') { this.conf.bxBuildCmd = '`gradle build cfPush -PcfOrg=[your email address] -PcfUsername=[your username] -PcfPassword=[your password]`'; } - if (this.openApiDir.length > 0) { - OpenApi.writeFiles(this.openApiDir, this); - } return this.defaultWriter(this); //use the default writer supplied by the context. } diff --git a/generator-java/generators/liberty/lib/assert.openapi.js b/generator-java/generators/liberty/lib/assert.openapi.js deleted file mode 100644 index 085ac11c..00000000 --- a/generator-java/generators/liberty/lib/assert.openapi.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Provides the assertions for testing Liberty code and config from this generator - */ - -'use strict' - -const assert = require('yeoman-assert') -const example = require('../resources/openapi/basicswagger.json') -const example1 = require('../resources/openapi/basicswagger1.json') - -function AssertOpenApi () { - this.assert = function (exists, examples) { - const check = exists ? assert.file : assert.noFile - const desc = exists ? 'creates openapi files' : 'does not create openapi files' - if (examples.includes('example')) { - it(desc, function () { - check(['src/main/java/io/swagger/model/CollectiveInfo.java', 'src/main/java/io/swagger/api/IbmApi.java']) - assert.noFile('src/main/java/io/swagger/api/RestApplication.java') - }) - } - if (examples.includes('example1')) { - it(desc, function () { - check(['src/main/java/io/swagger/model/Pet1.java', 'src/main/java/io/swagger/api/Pets1Api.java']) - assert.noFile('src/main/java/io/swagger/api/RestApplication.java') - }) - } - } - - this.getExample = function () { - return {name: 'example', value: example} - } - this.getExample1 = function () { - return {name: 'example1', value: example1} - } -} - -module.exports = exports = AssertOpenApi diff --git a/generator-java/generators/liberty/lib/openapi.js b/generator-java/generators/liberty/lib/openapi.js deleted file mode 100644 index c48dc1b4..00000000 --- a/generator-java/generators/liberty/lib/openapi.js +++ /dev/null @@ -1,163 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// module for generating code from open api document - -'use strict'; - -const request = require('request') -const Promise = require('bluebird') -const unzip = require('unzip2') -const requestAsync = Promise.promisify(request) -const fs = require('fs') -const path = require('path') -const os = require('os') -const log = require('../../../lib/common').log -Promise.promisifyAll(request) - -const sdkGenURL = 'https://us-south.devx.cloud.ibm.com/sdkgen/api/generator/' -const sdkGenCheckDelay = 3000 - -let logger = log - -const generate = function (docs, parentLogger) { - logger = parentLogger || log - logger.writeToLog('Liberty Generator generating code from open api document: ' + JSON.stringify(docs,null,2)) - const openApiDir = [] - const p = new Promise((resolve) => { - let i = 0 - docs.forEach(doc => { - generateFromDoc(doc.spec) - .then(sdk => { - openApiDir.push(sdk) - if (++i === docs.length) { - resolve(openApiDir) - } - }) - }) - }) - return p -} - -const generateFromDoc = function (doc) { - return performSDKGenerationAsync('libertySDK', 'server_java_jaxrs_spec', doc) - .then(generatedID => { - logger.writeToLog('Liberty Generator generated code from open api document with id ' + generatedID) - return getServerSDKAsync('libertySDK', generatedID) - }) -} - -const writeFiles = function (dirs, generator) { - dirs.forEach(sdk => { - generator.fs.copy(path.join(sdk.tempDir, 'generated-code', 'JavaJaxRS-Spec', 'src', 'gen'), generator.destinationPath('src/main')) - generator.fs.delete(generator.destinationPath('src/main/java/io/swagger/api/RestApplication.java')) - - }) -} - -const performSDKGenerationAsync = function (sdkName, sdkType, fileContent) { - const startGenURL = `${sdkGenURL}${sdkName}/${sdkType}` - logger.writeToLog(`starting SDK generation job for ${sdkName} using ${startGenURL}`) - return request.postAsync({ - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Openapi-Opts': '' - }, - url: startGenURL, - body: fileContent - }) - .then(function (response) { - const body = JSON.parse(response.body) - logger.writeToLog('SDK generation job response body: ' + JSON.stringify(body, null, 2)) - if (body.job && body.job.id) { - return body.job.id - } - throw new Error('SDK generation error:', response.statusCode, response.statusMessage, body.message) - }) - .tap(generatedID => logger.writeToLog(`SDK generation job for ${sdkName} started with id ${generatedID}`)) - .then(generatedID => checkUntilFinished(generatedID)) - - function checkUntilFinished (generatedID, count) { - count = count || 1; - logger.writeToLog(`#${count} checking status of SDK generation job with id ${generatedID} (for ${sdkName})`); - return getStatusAsync(generatedID) - .then(finished => { - if (finished) { - logger.writeToLog(`SDK generation job with id ${generatedID} (for ${sdkName}) is complete`) - return generatedID - } else { - if (count <= 10) { - return Promise.delay(sdkGenCheckDelay).then(() => checkUntilFinished(generatedID, count + 1)) - } else { - throw new Error('Timeout error, couldn\'t generate SDK within timeout.') - } - } - }) - } -} - -function getStatusAsync (generatedID) { - const getStatusURL = `${sdkGenURL}${generatedID}/status` - return requestAsync({ - headers: {'Accept': 'application/json'}, - url: getStatusURL - }) - .then(response => { - logger.writeToLog('SDK generation status response: ' + JSON.stringify(response, null, 2)) - const status = JSON.parse(response.body).status - switch (status) { - case 'FINISHED': - return true - - case 'VALIDATION_FAILED': - case 'FAILED': - throw new Error('SDK generator creation failed with status: ', status) - - default: - return false - } - }) -} - -const getServerSDKAsync = function (sdkName, generatedID) { - const serverDownloadURL = sdkGenURL + generatedID - // Use the non-async version of request.get() here because - // we are going to use .pipe() to stream the data to disk - return new Promise((resolve, reject) => { - const {sep} = require('path') - const tempDir = fs.mkdtempSync(os.tmpdir() + sep) - logger.writeToLog(`starting server SDK download and unzip for ${sdkName} from ${serverDownloadURL} to ${tempDir}`) - request.get({ - headers: {'Accept': 'application/zip'}, - url: serverDownloadURL - }) - .on('error', err => { - reject(new Error('Getting server SDK failed with error: ', err.message)) - }) - .pipe(unzip.Extract({path: tempDir})) - .on('close', () => { - logger.writeToLog(`finished server SDK download and unzip for ${sdkName} from ${serverDownloadURL} to ${tempDir}`) - - resolve({tempDir: tempDir, dirname: sdkName}) - }) - }) -} - -module.exports = { - generate: generate, - writeFiles: writeFiles -} diff --git a/generator-java/generators/liberty/templates/build/config.js b/generator-java/generators/liberty/templates/build/config.js index 56407228..f3653b99 100644 --- a/generator-java/generators/liberty/templates/build/config.js +++ b/generator-java/generators/liberty/templates/build/config.js @@ -1,17 +1,4 @@ { "dependencies" : [ -{{#if bluemix.openApiServers}} - {"groupId" : "io.swagger", "artifactId" : "swagger-annotations", "version" : "1.5.3", "scope" : "provided"}, - {"groupId" : "javax.ws.rs", "artifactId" : "javax.ws.rs-api", "version" : "2.0.1", "scope" : "provided"}, - {"groupId" : "javax.validation", "artifactId" : "validation-api", "version" : "1.1.0.Final", "scope" : "provided"}, - {"groupId" : "com.fasterxml.jackson.core", "artifactId" : "jackson-annotations", "version" : "2.9.0", "scope" : "provided"}, - {"groupId" : "com.ibm.websphere.appserver.api", "artifactId" : "com.ibm.websphere.appserver.api.jaxrs20", "version" : "1.0.18", "scope" : "provided"} -{{/if}} - ], - "frameworkDependencies" : [ -{{#if bluemix.openApiServers}} - {"feature" : "apiDiscovery-1.0"}, - {"feature" : "jaxrs-2.0"} -{{/if}} ] } \ No newline at end of file diff --git a/generator-java/generators/liberty/test/integration/generator.openapi.test.js b/generator-java/generators/liberty/test/integration/generator.openapi.test.js deleted file mode 100644 index 1d1e1655..00000000 --- a/generator-java/generators/liberty/test/integration/generator.openapi.test.js +++ /dev/null @@ -1,119 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Tests the Liberty aspects generator - */ -'use strict' -const path = require('path') -const helpers = require('yeoman-test') -const AssertOpenApi = require('../../lib/assert.openapi') -const common = require('../../../../lib/common') -const openapidoc = require('../../resources/openapi/basicswagger.json') -const openapidoc1 = require('../../resources/openapi/basicswagger1.json') - -const ARTIFACTID = 'artifact.0.1' -const GROUPID = 'test.group' -const VERSION = '1.0.0' -const APPNAME = 'testApp' - -class Options extends AssertOpenApi { - - constructor (buildType, createType, bluemix) { - super() - this.conf = { - buildType: buildType, - createType: createType, - appName: APPNAME, - groupId: GROUPID, - artifactId: ARTIFACTID, - version: VERSION - } - if (bluemix) { - this.conf.bluemix = bluemix - } - const ctx = new common.context('test', this.conf) - this.options = { - context: ctx - } - this.before = function () { - return helpers.run(path.join(__dirname, '../../generators/app')) - .withOptions(this.options) - .toPromise() - } - } -} - -const buildTypes = ['gradle', 'maven'] - -describe('java liberty generator : Liberty server integration test', function () { - this.timeout('40000') - buildTypes.forEach(buildType => { - describe('generate project without openapi code with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'JAVA' - } - const options = new Options(buildType, 'basic/liberty', bluemix) - before(options.before.bind(options)) - options.assert(false, []) - }) - describe('generate project with openapi code with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'JAVA', - 'openApiServers': [ - { - 'spec': JSON.stringify(openapidoc) - } - ] - } - const options = new Options(buildType, 'basic/liberty', bluemix) - before(options.before.bind(options)) - options.assert(true, ['example']) - }) - describe('generate project with two identical openapi code docs with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'JAVA', - 'openApiServers': [ - { - 'spec': JSON.stringify(openapidoc) - }, - { - 'spec': JSON.stringify(openapidoc) - } - ] - } - const options = new Options(buildType, 'basic/liberty', bluemix) - before(options.before.bind(options)) - options.assert(true, ['example']) - }) - describe('generate project with two different openapi code docs with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'JAVA', - 'openApiServers': [ - { - 'spec': JSON.stringify(openapidoc) - }, - { - 'spec': JSON.stringify(openapidoc1) - } - ] - } - const options = new Options(buildType, 'basic/liberty', bluemix) - before(options.before.bind(options)) - options.assert(true, ['example', 'example1']) - }) - }) -}) diff --git a/generator-java/generators/prompts/patterns.js b/generator-java/generators/prompts/patterns.js index 7ae2a8a2..ffc16ffe 100644 --- a/generator-java/generators/prompts/patterns.js +++ b/generator-java/generators/prompts/patterns.js @@ -85,14 +85,6 @@ Extension.prototype.getQuestions = function () { name: 'Basic Web : a basic Spring web application', value: 'basicweb/spring', short: 'Basic Spring web application' - }, { - name: 'BFF : Backend For Frontend (generate Microprofile/JavaEE code from Swagger/OpenAPI)', - value: 'bff/liberty', - short: 'Backend For Frontend' - }, { - name: 'BFF : Backend For Frontend (generate Spring code from Swagger/OpenAPI)', - value: 'bff/spring', - short: 'Backend For Frontend' }], default: this.config.createType }, { diff --git a/generator-java/generators/spring/exports.js b/generator-java/generators/spring/exports.js index 4e8f865c..33c78eca 100644 --- a/generator-java/generators/spring/exports.js +++ b/generator-java/generators/spring/exports.js @@ -17,7 +17,6 @@ module.exports = { integrationAsserts : { spring : require('./lib/assert.spring'), - openapi : require('./lib/assert.openapi') }, defaults: require('./lib/defaults'), prompts: [require('./prompts/spring')] diff --git a/generator-java/generators/spring/index.js b/generator-java/generators/spring/index.js index 2688a160..7eb66f46 100644 --- a/generator-java/generators/spring/index.js +++ b/generator-java/generators/spring/index.js @@ -19,7 +19,6 @@ const Generator = require('yeoman-generator'); const extend = require('extend'); const Defaults = require('./lib/defaults'); -const OpenApi = require('./lib/openapi'); const defaults = new Defaults(); const logId = require('../../package.json').name; @@ -33,7 +32,6 @@ module.exports = class extends Generator { extend(this, opts.context); //inject the objects and functions directly into 'this' to make things easy this.logger.writeToLog(`${logId}:constructor - context`, opts.context); this.conf.addMissing(opts, defaults); - this.openApiDir = []; this.logger.writeToLog(`${logId}:constructor - conf (final)`, this.conf); } @@ -46,28 +44,9 @@ module.exports = class extends Generator { configuring() { this.configure(this); - if(this.conf.bluemix && this.conf.bluemix.openApiServers && this.conf.bluemix.backendPlatform == 'SPRING') { - return OpenApi.generate(this.conf.bluemix.openApiServers, this.logger) - .then(dir => { - this.openApiDir = dir - }); - } } writing() { - if(this.openApiDir.length > 0) { - OpenApi.writeFiles(this.openApiDir, this) - const homeControllerPath = this.destinationPath('src/main/java/io/swagger/configuration/HomeController.java') - if (this.fs.exists(homeControllerPath)) { - this.fs.delete(homeControllerPath) - } - if(!(this.conf.createType == 'blank/spring')) { - const springBootApplicationPath = this.destinationPath('src/main/java/io/swagger/Swagger2SpringBoot.java') - if (this.fs.exists(springBootApplicationPath)) { - this.fs.delete(springBootApplicationPath) - } - } - } return this.defaultWriter(this); //use the default writer supplied by the context. } diff --git a/generator-java/generators/spring/lib/assert.openapi.js b/generator-java/generators/spring/lib/assert.openapi.js deleted file mode 100644 index 242ffed8..00000000 --- a/generator-java/generators/spring/lib/assert.openapi.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Provides the assertions for testing Liberty code and config from this generator - */ -'use strict' - -const assert = require('yeoman-assert') -const tests = require('../../../lib/common') -const example = require('../resources/openapi/basicswagger.json') -const example1 = require('../resources/openapi/basicswagger1.json') -const PROP_FILE = 'src/main/resources/application.properties' - -function AssertOpenApi () { - this.assert = function (exists, examples, buildType) { - this.assertHealthFiles() - this.assertCommon(exists, examples, buildType) - } - - this.assertHealthFiles = function () { - it('check health endpoint file is generated', function () { - assert.file('src/main/java/application/rest/HealthEndpoint.java') - }) - } - - this.assertCommon = function (exists, examples, buildType) { - const check = exists ? assert.file : assert.noFile - const checkContents = exists ? assert.fileContent : assert.noFileContent - const desc = exists ? 'creates ' : 'does not create ' - const contentDesc = exists ? ' contains ' : ' does not contain ' - it(desc + 'core openapi files', function () { - check([ - 'src/main/java/io/swagger/RFC3339DateFormat.java', - 'src/main/java/io/swagger/configuration/SwaggerDocumentationConfig.java', - 'src/main/java/application/NotFoundException.java', - 'src/main/java/application/ApiResponseMessage.java', - 'src/main/java/application/ApiOriginFilter.java', - 'src/main/java/application/ApiException.java' - ]) - }) - if (examples.includes('example')) { - it(desc + 'example openapi files', function () { - check([ - 'src/main/java/application/model/User.java', - 'src/main/java/application/model/Tag.java', - 'src/main/java/application/model/Pet.java', - 'src/main/java/application/model/Order.java', - 'src/main/java/application/model/ModelApiResponse.java', - 'src/main/java/application/model/Category.java', - 'src/main/java/application/UserApiController.java', - 'src/main/java/application/UserApi.java', - 'src/main/java/application/StoreApiController.java', - 'src/main/java/application/StoreApi.java', - 'src/main/java/application/PetApiController.java', - 'src/main/java/application/PetApi.java', - ]) - }) - } - if (examples.includes('example1')) { - it(desc + 'example1 openapi files', function () { - check([ - 'src/main/java/application/model/Pet1.java', - 'src/main/java/application/Pets1ApiController.java', - 'src/main/java/application/Pets1Api.java', - ]) - }) - } - - it('check ' + PROP_FILE + contentDesc + 'spring fox and spring jackson settings', function () { - checkContents(PROP_FILE, 'springfox.documentation.swagger.v2.path=/swagger/api') - checkContents(PROP_FILE, 'spring.jackson.date-format=io.swagger.RFC3339DateFormat') - checkContents(PROP_FILE, 'spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false') - }) - const checkDependency = exists ? tests.test(buildType).assertDependency : tests.test(buildType).assertNoDependency - checkDependency('compile', 'io.springfox', 'springfox-swagger2', '2.7.0') - checkDependency('compile', 'io.springfox', 'springfox-swagger-ui', '2.7.0') - checkDependency('compile', 'com.fasterxml.jackson.datatype', 'jackson-datatype-joda') - checkDependency('compile', 'javax.validation', 'validation-api') - } - - this.getExample = function () { - return {name: 'example', value: example} - } - - this.getExample1 = function () { - return {name: 'example1', value: example1} - } -} - -module.exports = exports = AssertOpenApi diff --git a/generator-java/generators/spring/lib/openapi.js b/generator-java/generators/spring/lib/openapi.js deleted file mode 100644 index 0ef0bc7f..00000000 --- a/generator-java/generators/spring/lib/openapi.js +++ /dev/null @@ -1,159 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// module for generating code from open api document - -'use strict'; - -const request = require('request') -const Promise = require('bluebird') -const unzip = require('unzip2') -const requestAsync = Promise.promisify(request) -const fs = require('fs') -const path = require('path') -const os = require('os') -const log = require('../../../lib/common').log -Promise.promisifyAll(request) - -const sdkGenURL = 'https://us-south.devx.cloud.ibm.com/sdkgen/api/generator/' -const sdkGenCheckDelay = 3000 - -let logger = log - -const generate = function (docs, parentLogger) { - logger = parentLogger || log - logger.writeToLog('Spring Generator generating code from open api document') - const openApiDir = [] - const p = new Promise((resolve) => { - let i = 0 - docs.forEach(doc => { - generateFromDoc(doc.spec) - .then(sdk => { - openApiDir.push(sdk) - if (++i === docs.length) { - resolve(openApiDir) - } - }) - }) - }) - return p -} - -const generateFromDoc = function (doc) { - return performSDKGenerationAsync('testSpringSDK', 'server_java_spring_bindings', doc) - .then(generatedID => { - logger.writeToLog('Spring Generator generated code from open api document with id ' + generatedID) - return getServerSDKAsync('testSpringSDK', generatedID) - }) -} - -const writeFiles = function (dirs, generator) { - dirs.forEach(sdk => { - generator.fs.copy(path.join(sdk.tempDir, 'generated-code', 'javaSpring', 'src'), generator.destinationPath('src')) - }) -} - -const performSDKGenerationAsync = function (sdkName, sdkType, fileContent) { - const startGenURL = `${sdkGenURL}${sdkName}/${sdkType}` - logger.writeToLog(`starting SDK generation job for ${sdkName} using ${startGenURL}`) - return request.postAsync({ - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Openapi-Opts': 'apiPackage=application,modelPackage=application.model,apiTemplateFiles=apiBinding.mustache=Binding.java' - }, - url: startGenURL, - body: fileContent - }) - .then(function (response) { - const body = JSON.parse(response.body) - if (body.job && body.job.id) { - return body.job.id - } - throw new Error('SDK generation error:', response.statusCode, response.statusMessage, body.message) - }) - .tap(generatedID => logger.writeToLog(`SDK generation job for ${sdkName} started with id ${generatedID}`)) - .then(generatedID => checkUntilFinished(generatedID)) - - function checkUntilFinished (generatedID, count) { - count = count || 1; - logger.writeToLog(`#${count} checking status of SDK generation job with id ${generatedID} (for ${sdkName})`); - return getStatusAsync(generatedID) - .then(finished => { - if (finished) { - logger.writeToLog(`SDK generation job with id ${generatedID} (for ${sdkName}) is complete`) - return generatedID - } else { - if (count <= 10) { - return Promise.delay(sdkGenCheckDelay).then(() => checkUntilFinished(generatedID, count + 1)) - } else { - throw new Error('Timeout error, couldn\'t generate SDK within timeout.') - } - } - }) - } -} - -function getStatusAsync (generatedID) { - const getStatusURL = `${sdkGenURL}${generatedID}/status` - return requestAsync({ - headers: {'Accept': 'application/json'}, - url: getStatusURL - }) - .then(response => { - const status = JSON.parse(response.body).status - switch (status) { - case 'FINISHED': - return true - - case 'VALIDATION_FAILED': - case 'FAILED': - throw new Error('SDK generator creation failed with status: ', status) - - default: - return false - } - }) -} - -const getServerSDKAsync = function (sdkName, generatedID) { - const serverDownloadURL = sdkGenURL + generatedID - // Use the non-async version of request.get() here because - // we are going to use .pipe() to stream the data to disk - return new Promise((resolve, reject) => { - const {sep} = require('path') - const tempDir = fs.mkdtempSync(os.tmpdir() + sep) - logger.writeToLog(`starting server SDK download and unzip for ${sdkName} from ${serverDownloadURL} to ${tempDir}`) - request.get({ - headers: {'Accept': 'application/zip'}, - url: serverDownloadURL - }) - .on('error', err => { - reject(new Error('Getting server SDK failed with error: ', err.message)) - }) - .pipe(unzip.Extract({path: tempDir})) - .on('close', () => { - logger.writeToLog(`finished server SDK download and unzip for ${sdkName} from ${serverDownloadURL} to ${tempDir}`) - - resolve({tempDir: tempDir, dirname: sdkName}) - }) - }) -} - -module.exports = { - generate: generate, - writeFiles: writeFiles -} diff --git a/generator-java/generators/spring/resources/openapi/basicswagger.json b/generator-java/generators/spring/resources/openapi/basicswagger.json deleted file mode 100644 index 1888fdc5..00000000 --- a/generator-java/generators/spring/resources/openapi/basicswagger.json +++ /dev/null @@ -1,1043 +0,0 @@ -{ - "swagger":"2.0", - "info":{ - "description":"This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.", - "version":"1.0.0", - "title":"Swagger Petstore", - "termsOfService":"http://swagger.io/terms/", - "contact":{ - "email":"apiteam@swagger.io" - }, - "license":{ - "name":"Apache 2.0", - "url":"http://www.apache.org/licenses/LICENSE-2.0.html" - } - }, - "host":"petstore.swagger.io", - "basePath":"/v2", - "tags":[ - { - "name":"pet", - "description":"Everything about your Pets", - "externalDocs":{ - "description":"Find out more", - "url":"http://swagger.io" - } - }, - { - "name":"store", - "description":"Access to Petstore orders" - }, - { - "name":"user", - "description":"Operations about user", - "externalDocs":{ - "description":"Find out more about our store", - "url":"http://swagger.io" - } - } - ], - "schemes":[ - "http" - ], - "paths":{ - "/pet":{ - "post":{ - "tags":[ - "pet" - ], - "summary":"Add a new pet to the store", - "description":"", - "operationId":"addPet", - "consumes":[ - "application/json", - "application/xml" - ], - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"Pet object that needs to be added to the store", - "required":true, - "schema":{ - "$ref":"#/definitions/Pet" - } - } - ], - "responses":{ - "405":{ - "description":"Invalid input" - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ] - }, - "put":{ - "tags":[ - "pet" - ], - "summary":"Update an existing pet", - "description":"", - "operationId":"updatePet", - "consumes":[ - "application/json", - "application/xml" - ], - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"Pet object that needs to be added to the store", - "required":true, - "schema":{ - "$ref":"#/definitions/Pet" - } - } - ], - "responses":{ - "400":{ - "description":"Invalid ID supplied" - }, - "404":{ - "description":"Pet not found" - }, - "405":{ - "description":"Validation exception" - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ] - } - }, - "/pet/findByStatus":{ - "get":{ - "tags":[ - "pet" - ], - "summary":"Finds Pets by status", - "description":"Multiple status values can be provided with comma separated strings", - "operationId":"findPetsByStatus", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"status", - "in":"query", - "description":"Status values that need to be considered for filter", - "required":true, - "type":"array", - "items":{ - "type":"string", - "enum":[ - "available", - "pending", - "sold" - ], - "default":"available" - }, - "collectionFormat":"multi" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/Pet" - } - } - }, - "400":{ - "description":"Invalid status value" - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ] - } - }, - "/pet/findByTags":{ - "get":{ - "tags":[ - "pet" - ], - "summary":"Finds Pets by tags", - "description":"Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", - "operationId":"findPetsByTags", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"tags", - "in":"query", - "description":"Tags to filter by", - "required":true, - "type":"array", - "items":{ - "type":"string" - }, - "collectionFormat":"multi" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/Pet" - } - } - }, - "400":{ - "description":"Invalid tag value" - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ], - "deprecated":true - } - }, - "/pet/{petId}":{ - "get":{ - "tags":[ - "pet" - ], - "summary":"Find pet by ID", - "description":"Returns a single pet", - "operationId":"getPetById", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"petId", - "in":"path", - "description":"ID of pet to return", - "required":true, - "type":"integer", - "format":"int64" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "$ref":"#/definitions/Pet" - } - }, - "400":{ - "description":"Invalid ID supplied" - }, - "404":{ - "description":"Pet not found" - } - }, - "security":[ - { - "api_key":[ - - ] - } - ] - }, - "post":{ - "tags":[ - "pet" - ], - "summary":"Updates a pet in the store with form data", - "description":"", - "operationId":"updatePetWithForm", - "consumes":[ - "application/x-www-form-urlencoded" - ], - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"petId", - "in":"path", - "description":"ID of pet that needs to be updated", - "required":true, - "type":"integer", - "format":"int64" - }, - { - "name":"name", - "in":"formData", - "description":"Updated name of the pet", - "required":false, - "type":"string" - }, - { - "name":"status", - "in":"formData", - "description":"Updated status of the pet", - "required":false, - "type":"string" - } - ], - "responses":{ - "405":{ - "description":"Invalid input" - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ] - }, - "delete":{ - "tags":[ - "pet" - ], - "summary":"Deletes a pet", - "description":"", - "operationId":"deletePet", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"api_key", - "in":"header", - "required":false, - "type":"string" - }, - { - "name":"petId", - "in":"path", - "description":"Pet id to delete", - "required":true, - "type":"integer", - "format":"int64" - } - ], - "responses":{ - "400":{ - "description":"Invalid ID supplied" - }, - "404":{ - "description":"Pet not found" - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ] - } - }, - "/pet/{petId}/uploadImage":{ - "post":{ - "tags":[ - "pet" - ], - "summary":"uploads an image", - "description":"", - "operationId":"uploadFile", - "consumes":[ - "multipart/form-data" - ], - "produces":[ - "application/json" - ], - "parameters":[ - { - "name":"petId", - "in":"path", - "description":"ID of pet to update", - "required":true, - "type":"integer", - "format":"int64" - }, - { - "name":"additionalMetadata", - "in":"formData", - "description":"Additional data to pass to server", - "required":false, - "type":"string" - }, - { - "name":"file", - "in":"formData", - "description":"file to upload", - "required":false, - "type":"file" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "$ref":"#/definitions/ApiResponse" - } - } - }, - "security":[ - { - "petstore_auth":[ - "write:pets", - "read:pets" - ] - } - ] - } - }, - "/store/inventory":{ - "get":{ - "tags":[ - "store" - ], - "summary":"Returns pet inventories by status", - "description":"Returns a map of status codes to quantities", - "operationId":"getInventory", - "produces":[ - "application/json" - ], - "parameters":[ - - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "type":"object", - "additionalProperties":{ - "type":"integer", - "format":"int32" - } - } - } - }, - "security":[ - { - "api_key":[ - - ] - } - ] - } - }, - "/store/order":{ - "post":{ - "tags":[ - "store" - ], - "summary":"Place an order for a pet", - "description":"", - "operationId":"placeOrder", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"order placed for purchasing the pet", - "required":true, - "schema":{ - "$ref":"#/definitions/Order" - } - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "$ref":"#/definitions/Order" - } - }, - "400":{ - "description":"Invalid Order" - } - } - } - }, - "/store/order/{orderId}":{ - "get":{ - "tags":[ - "store" - ], - "summary":"Find purchase order by ID", - "description":"For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", - "operationId":"getOrderById", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"orderId", - "in":"path", - "description":"ID of pet that needs to be fetched", - "required":true, - "type":"integer", - "maximum":10.0, - "minimum":1.0, - "format":"int64" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "$ref":"#/definitions/Order" - } - }, - "400":{ - "description":"Invalid ID supplied" - }, - "404":{ - "description":"Order not found" - } - } - }, - "delete":{ - "tags":[ - "store" - ], - "summary":"Delete purchase order by ID", - "description":"For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - "operationId":"deleteOrder", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"orderId", - "in":"path", - "description":"ID of the order that needs to be deleted", - "required":true, - "type":"integer", - "minimum":1.0, - "format":"int64" - } - ], - "responses":{ - "400":{ - "description":"Invalid ID supplied" - }, - "404":{ - "description":"Order not found" - } - } - } - }, - "/user":{ - "post":{ - "tags":[ - "user" - ], - "summary":"Create user", - "description":"This can only be done by the logged in user.", - "operationId":"createUser", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"Created user object", - "required":true, - "schema":{ - "$ref":"#/definitions/User" - } - } - ], - "responses":{ - "default":{ - "description":"successful operation" - } - } - } - }, - "/user/createWithArray":{ - "post":{ - "tags":[ - "user" - ], - "summary":"Creates list of users with given input array", - "description":"", - "operationId":"createUsersWithArrayInput", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"List of user object", - "required":true, - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/User" - } - } - } - ], - "responses":{ - "default":{ - "description":"successful operation" - } - } - } - }, - "/user/createWithList":{ - "post":{ - "tags":[ - "user" - ], - "summary":"Creates list of users with given input array", - "description":"", - "operationId":"createUsersWithListInput", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "in":"body", - "name":"body", - "description":"List of user object", - "required":true, - "schema":{ - "type":"array", - "items":{ - "$ref":"#/definitions/User" - } - } - } - ], - "responses":{ - "default":{ - "description":"successful operation" - } - } - } - }, - "/user/login":{ - "get":{ - "tags":[ - "user" - ], - "summary":"Logs user into the system", - "description":"", - "operationId":"loginUser", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"username", - "in":"query", - "description":"The user name for login", - "required":true, - "type":"string" - }, - { - "name":"password", - "in":"query", - "description":"The password for login in clear text", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "type":"string" - }, - "headers":{ - "X-Rate-Limit":{ - "type":"integer", - "format":"int32", - "description":"calls per hour allowed by the user" - }, - "X-Expires-After":{ - "type":"string", - "format":"date-time", - "description":"date in UTC when token expires" - } - } - }, - "400":{ - "description":"Invalid username/password supplied" - } - } - } - }, - "/user/logout":{ - "get":{ - "tags":[ - "user" - ], - "summary":"Logs out current logged in user session", - "description":"", - "operationId":"logoutUser", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - - ], - "responses":{ - "default":{ - "description":"successful operation" - } - } - } - }, - "/user/{username}":{ - "get":{ - "tags":[ - "user" - ], - "summary":"Get user by user name", - "description":"", - "operationId":"getUserByName", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"username", - "in":"path", - "description":"The name that needs to be fetched. Use user1 for testing. ", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"successful operation", - "schema":{ - "$ref":"#/definitions/User" - } - }, - "400":{ - "description":"Invalid username supplied" - }, - "404":{ - "description":"User not found" - } - } - }, - "put":{ - "tags":[ - "user" - ], - "summary":"Updated user", - "description":"This can only be done by the logged in user.", - "operationId":"updateUser", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"username", - "in":"path", - "description":"name that need to be updated", - "required":true, - "type":"string" - }, - { - "in":"body", - "name":"body", - "description":"Updated user object", - "required":true, - "schema":{ - "$ref":"#/definitions/User" - } - } - ], - "responses":{ - "400":{ - "description":"Invalid user supplied" - }, - "404":{ - "description":"User not found" - } - } - }, - "delete":{ - "tags":[ - "user" - ], - "summary":"Delete user", - "description":"This can only be done by the logged in user.", - "operationId":"deleteUser", - "produces":[ - "application/xml", - "application/json" - ], - "parameters":[ - { - "name":"username", - "in":"path", - "description":"The name that needs to be deleted", - "required":true, - "type":"string" - } - ], - "responses":{ - "400":{ - "description":"Invalid username supplied" - }, - "404":{ - "description":"User not found" - } - } - } - } - }, - "securityDefinitions":{ - "petstore_auth":{ - "type":"oauth2", - "authorizationUrl":"http://petstore.swagger.io/oauth/dialog", - "flow":"implicit", - "scopes":{ - "write:pets":"modify pets in your account", - "read:pets":"read your pets" - } - }, - "api_key":{ - "type":"apiKey", - "name":"api_key", - "in":"header" - } - }, - "definitions":{ - "Order":{ - "type":"object", - "properties":{ - "id":{ - "type":"integer", - "format":"int64" - }, - "petId":{ - "type":"integer", - "format":"int64" - }, - "quantity":{ - "type":"integer", - "format":"int32" - }, - "shipDate":{ - "type":"string", - "format":"date-time" - }, - "status":{ - "type":"string", - "description":"Order Status", - "enum":[ - "placed", - "approved", - "delivered" - ] - }, - "complete":{ - "type":"boolean", - "default":false - } - }, - "xml":{ - "name":"Order" - } - }, - "Category":{ - "type":"object", - "properties":{ - "id":{ - "type":"integer", - "format":"int64" - }, - "name":{ - "type":"string" - } - }, - "xml":{ - "name":"Category" - } - }, - "User":{ - "type":"object", - "properties":{ - "id":{ - "type":"integer", - "format":"int64" - }, - "username":{ - "type":"string" - }, - "firstName":{ - "type":"string" - }, - "lastName":{ - "type":"string" - }, - "email":{ - "type":"string" - }, - "password":{ - "type":"string" - }, - "phone":{ - "type":"string" - }, - "userStatus":{ - "type":"integer", - "format":"int32", - "description":"User Status" - } - }, - "xml":{ - "name":"User" - } - }, - "Tag":{ - "type":"object", - "properties":{ - "id":{ - "type":"integer", - "format":"int64" - }, - "name":{ - "type":"string" - } - }, - "xml":{ - "name":"Tag" - } - }, - "Pet":{ - "type":"object", - "required":[ - "name", - "photoUrls" - ], - "properties":{ - "id":{ - "type":"integer", - "format":"int64" - }, - "category":{ - "$ref":"#/definitions/Category" - }, - "name":{ - "type":"string", - "example":"doggie" - }, - "photoUrls":{ - "type":"array", - "xml":{ - "name":"photoUrl", - "wrapped":true - }, - "items":{ - "type":"string" - } - }, - "tags":{ - "type":"array", - "xml":{ - "name":"tag", - "wrapped":true - }, - "items":{ - "$ref":"#/definitions/Tag" - } - }, - "status":{ - "type":"string", - "description":"pet status in the store", - "enum":[ - "available", - "pending", - "sold" - ] - } - }, - "xml":{ - "name":"Pet" - } - }, - "ApiResponse":{ - "type":"object", - "properties":{ - "code":{ - "type":"integer", - "format":"int32" - }, - "type":{ - "type":"string" - }, - "message":{ - "type":"string" - } - } - } - }, - "externalDocs":{ - "description":"Find out more about Swagger", - "url":"http://swagger.io" - } -} \ No newline at end of file diff --git a/generator-java/generators/spring/resources/openapi/basicswagger1.json b/generator-java/generators/spring/resources/openapi/basicswagger1.json deleted file mode 100644 index 35995077..00000000 --- a/generator-java/generators/spring/resources/openapi/basicswagger1.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "version": "1.0.0", - "title": "Swagger Petstore", - "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", - "termsOfService": "http://swagger.io/terms/", - "contact": { - "name": "Swagger API Team" - }, - "license": { - "name": "MIT" - } - }, - "host": "petstore.swagger.io", - "basePath": "/api", - "schemes": [ - "http" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "paths": { - "/pets1": { - "get": { - "description": "Returns all pets from the system that the user has access to", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "A list of pets.", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Pet1" - } - } - } - } - } - } - }, - "definitions": { - "Pet1": { - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - } - } -} \ No newline at end of file diff --git a/generator-java/generators/spring/templates/build/config.js b/generator-java/generators/spring/templates/build/config.js index 79af1146..f3653b99 100644 --- a/generator-java/generators/spring/templates/build/config.js +++ b/generator-java/generators/spring/templates/build/config.js @@ -1,10 +1,4 @@ { "dependencies" : [ -{{#if bluemix.openApiServers}} - {"groupId" : "io.springfox", "artifactId" : "springfox-swagger2", "version" : "2.7.0"}, - {"groupId" : "io.springfox", "artifactId" : "springfox-swagger-ui", "version" : "2.7.0"}, - {"groupId" : "com.fasterxml.jackson.datatype", "artifactId" : "jackson-datatype-joda"}, - {"groupId" : "javax.validation", "artifactId" : "validation-api"} -{{/if}} ] } \ No newline at end of file diff --git a/generator-java/generators/spring/templates/config/src/main/resources/application.properties b/generator-java/generators/spring/templates/config/src/main/resources/application.properties index b5ed3b82..e69de29b 100644 --- a/generator-java/generators/spring/templates/config/src/main/resources/application.properties +++ b/generator-java/generators/spring/templates/config/src/main/resources/application.properties @@ -1,5 +0,0 @@ -{{#if bluemix.openApiServers}} -springfox.documentation.swagger.v2.path=/swagger/api -spring.jackson.date-format=io.swagger.RFC3339DateFormat -spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false -{{/if}} \ No newline at end of file diff --git a/generator-java/generators/spring/templates/health/src/main/java/application/SBApplication.java b/generator-java/generators/spring/templates/health/src/main/java/application/SBApplication.java index da802eb8..a58fb609 100644 --- a/generator-java/generators/spring/templates/health/src/main/java/application/SBApplication.java +++ b/generator-java/generators/spring/templates/health/src/main/java/application/SBApplication.java @@ -8,27 +8,16 @@ import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; {{/mongodb}} -{{#if openApiServers.length}} -import org.springframework.context.annotation.ComponentScan; - -import springfox.documentation.swagger2.annotations.EnableSwagger2; -{{else}} {{#javametrics}} import org.springframework.context.annotation.ComponentScan; {{/javametrics}} -{{/if}} {{/bluemix}} @SpringBootApplication {{#bluemix}} -{{#if openApiServers.length}} -@EnableSwagger2 -@ComponentScan(basePackages = { "io.swagger", "application" {{#javametrics}}, "com.ibm.javametrics.spring"{{/javametrics}} }) -{{else}} {{#javametrics}} @ComponentScan(basePackages = {"application", "com.ibm.javametrics.spring"}) {{/javametrics}} -{{/if}} {{#mongodb}} @EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) {{/mongodb}} diff --git a/generator-java/generators/spring/test/integration/generator.openapi.test.js b/generator-java/generators/spring/test/integration/generator.openapi.test.js deleted file mode 100644 index 12d437b0..00000000 --- a/generator-java/generators/spring/test/integration/generator.openapi.test.js +++ /dev/null @@ -1,118 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Tests the Liberty aspects generator - */ -'use strict' -const path = require('path') -const helpers = require('yeoman-test') -const AssertOpenApi = require('../../lib/assert.openapi') -const MockPromptMgr = require('../mocks/mock.promptmgr') -const common = require('../../../../lib/common') -const openapidoc = require('../../resources/openapi/basicswagger.json') -const openapidoc1 = require('../../resources/openapi/basicswagger1.json') - -const ARTIFACTID = 'artifact.0.1' -const GROUPID = 'test.group' -const VERSION = '1.0.0' -const APPNAME = 'testApp' - -class Options extends AssertOpenApi { - - constructor (buildType, createType, bluemix) { - super() - this.conf = { - buildType: buildType, - createType: createType, - appName: APPNAME, - groupId: GROUPID, - artifactId: ARTIFACTID, - version: VERSION - } - if (bluemix) { - this.conf.bluemix = bluemix - } - const ctx = new common.context('test', this.conf, new MockPromptMgr()) - this.options = { - context: ctx - } - this.before = function () { - return helpers.run(path.join(__dirname, '../../generators/app')) - .withOptions(this.options) - .toPromise() - } - } -} - -const buildTypes = ['gradle', 'maven'] - -describe('java spring generator : Spring generation integration test', function () { - this.timeout(60000) - - buildTypes.forEach(buildType => { - describe('generate project without openapi code with buildType ' + buildType, function () { - const options = new Options(buildType, 'health') - before(options.before.bind(options)) - options.assert(false, [], buildType) - }) - describe('generate project with openapi code with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'SPRING', - 'openApiServers': [ - { - 'spec': JSON.stringify(openapidoc) - } - ] - } - const options = new Options(buildType, 'health', bluemix) - before(options.before.bind(options)) - options.assert(true, ['example'], buildType) - }) - describe('generate project with two identical openapi code docs with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'SPRING', - 'openApiServers': [ - { - 'spec': JSON.stringify(openapidoc) - }, - { - 'spec': JSON.stringify(openapidoc) - } - ] - } - const options = new Options(buildType, 'health', bluemix) - before(options.before.bind(options)) - options.assert(true, ['example'], buildType) - }) - describe('generate project with two different openapi code docs with buildType ' + buildType, function () { - const bluemix = { - 'backendPlatform': 'SPRING', - 'openApiServers': [ - { - 'spec': JSON.stringify(openapidoc) - }, - { - 'spec': JSON.stringify(openapidoc1) - } - ] - } - const options = new Options(buildType, 'health', bluemix) - before(options.before.bind(options)) - options.assert(true, ['example', 'example1'], buildType) - }) - }) -}) diff --git a/generator-java/index.js b/generator-java/index.js index be239a37..92ab96cc 100644 --- a/generator-java/index.js +++ b/generator-java/index.js @@ -20,11 +20,9 @@ module.exports = { testAsserts: { starters: { basicweb: require('./lib/assert/starters/assert.basicweb'), - bff: require('./lib/assert/starters/assert.bff'), blank: require('./lib/assert/starters/assert.blank'), enable: require('./lib/assert/starters/assert.enable'), microservice: require('./lib/assert/starters/assert.microservice'), - openapi: require('./lib/assert/starters/assert.openapi'), skit: require('./lib/assert/starters/assert.skit'), technologies: require('./lib/assert/starters/assert.technologies') }, diff --git a/generator-java/lib/assert/internal/assert.liberty.js b/generator-java/lib/assert/internal/assert.liberty.js index 4c0771af..e764b340 100644 --- a/generator-java/lib/assert/internal/assert.liberty.js +++ b/generator-java/lib/assert/internal/assert.liberty.js @@ -21,7 +21,6 @@ const liberty = require('../../../generators/liberty/exports'); const tests = require('../../../lib/common'); const assertLiberty = new liberty.integrationAsserts.liberty(); -const openApi = new liberty.integrationAsserts.openapi(); function test_liberty() { } @@ -131,14 +130,6 @@ test_liberty.prototype.assertObjectStorage = function() { checkValues(false, env, assertLiberty.assertEnv); } -test_liberty.prototype.assertOpenApi = function(exists, fileNames) { - openApi.assert(exists, fileNames); -} - -test_liberty.prototype.getExampleOpenApi = function() { - return openApi.getExample(); -} - test_liberty.prototype.assertConfig = function(exists, tag) { return assertLiberty.assertConfig(exists, tag); } diff --git a/generator-java/lib/assert/internal/assert.spring.js b/generator-java/lib/assert/internal/assert.spring.js index 4a7717b4..e42fe24a 100644 --- a/generator-java/lib/assert/internal/assert.spring.js +++ b/generator-java/lib/assert/internal/assert.spring.js @@ -19,7 +19,6 @@ const spring = require('../../../generators/spring/exports'); const tests = require('../../../lib/common'); const assertSpring = new spring.integrationAsserts.spring(); -const openApi = new spring.integrationAsserts.openapi(); function test_spring() { } @@ -79,18 +78,6 @@ test_spring.prototype.assertObjectStorage = function() { checkValues(false, env, assertSpring.assertEnv); } -test_spring.prototype.assertOpenApi = function(exists, fileNames, buildType, healthMissing) { - if(healthMissing) { - openApi.assertCommon(exists, fileNames, buildType); - } else { - openApi.assert(exists, fileNames, buildType); - } -} - -test_spring.prototype.getExampleOpenApi = function() { - return openApi.getExample(); -} - test_spring.prototype.assertEnv = function(exists, env) { checkValues(exists, env, assertSpring.assertEnv); } diff --git a/generator-java/lib/assert/starters/assert.bff.js b/generator-java/lib/assert/starters/assert.bff.js deleted file mode 100644 index a09888ac..00000000 --- a/generator-java/lib/assert/starters/assert.bff.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict' - -const AssertBx = require('../internal/assert.core.bx') -const constant = require('../constant') -const framework = require('../assert.framework') -const assert = require('yeoman-assert') -const tests = require('../../../lib/common') - -class AssertBFF extends AssertBx { - assert (appName, ymlName, buildType, frameworkType, createType, cloudant, objectStorage) { - this.frameworkType = frameworkType; - super.assert(appName, ymlName, buildType, frameworkType, createType, cloudant, objectStorage) - framework.test(frameworkType).assertSourceFiles(false) - } - - assertliberty ({buildType}) { - super.assertliberty() - this.assertFiles('src', true, - 'main/java/application/rest/SwaggerEndpoint.java', - 'main/java/application/model/Product.java', - 'main/java/application/openapi/ProductsApi.java', - 'main/java/application/openapi/ProductApi.java', - 'test/java/it/ProductsEndpointTest.java', - 'test/java/it/SwaggerEndpointTest.java') - framework.test(constant.FRAMEWORK_LIBERTY).assertFeatures('jaxrs-2.0') - framework.test(constant.FRAMEWORK_LIBERTY).assertFeatures('apiDiscovery-1.0') - framework.test(constant.FRAMEWORK_LIBERTY).assertConfig(true, 'basicRegistry') - const test = tests.test(buildType) - test.assertDependency('provided', 'io.swagger', 'swagger-annotations', '1.5.3') - test.assertDependency('provided', 'javax.ws.rs', 'javax.ws.rs-api', '2.0.1') - test.assertDependency('provided', 'com.ibm.websphere.appserver.api', 'com.ibm.websphere.appserver.api.jaxrs20', '1.0.18') - } - - assertspring ({buildType}) { - super.assertspring() - this.assertFiles('src', true, - 'main/java/application/ProductApi.java', - 'main/java/application/ProductApiController.java', - 'main/java/application/ProductsApi.java', - 'main/java/application/ProductsApiController.java', - 'main/java/application/model/Product.java') - framework.test(constant.FRAMEWORK_SPRING).assertOpenApi(true, [], buildType) - framework.test(constant.FRAMEWORK_SPRING).assertContent('/index.html') - const test = tests.test(buildType) - test.assertDependency('compile', 'org.springframework.boot', 'spring-boot-starter-web') - test.assertDependency('compile', 'org.springframework.boot', 'spring-boot-actuator') - test.assertDependency('compile', 'org.springframework.cloud', 'spring-cloud-starter-hystrix') - test.assertDependency('test', 'org.springframework.boot', 'spring-boot-starter-test') - it('Check that common info files exist', function () { - assert.fileContent('src/main/java/io/swagger/Info.java', 'http://localhost:8080/swagger/api') // standard info is there - }) - } - - assertCloudant ({exists, buildType, frameworkType}) { - super.assertCloudant({exists: exists, buildType: buildType, frameworkType: frameworkType}) - const check = super.getCheck(exists); - if(this.frameworkType === 'liberty') { - //make sure Spring specific files are not generated - assert.noFile('src/main/java/application/ProductsApiBinding.java'); - assert.noFile('src/main/java/application/ProductApiBinding.java'); - } else { - it(check.desc + 'Cloudant Products bindings (' + this.frameworkType + ', ' + buildType + ')', function () { - check.content('src/main/java/application/ProductsApiBinding.java', 'private CloudantClient client;') - }) - it(check.desc + 'Cloudant Product bindings', function () { - check.content('src/main/java/application/ProductApiBinding.java', 'private CloudantClient client;') - }) - } - } -} - -module.exports = exports = AssertBFF diff --git a/generator-java/lib/assert/starters/assert.openapi.js b/generator-java/lib/assert/starters/assert.openapi.js deleted file mode 100644 index 998eec70..00000000 --- a/generator-java/lib/assert/starters/assert.openapi.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict' - -const AssertBx = require('../internal/assert.core.bx') -const constant = require('../constant') -const framework = require('../assert.framework') -const tests = require('../../../lib/common') - -class AssertOpenAPI extends AssertBx { - assert (appName, ymlName, buildType, createType, frameworkType, exampleName, openApiServers, noHealth) { - super.assert(appName, ymlName, buildType, frameworkType, createType, false, false) - this.assertToolchainBxCreate() - framework.test(frameworkType).assertOpenApi(openApiServers !== undefined, [exampleName], buildType, noHealth) - } - - assertliberty ({buildType, createType}) { - super.assertliberty() - const test = tests.test(buildType) - if (createType === 'microservice/liberty') { - test.assertDependency('provided', 'javax.servlet', 'javax.servlet-api', '3.1.0') - test.assertDependency('provided', 'com.ibm.websphere.appserver.api', 'com.ibm.websphere.appserver.api.servlet', '1.1.18') - test.assertDependency('provided', 'com.ibm.websphere.appserver.api', 'com.ibm.websphere.appserver.api.jaxrs20', '1.0.18') - test.assertDependency('provided', 'com.ibm.websphere.appserver.api', 'com.ibm.websphere.appserver.api.json', '1.0.18') - const type = buildType === 'maven' ? 'pom' : undefined - test.assertDependency('provided', 'org.eclipse.microprofile', 'microprofile', '1.2', undefined, type) - framework.test(constant.FRAMEWORK_LIBERTY).assertFeatures('microprofile-1.2') - framework.test(constant.FRAMEWORK_LIBERTY).assertFeatures('jndi-1.0') - } - if (createType === 'bff/liberty') { - test.assertDependency('provided', 'io.swagger', 'swagger-annotations', '1.5.3') - test.assertDependency('provided', 'javax.ws.rs', 'javax.ws.rs-api', '2.0.1') - test.assertDependency('provided', 'com.ibm.websphere.appserver.api', 'com.ibm.websphere.appserver.api.jaxrs20', '1.0.18') - framework.test(constant.FRAMEWORK_LIBERTY).assertFeatures('apiDiscovery-1.0') - framework.test(constant.FRAMEWORK_LIBERTY).assertFeatures('jaxrs-2.0') - framework.test(constant.FRAMEWORK_LIBERTY).assertConfig(true, 'basicRegistry') - } - framework.test(constant.FRAMEWORK_LIBERTY).assertSourceFiles(false) - } -} - -module.exports = exports = AssertOpenAPI diff --git a/generator-java/package-lock.json b/generator-java/package-lock.json index b976c007..f80a2c1d 100644 --- a/generator-java/package-lock.json +++ b/generator-java/package-lock.json @@ -7179,4 +7179,4 @@ } } } -} +} \ No newline at end of file diff --git a/generator-java/package.json b/generator-java/package.json index 552824d7..63c0171f 100644 --- a/generator-java/package.json +++ b/generator-java/package.json @@ -48,13 +48,11 @@ "testms": "nyc mocha test/integration/generator.microservice.test.js", "testbff": "nyc mocha test/integration/generator.bff.test.js", "testtech": "nyc mocha test/integration/generator.technologies.test.js", - "testopenapi": "nyc mocha test/integration/generator.openapi.test.js", "testskit": "nyc mocha test/integration/generator.skit.test.js", "testblanke2e": "nyc mocha test/endToEnd/generator.blank.e2e.test.js", "testbasicwebe2e": "nyc mocha test/endToEnd/generator.basicweb.e2e.test.js", "testbffe2e": "nyc mocha test/endToEnd/generator.bff.e2e.test.js", "testmse2e": "nyc mocha test/endToEnd/generator.microservice.e2e.test.js", - "testopenapie2e": "nyc mocha test/endToEnd/generator.openapi.e2e.test.js", "testteche2e": "nyc mocha test/endToEnd/generator.technologies.e2e.test.js", "testcommon": "nyc mocha test/common/*", "mocha": "nyc --reporter=lcov mocha test/unit/* --reporter mocha-multi-reporters --reporter-options configFile=config.json", diff --git a/generator-java/test/endToEnd/generator.openapi.e2e.test.js b/generator-java/test/endToEnd/generator.openapi.e2e.test.js deleted file mode 100644 index bbb4389c..00000000 --- a/generator-java/test/endToEnd/generator.openapi.e2e.test.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Test to see if when you choose every technology type it builds */ - -'use strict'; - -const testAsserts = require('../../index').testAsserts; -const assert = testAsserts.builds; -const constant = testAsserts.constant; -const frameworkTest = testAsserts.framework; -const helpers = require('yeoman-test'); -const path = require('path'); - -function Options(buildType, framework) { - const platform = framework === constant.FRAMEWORK_SPRING ? 'SPRING' : 'JAVA'; - const example = frameworkTest.test(framework).getExampleOpenApi() - this.options = { - buildType: buildType, - createType: 'blank/' + framework, - appName: constant.APPNAME, - groupId: constant.GROUPID, - artifactId: constant.ARTIFACTID, - version: constant.VERSION, - bluemix: { - backendPlatform: platform, - name: constant.APPNAME, - openApiServers: [{ - "spec": JSON.stringify(example.value) - }] - } - } - - this.before = function () { - return helpers.run(path.join(__dirname, '../../generators/app')) - .withOptions(this.options) - .toPromise(); - } -} - -const buildTypes = [/*'gradle',*/ 'maven']; - -describe('java generator : blank/liberty end to end test', function () { - this.timeout(10000); - for (let i = 0; i < buildTypes.length; i++) { - describe('Generates a blank project build type ' + buildTypes[i], function () { - const options = new Options(buildTypes[i], constant.FRAMEWORK_LIBERTY); - before(options.before.bind(options)); - assert.assertBuilds(buildTypes[i]); - }); - } -}); - -describe('java generator : blank/spring end to end test', function () { - this.timeout(10000); - for (let i = 0; i < buildTypes.length; i++) { - describe('Generates a blank project build type ' + buildTypes[i], function () { - const options = new Options(buildTypes[i], constant.FRAMEWORK_SPRING); - before(options.before.bind(options)); - assert.assertBuilds(buildTypes[i]); - }); - } -}); diff --git a/generator-java/test/integration/generator.openapi.test.js b/generator-java/test/integration/generator.openapi.test.js deleted file mode 100644 index d01bb7ed..00000000 --- a/generator-java/test/integration/generator.openapi.test.js +++ /dev/null @@ -1,182 +0,0 @@ -/* - * © Copyright IBM Corp. 2017, 2018 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** -* Tests the microservice generator -*/ - -'use strict'; - -process.env.COMPILE=false - -const testAsserts = require('../../index').testAsserts; -const AssertOpenAPI = testAsserts.starters.openapi; -const constant = testAsserts.constant; -const framework = testAsserts.framework; -const core = require('../lib/core'); -const assert = require('yeoman-assert'); -const extend = require('extend'); - -class Options extends core.Options { - constructor(buildType, type, frameworkType, openApiServers) { - super(frameworkType === 'spring' ? 'SPRING' : 'JAVA'); - extend(this.values, { - buildType: buildType, - frameworkType: frameworkType || constant.FRAMEWORK_LIBERTY, - createType: type + '/' + (frameworkType || constant.FRAMEWORK_LIBERTY), - appName: constant.APPNAME - }); - if (openApiServers) { - this.values.bluemix.openApiServers = openApiServers; - } - } -} - -const gradle = 'gradle'; -const maven = 'maven'; -const assertOpenApi = new AssertOpenAPI(); - -execute(constant.FRAMEWORK_LIBERTY); -execute(constant.FRAMEWORK_SPRING); - -function execute(frameworkType) { - const name = frameworkType.toUpperCase(); - - describe('java generator : openapi integration test', function () { - this.timeout(30000); - - // execute each of these tests for both Liberty and Spring frameworks - describe(name + ': Generates a basic microservices project using open api doc (no bluemix), gradle build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(gradle, 'microservice', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, gradle, options.values.createType, frameworkType, example.name, openApiServers); - it('should create a basic microservice, gradle build system', function () { - assert.fileContent('src/main/java/application/rest/v1/Example.java', 'list.add("Congratulations, your application is up and running");'); // check no bx services present - assert.fileContent('README.md', gradle); - assert.noFileContent('README.md', maven); - }); - }); - - describe(name + ': Generates a basic microservices project using open api doc (no bluemix), maven build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(maven, 'microservice', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, maven, options.values.createType, frameworkType, example.name, openApiServers); - it('should create a basic microservice, maven build system', function () { - assert.fileContent('src/main/java/application/rest/v1/Example.java', 'list.add("Congratulations, your application is up and running");'); // check no bx services present - assert.fileContent('README.md', maven); - assert.noFileContent('README.md', gradle); - }); - }); - - describe(name + ': Generates a basic microservices project using two identical open api doc (no bluemix), gradle build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - }, { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(gradle, 'microservice', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, gradle, options.values.createType, frameworkType, example.name, openApiServers); - it('should create a basic microservice, gradle build system', function () { - assert.fileContent('src/main/java/application/rest/v1/Example.java', 'list.add("Congratulations, your application is up and running");'); // check no bx services present - assert.fileContent('README.md', gradle); - assert.noFileContent('README.md', maven); - }); - }); - - describe(name + ': Generates a basic microservices project using two identical open api doc (no bluemix), maven build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - }, { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(maven, 'microservice', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, maven, options.values.createType, frameworkType, example.name, openApiServers); - it('should create a basic microservice, maven build system', function () { - assert.fileContent('src/main/java/application/rest/v1/Example.java', 'list.add("Congratulations, your application is up and running");'); // check no bx services present - assert.fileContent('README.md', maven); - assert.noFileContent('README.md', gradle); - }); - }); - - describe(name + ': Generates a basic bff project using open api doc (no bluemix), gradle build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(gradle, 'bff', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, gradle, options.values.createType, frameworkType, example.name, openApiServers); - }); - - describe(name + ': Generates a basic bff project using open api doc (no bluemix), maven build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(maven, 'bff', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, maven, options.values.createType, frameworkType, example.name, openApiServers); - }); - - describe(name + ': Generates a blank project using open api doc (no bluemix), gradle build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(gradle, 'blank', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, gradle, options.values.createType, frameworkType, example.name, openApiServers, true); - }); - - describe(name + ': Generates a blank project using open api doc (no bluemix), maven build system', function () { - const example = framework.test(frameworkType).getExampleOpenApi() - const openApiServers = [ - { - "spec": JSON.stringify(example.value) - } - ]; - const options = new Options(maven, 'blank', frameworkType, openApiServers); - before(options.before.bind(options)); - assertOpenApi.assert(options.values.appName, options.values.appName, maven, options.values.createType, frameworkType, example.name, openApiServers, true); - }); - }); -} From ebf649adc869b5943af25cca8f7c9d48b895850a Mon Sep 17 00:00:00 2001 From: jmeis Date: Mon, 12 Aug 2019 13:48:34 -0500 Subject: [PATCH 2/3] feat(sdkgen): remove api discovery --- generator-java/generators/app/index.js | 4 ---- generator-java/generators/liberty/index.js | 4 ---- 2 files changed, 8 deletions(-) diff --git a/generator-java/generators/app/index.js b/generator-java/generators/app/index.js index 85743a53..c5851fb7 100644 --- a/generator-java/generators/app/index.js +++ b/generator-java/generators/app/index.js @@ -154,9 +154,6 @@ module.exports = class extends Generator { 'generator-ibm-cloud-enablement': pkg.dependencies['generator-ibm-cloud-enablement'] } config.genVersions['generator-ibm-java-' + config.frameworkType] = pkg.dependencies['generator-ibm-java-' + config.frameworkType] - if (config.frameworkType === 'liberty' && config.createType === 'bff/liberty') { - config.enableApiDiscovery = true - } //configure this generator and then pass that down through the contexts const control = new Control(fspath.resolve(config.templateRoot, config.createType), config) @@ -174,7 +171,6 @@ module.exports = class extends Generator { context.conf.addJndiEntries(config.jndiEntries) } context.addCompositions(control.getSubComposition(context.id)) - context.conf.enableApiDiscovery = config.enableApiDiscovery }) enablementContexts.forEach(context => { context.appName = config.appName diff --git a/generator-java/generators/liberty/index.js b/generator-java/generators/liberty/index.js index 6505b9ae..7f70d94e 100644 --- a/generator-java/generators/liberty/index.js +++ b/generator-java/generators/liberty/index.js @@ -33,7 +33,6 @@ module.exports = class extends Generator { this.logger.writeToLog(`${logId}:constructor - context`, JSON.stringify(opts.context)); this.patterns.push('picnmix'); this.conf.addMissing(opts, defaults); - this.conf.enableApiDiscovery = this.config.enableApiDiscovery || false; if (this.options.libertyVersion === 'beta' || opts.context.conf.libertyVersion === 'beta') { this.conf.libertyBeta = true @@ -53,9 +52,6 @@ module.exports = class extends Generator { configuring() { this.configure(this); - if (this.conf.technologies.includes('swagger')) { - this.conf.enableApiDiscovery = true; - } } writing() { From e48ddb9bfb8122a5018205520e58d9a509468ca1 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Mon, 12 Aug 2019 19:33:09 +0000 Subject: [PATCH 3/3] chore(release): 5.15.0 --- generator-java/CHANGELOG.md | 8 ++++++++ generator-java/package-lock.json | 4 ++-- generator-java/package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/generator-java/CHANGELOG.md b/generator-java/CHANGELOG.md index 0e2a04cb..04d91e4b 100644 --- a/generator-java/CHANGELOG.md +++ b/generator-java/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [5.15.0](https://github.com/ibm-developer/generator-ibm-java/compare/v5.14.3...v5.15.0) (2019-08-12) + + +### Features + +* **sdkgen:** remove api discovery ([ebf649a](https://github.com/ibm-developer/generator-ibm-java/commit/ebf649a)) +* **sdkgen:** remove sdkgen ([c272fdc](https://github.com/ibm-developer/generator-ibm-java/commit/c272fdc)) + ### [5.14.3](https://github.com/ibm-developer/generator-ibm-java/compare/v5.14.2...v5.14.3) (2019-08-08) diff --git a/generator-java/package-lock.json b/generator-java/package-lock.json index f80a2c1d..a065a0d0 100644 --- a/generator-java/package-lock.json +++ b/generator-java/package-lock.json @@ -1,6 +1,6 @@ { "name": "generator-ibm-java", - "version": "5.14.3", + "version": "5.15.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -7179,4 +7179,4 @@ } } } -} \ No newline at end of file +} diff --git a/generator-java/package.json b/generator-java/package.json index 63c0171f..5972dedc 100644 --- a/generator-java/package.json +++ b/generator-java/package.json @@ -1,6 +1,6 @@ { "name": "generator-ibm-java", - "version": "5.14.3", + "version": "5.15.0", "description": "Java code generation and modification", "license": "Apache-2.0", "main": "index.js",