From 8454d54680aef3b89051ba3be2f0b8628eefd20c Mon Sep 17 00:00:00 2001 From: rathnapandi Date: Thu, 23 Jan 2025 11:52:55 -0700 Subject: [PATCH] - Fix issue #522, #534, #528 --- CHANGELOG.md | 13 + .../adapter/apis/APIManagerAPIAdapter.java | 38 +- .../com/axway/apim/lib/error/ErrorCode.java | 5 +- .../apis/APIManagerAPIAdapterTest.java | 7 + .../com/axway/apim/adapter/api-export.dat | 910 ++++++++++++++++++ .../wiremock_apim/__files/empty.json | 1 + .../wiremock_apim/mappings/importDat.json | 13 + .../java/com/axway/apim/APIImportApp.java | 38 +- .../lib/cli/CLIAPIImportDatOptions.java | 74 ++ .../lib/params/APIImportDatParams.java | 34 + .../axway/apim/organization/Constants.java | 18 + .../organization/impl/ConsoleOrgExporter.java | 45 +- .../organization/impl/CsvOrgExporter.java | 180 ++++ .../organization/impl/OrgResultHandler.java | 1 + 14 files changed, 1344 insertions(+), 33 deletions(-) create mode 100644 modules/apim-adapter/src/test/resources/com/axway/apim/adapter/api-export.dat create mode 100644 modules/apim-cli-tests/src/main/resources/wiremock_apim/__files/empty.json create mode 100644 modules/apim-cli-tests/src/main/resources/wiremock_apim/mappings/importDat.json create mode 100644 modules/apis/src/main/java/com/axway/apim/apiimport/lib/cli/CLIAPIImportDatOptions.java create mode 100644 modules/apis/src/main/java/com/axway/apim/apiimport/lib/params/APIImportDatParams.java create mode 100644 modules/organizations/src/main/java/com/axway/apim/organization/Constants.java create mode 100644 modules/organizations/src/main/java/com/axway/apim/organization/impl/CsvOrgExporter.java diff --git a/CHANGELOG.md b/CHANGELOG.md index a60358b34..6bd7317d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,19 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +# [1.14.9] In progress + +### Fixed + +- File extension is missing in apiSpecification.resource when exporting API(See issue [#528](https://github.com/Axway-API-Management-Plus/apim-cli/issues/528)) + +### Added +- Support csv format for organization export (See issue [#534](https://github.com/Axway-API-Management-Plus/apim-cli/issues/534)) +- Generate api-config.json with permethod override and methods tags (See issue [#522](https://github.com/Axway-API-Management-Plus/apim-cli/issues/522)) +- import .dat APIs (See issue [#532](https://github.com/Axway-API-Management-Plus/apim-cli/issues/532)) + + + # [1.14.8] 2024-11-06 ### Fixed diff --git a/modules/apim-adapter/src/main/java/com/axway/apim/adapter/apis/APIManagerAPIAdapter.java b/modules/apim-adapter/src/main/java/com/axway/apim/adapter/apis/APIManagerAPIAdapter.java index 9a4e5b5ec..1b3f11cc2 100644 --- a/modules/apim-adapter/src/main/java/com/axway/apim/adapter/apis/APIManagerAPIAdapter.java +++ b/modules/apim-adapter/src/main/java/com/axway/apim/adapter/apis/APIManagerAPIAdapter.java @@ -45,6 +45,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -67,6 +68,9 @@ public class APIManagerAPIAdapter { public static final String APPLICATIONS = "/applications/"; public static final String FILENAME = "filename"; public static final String CONTENT_TYPE = "text/plain"; + public static final String PASSWORD = "password"; + public static final String HTML_5 = "html5"; + public static final String UPLOAD_TYPE = "uploadType"; Map apiManagerResponse = new HashMap<>(); ObjectMapper mapper = new ObjectMapper(); private final CoreParameters cmd; @@ -698,7 +702,7 @@ public byte[] getAPIDatFile(API api, String password) throws AppException { String locationHeader; List parameters = new ArrayList<>(); parameters.add(new BasicNameValuePair(FILENAME, "api-export.dat")); - parameters.add(new BasicNameValuePair("password", password)); + parameters.add(new BasicNameValuePair(PASSWORD, password)); parameters.add(new BasicNameValuePair("id", api.getId())); HttpEntity entity = new UrlEncodedFormEntity(parameters); URI uri = new URIBuilder(cmd.getAPIManagerURL()) @@ -731,6 +735,32 @@ public byte[] getAPIDatFile(API api, String password) throws AppException { } } + public void importAPIDatFile(File file, String password, String orgId) throws AppException { + try { + MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create() + .addBinaryBody("file", file) + .addTextBody(ORGANIZATION_ID, orgId) + .addTextBody(UPLOAD_TYPE, HTML_5); + if (password != null) multipartEntityBuilder.addTextBody(PASSWORD, password); + HttpEntity entity = multipartEntityBuilder.build(); + + URI uri = new URIBuilder(cmd.getAPIManagerURL()) + .setPath(cmd.getApiBasepath() + "/proxies/import") + .build(); + RestAPICall request = new POSTRequest(entity, uri); + try (CloseableHttpResponse httpResponse = (CloseableHttpResponse) request.execute()) { + int statusCode = httpResponse.getStatusLine().getStatusCode(); + String response = EntityUtils.toString(httpResponse.getEntity()); + if (statusCode != 201) { + LOG.error("Error import DAT-File representation of API, Received Status-Code: {} Response: {}", statusCode, response); + throw new AppException("Error importing DAT-File representation of API", ErrorCode.ERR_IMPORTING_API_DAT_FILE); + } + } + } catch (Exception e) { + throw new AppException("Cannot export API-DAT file.", ErrorCode.ERR_IMPORTING_API_DAT_FILE, e); + } + } + public void updateAPIStatus(API api, String desiredState, String vhost) throws AppException { LOG.debug("Update API-Proxy status to: {}", api.getState()); try { @@ -835,7 +865,7 @@ public JsonNode importFromWSDL(API api) throws IOException { nameValuePairs.add(new BasicNameValuePair("name", api.getName())); if (username != null) { nameValuePairs.add(new BasicNameValuePair("username", username)); - nameValuePairs.add(new BasicNameValuePair("password", pass)); + nameValuePairs.add(new BasicNameValuePair(PASSWORD, pass)); } HttpEntity entity = new UrlEncodedFormEntity(nameValuePairs); RestAPICall importWSDL = new POSTRequest(entity, uri); @@ -861,7 +891,7 @@ public JsonNode importFromSwagger(API api) throws AppException { .addTextBody("type", "swagger") .addBinaryBody("file", api.getApiDefinition().getApiSpecificationContent(), ContentType.create("application/json"), FILENAME) .addTextBody("fileName", "XYZ").addTextBody(ORGANIZATION_ID, api.getOrganization().getId(), ContentType.create(CONTENT_TYPE, StandardCharsets.UTF_8)) - .addTextBody("integral", "false").addTextBody("uploadType", "html5").build(); + .addTextBody("integral", "false").addTextBody(UPLOAD_TYPE, HTML_5).build(); return createBackend(entity, api); } @@ -892,7 +922,7 @@ public JsonNode importGraphql(API api, String backendBasePath) throws AppExcepti .addBinaryBody("file", api.getApiDefinition().getApiSpecificationContent(), ContentType.create("application/octet-stream"), FILENAME) .addTextBody("fileName", "XYZ").addTextBody(ORGANIZATION_ID, api.getOrganization().getId(), ContentType.create(CONTENT_TYPE, StandardCharsets.UTF_8)) .addTextBody("backendUrl", backendBasePath) - .addTextBody("integral", "false").addTextBody("uploadType", "html5").build(); + .addTextBody("integral", "false").addTextBody(UPLOAD_TYPE, HTML_5).build(); return createBackend(entity, api); } diff --git a/modules/apim-adapter/src/main/java/com/axway/apim/lib/error/ErrorCode.java b/modules/apim-adapter/src/main/java/com/axway/apim/lib/error/ErrorCode.java index beee237ee..bf19606ca 100644 --- a/modules/apim-adapter/src/main/java/com/axway/apim/lib/error/ErrorCode.java +++ b/modules/apim-adapter/src/main/java/com/axway/apim/lib/error/ErrorCode.java @@ -60,7 +60,7 @@ public enum ErrorCode { ERR_DELETING_API(91, "API could not be deleted.", false), ERR_DELETING_ORG(92, "Organization could not be deleted.", false), ERR_GRANTING_ACCESS_TO_API(93, "Error granting access to an API.", false), - ERR_EXPORTING_API_DAT_FILE(94, "Error exporting API-Date file.", false), + ERR_EXPORTING_API_DAT_FILE(94, "Error exporting API-Dat file.", false), ERR_CREATING_APPLICATION(95, "Error creating/updating an application.", false), ERR_PUBLISH_API(96, "API could not be changed to publish state", false), ERR_UNPUBSLISH_API(97, "API could not be changed to unpublish state", false), @@ -69,7 +69,8 @@ public enum ErrorCode { CHECK_CERTS_FOUND_CERTS(101, "Certificates found that will expire within the given number of days.", false), GRANT_ACCESS_APPLICATION_ERR(102, "Error granting application access to API."), REVOKE_ACCESS_APPLICATION_ERR(103, "Error revoking application access to API."), - INVALID_SECURITY_PROFILE_CONFIG(104, "The given security profile is invalid.", false); + INVALID_SECURITY_PROFILE_CONFIG(104, "The given security profile is invalid.", false), + ERR_IMPORTING_API_DAT_FILE(105, "Error importing API-Dat file.", false); private final int code; diff --git a/modules/apim-adapter/src/test/java/com/axway/apim/adapter/apis/APIManagerAPIAdapterTest.java b/modules/apim-adapter/src/test/java/com/axway/apim/adapter/apis/APIManagerAPIAdapterTest.java index 386a968a6..e2c55b206 100644 --- a/modules/apim-adapter/src/test/java/com/axway/apim/adapter/apis/APIManagerAPIAdapterTest.java +++ b/modules/apim-adapter/src/test/java/com/axway/apim/adapter/apis/APIManagerAPIAdapterTest.java @@ -905,4 +905,11 @@ public void filterApiBasedOnStateNoMatch() throws AppException { } + @Test + public void importAPIDatFileTest() throws AppException { + Organization organization = orgAdapter.getOrgForName("orga"); + String filePath = this.getClass().getClassLoader().getResource("com/axway/apim/adapter/api-export.dat").getFile(); + apiManagerAPIAdapter.importAPIDatFile(new File(filePath),"changeme", organization.getId()); + } + } diff --git a/modules/apim-adapter/src/test/resources/com/axway/apim/adapter/api-export.dat b/modules/apim-adapter/src/test/resources/com/axway/apim/adapter/api-export.dat new file mode 100644 index 000000000..3f81fdf25 --- /dev/null +++ b/modules/apim-adapter/src/test/resources/com/axway/apim/adapter/api-export.dat @@ -0,0 +1,910 @@ +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 +lqK8/fYG1fLzeiMB+pNVWjtF0DzZwtLozbgk diff --git a/modules/apim-cli-tests/src/main/resources/wiremock_apim/__files/empty.json b/modules/apim-cli-tests/src/main/resources/wiremock_apim/__files/empty.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/modules/apim-cli-tests/src/main/resources/wiremock_apim/__files/empty.json @@ -0,0 +1 @@ +{} diff --git a/modules/apim-cli-tests/src/main/resources/wiremock_apim/mappings/importDat.json b/modules/apim-cli-tests/src/main/resources/wiremock_apim/mappings/importDat.json new file mode 100644 index 000000000..cfd3b24dd --- /dev/null +++ b/modules/apim-cli-tests/src/main/resources/wiremock_apim/mappings/importDat.json @@ -0,0 +1,13 @@ +{ + "request": { + "method": "POST", + "url": "/api/portal/v1.4/proxies/import" + }, + "response": { + "status": 201, + "bodyFileName": "empty.json", + "headers": { + "Content-Type": "application/json" + } + } +} diff --git a/modules/apis/src/main/java/com/axway/apim/APIImportApp.java b/modules/apis/src/main/java/com/axway/apim/APIImportApp.java index 26b00d513..0e4d620d1 100644 --- a/modules/apis/src/main/java/com/axway/apim/APIImportApp.java +++ b/modules/apis/src/main/java/com/axway/apim/APIImportApp.java @@ -3,11 +3,16 @@ import com.axway.apim.adapter.APIManagerAdapter; import com.axway.apim.adapter.apis.APIFilter; import com.axway.apim.adapter.apis.APIFilter.Builder; +import com.axway.apim.adapter.apis.APIManagerAPIAdapter; +import com.axway.apim.adapter.apis.APIManagerOrganizationAdapter; import com.axway.apim.api.API; +import com.axway.apim.api.model.Organization; import com.axway.apim.apiimport.APIChangeState; import com.axway.apim.apiimport.APIImportConfigAdapter; import com.axway.apim.apiimport.APIImportManager; +import com.axway.apim.apiimport.lib.cli.CLIAPIImportDatOptions; import com.axway.apim.apiimport.lib.cli.CLIAPIImportOptions; +import com.axway.apim.apiimport.lib.params.APIImportDatParams; import com.axway.apim.apiimport.lib.params.APIImportParams; import com.axway.apim.apiimport.rollback.RollbackHandler; import com.axway.apim.cli.APIMCLIServiceProvider; @@ -22,6 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -48,8 +54,36 @@ public static int importAPI(String[] args) { e.logException(LOG); return e.getError().getCode(); } - APIImportApp apiImportApp = new APIImportApp(); - return apiImportApp.importAPI(params); + return new APIImportApp().importAPI(params); + } + + @CLIServiceMethod(name = "import-dat", description = "Import API collection using.dat file.") + public int importDat(String[] args) { + ErrorCodeMapper errorCodeMapper = new ErrorCodeMapper(); + APIManagerAdapter apimAdapter = null; + try { + APIImportDatParams params = (APIImportDatParams) CLIAPIImportDatOptions.create(args).getParams(); + params.validateRequiredParameters(); + String orgName = params.getOrgName(); + apimAdapter = APIManagerAdapter.getInstance(); + APIManagerOrganizationAdapter organizationAdapter = apimAdapter.getOrgAdapter(); + Organization organization = organizationAdapter.getOrgForName(orgName); + if (organization == null) { + throw new AppException("Invalid orgName " + orgName, ErrorCode.UNKNOWN_ORGANIZATION); + } + errorCodeMapper.setMapConfiguration(params.getReturnCodeMapping()); + APIManagerAPIAdapter apimApiAdapter = apimAdapter.getApiAdapter(); + String apiDatFilePath = params.getApiDefinition(); + apimApiAdapter.importAPIDatFile(new File(apiDatFilePath), params.getDatPassword(), organization.getId()); + return 0; + } catch (AppException ap) { + return errorCodeMapper.getMapedErrorCode(ap.getError()).getCode(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + return ErrorCode.UNXPECTED_ERROR.getCode(); + } finally { + Utils.deleteInstance(apimAdapter); + } } public int importAPI(APIImportParams params) { diff --git a/modules/apis/src/main/java/com/axway/apim/apiimport/lib/cli/CLIAPIImportDatOptions.java b/modules/apis/src/main/java/com/axway/apim/apiimport/lib/cli/CLIAPIImportDatOptions.java new file mode 100644 index 000000000..84d26fe04 --- /dev/null +++ b/modules/apis/src/main/java/com/axway/apim/apiimport/lib/cli/CLIAPIImportDatOptions.java @@ -0,0 +1,74 @@ +package com.axway.apim.apiimport.lib.cli; + +import com.axway.apim.apiimport.lib.params.APIImportDatParams; +import com.axway.apim.lib.CLIOptions; +import com.axway.apim.lib.CoreCLIOptions; +import com.axway.apim.lib.Parameters; +import com.axway.apim.lib.StandardImportCLIOptions; +import com.axway.apim.lib.error.AppException; +import com.axway.apim.lib.utils.rest.Console; +import org.apache.commons.cli.Option; + +public class CLIAPIImportDatOptions extends CLIOptions { + + + private CLIAPIImportDatOptions(String[] args) { + super(args); + } + + public static CLIOptions create(String[] args) throws AppException { + CLIOptions cliOptions = new CLIAPIImportDatOptions(args); + cliOptions = new CoreCLIOptions(cliOptions); + cliOptions.addOptions(); + cliOptions.parse(); + return cliOptions; + } + + @Override + public void addOptions() { + // Define command line options required for Application export + Option option = new Option("a", "apidefinition", true, "api collection dat file"); + option.setRequired(true); + option.setArgName("api-export.dat"); + addOption(option); + + option = new Option("orgName", true, "Organization name to use when importing dat file"); + option.setRequired(true); + option.setArgName("*My organization*"); + addOption(option); + + option = new Option("datPassword", true, "Password used when exporting APIs in a DAT-Format."); + option.setRequired(false); + option.setArgName("myExportPassword"); + addOption(option); + + new StandardImportCLIOptions().addOptions(this); + } + + @Override + public void printUsage(String message, String[] args) { + super.printUsage(message, args); + Console.println("----------------------------------------------------------------------------------------"); + Console.println("How to import APIs using dat file"); + Console.println(getBinaryName()+" api import-dat -a api-export.dat -datPassword change me -orgName Development -s api-env"); + Console.println(); + Console.println(); + Console.println("For more information and advanced examples please visit:"); + Console.println("https://github.com/Axway-API-Management-Plus/apim-cli/tree/develop/modules/api-import/assembly/samples"); + Console.println("https://github.com/Axway-API-Management-Plus/apim-cli/wiki"); + } + + @Override + protected String getAppName() { + return "API-Import"; + } + + @Override + public Parameters getParams() { + APIImportDatParams params = new APIImportDatParams(); + params.setApiDefinition(getValue("apidefinition")); + params.setDatPassword(getValue("datPassword")); + params.setOrgName(getValue("orgName")); + return params; + } +} diff --git a/modules/apis/src/main/java/com/axway/apim/apiimport/lib/params/APIImportDatParams.java b/modules/apis/src/main/java/com/axway/apim/apiimport/lib/params/APIImportDatParams.java new file mode 100644 index 000000000..b7056a25a --- /dev/null +++ b/modules/apis/src/main/java/com/axway/apim/apiimport/lib/params/APIImportDatParams.java @@ -0,0 +1,34 @@ +package com.axway.apim.apiimport.lib.params; + +import com.axway.apim.lib.Parameters; +import com.axway.apim.lib.StandardImportParams; + +public class APIImportDatParams extends StandardImportParams implements Parameters { + private String datPassword; + private String orgName; + private String apiDefinition; + + public String getDatPassword() { + return datPassword; + } + + public void setDatPassword(String datPassword) { + this.datPassword = datPassword; + } + + public String getOrgName() { + return orgName; + } + + public void setOrgName(String orgName) { + this.orgName = orgName; + } + + public String getApiDefinition() { + return apiDefinition; + } + + public void setApiDefinition(String apiDefinition) { + this.apiDefinition = apiDefinition; + } +} diff --git a/modules/organizations/src/main/java/com/axway/apim/organization/Constants.java b/modules/organizations/src/main/java/com/axway/apim/organization/Constants.java new file mode 100644 index 000000000..364a3bdd2 --- /dev/null +++ b/modules/organizations/src/main/java/com/axway/apim/organization/Constants.java @@ -0,0 +1,18 @@ +package com.axway.apim.organization; + +public final class Constants { + + private Constants() { + throw new IllegalStateException("Constants class"); + } + + public static final String ORGANIZATION_ID = "Organization-Id"; + public static final String NAME = "Name"; + public static final String V_HOST = "V-Host"; + public static final String DEV = "Dev"; + public static final String EMAIL = "Email"; + public static final String ENABLED = "Enabled"; + public static final String PHONE = "Phone"; + public static final String CREATED_ON = "CreatedOn"; + public static final String VIRTUAL_HOST = "VirtualHost"; +} diff --git a/modules/organizations/src/main/java/com/axway/apim/organization/impl/ConsoleOrgExporter.java b/modules/organizations/src/main/java/com/axway/apim/organization/impl/ConsoleOrgExporter.java index e5a30b897..9a7d3ecd4 100644 --- a/modules/organizations/src/main/java/com/axway/apim/organization/impl/ConsoleOrgExporter.java +++ b/modules/organizations/src/main/java/com/axway/apim/organization/impl/ConsoleOrgExporter.java @@ -17,6 +17,7 @@ import com.axway.apim.lib.error.AppException; import com.axway.apim.lib.error.ErrorCode; import com.axway.apim.lib.utils.rest.Console; +import com.axway.apim.organization.Constants; import com.axway.apim.organization.lib.OrgExportParams; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -24,14 +25,8 @@ public class ConsoleOrgExporter extends OrgResultHandler { - public static final String ORGANIZATION_ID = "Organization-Id"; - public static final String NAME = "Name"; - public static final String V_HOST = "V-Host"; - public static final String DEV = "Dev"; - public static final String EMAIL = "Email"; - public static final String ENABLED = "Enabled"; - APIManagerAdapter adapter; + APIManagerAdapter adapter; Map apiCountPerOrg = null; Map appCountPerOrg = null; @@ -62,23 +57,23 @@ public void export(List orgs) throws AppException { private void printStandard(List orgs) { Console.println(AsciiTable.getTable(borderStyle, orgs, Arrays.asList( - new Column().header(ORGANIZATION_ID).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getId), - new Column().header(NAME).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getName), - new Column().header(V_HOST).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(Organization::getVirtualHost), - new Column().header(DEV).with(org -> Boolean.toString(org.isDevelopment())), - new Column().header(EMAIL).with(Organization::getEmail), - new Column().header(ENABLED).with(org -> Boolean.toString(org.isEnabled())) + new Column().header(Constants.ORGANIZATION_ID).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getId), + new Column().header(Constants.NAME).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getName), + new Column().header(Constants.V_HOST).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(Organization::getVirtualHost), + new Column().header(Constants.DEV).with(org -> Boolean.toString(org.isDevelopment())), + new Column().header(Constants.EMAIL).with(Organization::getEmail), + new Column().header(Constants.ENABLED).with(org -> Boolean.toString(org.isEnabled())) ))); } private void printWide(List orgs) { Console.println(AsciiTable.getTable(borderStyle, orgs, Arrays.asList( - new Column().header(ORGANIZATION_ID).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getId), - new Column().header(NAME).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getName), - new Column().header(V_HOST).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(Organization::getVirtualHost), - new Column().header(DEV).with(org -> Boolean.toString(org.isDevelopment())), - new Column().header(EMAIL).with(Organization::getEmail), - new Column().header(ENABLED).with(org -> Boolean.toString(org.isEnabled())), + new Column().header(Constants.ORGANIZATION_ID).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getId), + new Column().header(Constants.NAME).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getName), + new Column().header(Constants.V_HOST).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(Organization::getVirtualHost), + new Column().header(Constants.DEV).with(org -> Boolean.toString(org.isDevelopment())), + new Column().header(Constants.EMAIL).with(Organization::getEmail), + new Column().header(Constants.ENABLED).with(org -> Boolean.toString(org.isEnabled())), new Column().header("Created on").with(org -> new Date(org.getCreatedOn()).toString()), new Column().header("Restricted").with(org -> Boolean.toString(org.isRestricted())) ))); @@ -86,12 +81,12 @@ private void printWide(List orgs) { private void printUltra(List orgs) { Console.println(AsciiTable.getTable(borderStyle, orgs, Arrays.asList( - new Column().header(ORGANIZATION_ID).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getId), - new Column().header(NAME).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getName), - new Column().header(V_HOST).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(Organization::getVirtualHost), - new Column().header(DEV).with(org -> Boolean.toString(org.isDevelopment())), - new Column().header(EMAIL).with(Organization::getEmail), - new Column().header(ENABLED).with(org -> Boolean.toString(org.isEnabled())), + new Column().header(Constants.ORGANIZATION_ID).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getId), + new Column().header(Constants.NAME).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(AbstractEntity::getName), + new Column().header(Constants.V_HOST).headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT).with(Organization::getVirtualHost), + new Column().header(Constants.DEV).with(org -> Boolean.toString(org.isDevelopment())), + new Column().header(Constants.EMAIL).with(Organization::getEmail), + new Column().header(Constants.ENABLED).with(org -> Boolean.toString(org.isEnabled())), new Column().header("Created on").with(org -> new Date(org.getCreatedOn()).toString()), new Column().header("Restricted").with(org -> Boolean.toString(org.isRestricted())), new Column().header("APIs").with(this::getNoOfAPIsForOrg), diff --git a/modules/organizations/src/main/java/com/axway/apim/organization/impl/CsvOrgExporter.java b/modules/organizations/src/main/java/com/axway/apim/organization/impl/CsvOrgExporter.java new file mode 100644 index 000000000..ffaf89bc5 --- /dev/null +++ b/modules/organizations/src/main/java/com/axway/apim/organization/impl/CsvOrgExporter.java @@ -0,0 +1,180 @@ +package com.axway.apim.organization.impl; + +import com.axway.apim.adapter.apis.OrgFilter; +import com.axway.apim.api.model.APIAccess; +import com.axway.apim.api.model.Organization; +import com.axway.apim.api.model.QuotaRestriction; +import com.axway.apim.lib.ExportResult; +import com.axway.apim.lib.StandardExportParams; +import com.axway.apim.lib.error.AppException; +import com.axway.apim.lib.error.ErrorCode; +import com.axway.apim.lib.utils.Utils; +import com.axway.apim.organization.Constants; +import com.axway.apim.organization.lib.OrgExportParams; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; + +public class CsvOrgExporter extends OrgResultHandler { + + private static final Logger LOG = LoggerFactory.getLogger(CsvOrgExporter.class); + + protected CsvOrgExporter(OrgExportParams params, ExportResult result) { + super(params, result); + } + + @Override + public void export(List organizations) throws AppException { + StandardExportParams.Wide wide = params.getWide(); + String givenTarget = params.getTarget(); + try { + File target = new File(givenTarget); + if (target.isDirectory()) { + target = new File(givenTarget + File.separator + Utils.createFileName(params.getAPIManagerURL().getHost(), params.getStage(), "org_export_")); + } + if (target.exists() && !params.isDeleteTarget()) { + throw new AppException("Targetfile: " + target.getCanonicalPath() + " already exists. You may set the flag -deleteTarget if you wish to overwrite it.", ErrorCode.EXPORT_FOLDER_EXISTS); + } + try (FileWriter appendable = new FileWriter(target)) { + try (CSVPrinter csvPrinter = new CSVPrinter(appendable, CSVFormat.Builder.create().setHeader(HeaderFields.valueOf(wide.name()).fields).build())) { + writeRecords(csvPrinter, organizations, wide); + LOG.info("Organization export successfully written to file: {}", target.getCanonicalPath()); + } + } + } catch (IOException e1) { + throw new AppException("Cant open CSV-File: " + givenTarget + " for writing", ErrorCode.UNXPECTED_ERROR, e1); + } + } + + @Override + public OrgFilter getFilter() throws AppException { + return new OrgFilter.Builder() + .hasId(params.getId()) + .hasDevelopment(params.getDev()) + .includeCustomProperties(getCustomProperties()) + .hasName(params.getName()).build(); + } + + private enum HeaderFields { + standard(new String[]{ + Constants.ORGANIZATION_ID, + Constants.NAME, + Constants.EMAIL, + Constants.PHONE, + Constants.VIRTUAL_HOST, + Constants.ENABLED, + Constants.DEV, + Constants.CREATED_ON + }), + wide(new String[]{ + Constants.ORGANIZATION_ID, + Constants.NAME, + Constants.EMAIL, + Constants.PHONE, + Constants.VIRTUAL_HOST, + Constants.VIRTUAL_HOST, + Constants.ENABLED, + Constants.DEV, + Constants.CREATED_ON, + "Custom-Properties" + }), + ultra(new String[]{ + Constants.ORGANIZATION_ID, + Constants.NAME, + Constants.EMAIL, + Constants.PHONE, + Constants.VIRTUAL_HOST, + Constants.VIRTUAL_HOST, + Constants.ENABLED, + Constants.DEV, + Constants.CREATED_ON, + "Custom-Properties", + "API-Name", + "API-Version", + "State", + "API Status" + }); + + final String[] fields; + + HeaderFields(String[] headerFields) { + this.fields = headerFields; + } + } + + private void writeRecords(CSVPrinter csvPrinter, List organizations, StandardExportParams.Wide wide) throws IOException { + int i = 0; + for (Organization organization : organizations) { + if (i % 50 == 0) { + csvPrinter.flush(); + } + // With wide - Report the application quotas + if (wide.equals(StandardExportParams.Wide.wide)) { + // With ultra - Report all subscribed APIs + } else if (wide.equals(StandardExportParams.Wide.ultra)) { + for (APIAccess apiAccess : organization.getApiAccess()) { + writeRecords(csvPrinter, organization, apiAccess, wide); + } + } else { + writeRecords(csvPrinter, organization, null, wide); + } + i++; + } + csvPrinter.flush(); + } + + private void writeRecords(CSVPrinter csvPrinter, Organization organization, APIAccess apiAccess, StandardExportParams.Wide wide) throws IOException { + switch (wide) { + case standard: + writeStandardToCSV(csvPrinter, organization); + break; + case wide: + writeWideToCSV(csvPrinter, organization, null); + break; + case ultra: + writeUltraToCSV(csvPrinter, organization, apiAccess); + break; + default: + break; + } + } + + private void writeStandardToCSV(CSVPrinter csvPrinter, Organization organization) throws IOException { + csvPrinter.printRecord( + organization.getId(), + organization.getName(), + organization.getEmail(), + organization.getPhone(), + organization.isEnabled() + ); + } + + private void writeWideToCSV(CSVPrinter csvPrinter, Organization organization, QuotaRestriction quotaRestriction) throws IOException { + csvPrinter.printRecord( + organization.getId(), + organization.getName(), + organization.getEmail(), + organization.getPhone(), + organization.isEnabled() + ); + } + + private void writeUltraToCSV(CSVPrinter csvPrinter, Organization organization, APIAccess apiAccess) throws IOException { + csvPrinter.printRecord( + organization.getId(), + organization.getName(), + organization.getEmail(), + organization.getPhone(), + organization.isEnabled(), + apiAccess.getApiName(), + apiAccess.getApiVersion() + ); + } + +} diff --git a/modules/organizations/src/main/java/com/axway/apim/organization/impl/OrgResultHandler.java b/modules/organizations/src/main/java/com/axway/apim/organization/impl/OrgResultHandler.java index e520ee9b8..012868c29 100644 --- a/modules/organizations/src/main/java/com/axway/apim/organization/impl/OrgResultHandler.java +++ b/modules/organizations/src/main/java/com/axway/apim/organization/impl/OrgResultHandler.java @@ -25,6 +25,7 @@ public enum ResultHandler { JSON_EXPORTER(JsonOrgExporter.class), YAML_EXPORTER(YamlOrgExporter.class), CONSOLE_EXPORTER(ConsoleOrgExporter.class), + CSV_EXPORTER(CsvOrgExporter.class), ORG_DELETE_HANDLER(DeleteOrgHandler.class); private final Class implClass;