From 805224a5b1da3a7ef8865052152be864d0670b55 Mon Sep 17 00:00:00 2001 From: Vivian Varela Date: Thu, 5 Jun 2025 16:33:39 -0300 Subject: [PATCH 1/4] adding feature set status for developer --- .../resources/edge/org/developers.json | 24 +++++--- .../edge/api/forecastweatherapi/kvms.json | 0 .../edge/api/oauth/kvms.json | 0 .../edge/env/dev/aliases.json | 0 .../edge/env/dev/flowhooks.json | 0 .../edge/env/dev/keystores.json | 0 .../edge/env/dev/kvms.json | 0 .../edge/env/dev/references.json | 0 .../edge/env/dev/resourcefiles.json | 0 .../edge/env/dev/targetServers.json | 0 .../edge/env/prod/flowhooks.json | 0 .../edge/env/test/aliases.json | 0 .../edge/env/test/flowhooks.json | 0 .../edge/env/test/keystores.json | 0 .../edge/env/test/kvms.json | 0 .../edge/env/test/references.json | 0 .../edge/env/test/resourcefiles.json | 0 .../edge/env/test/targetServers.json | 0 .../edge/org/apiCategories.json | 0 .../edge/org/apiDocs.json | 0 .../edge/org/apiProducts.json | 0 .../edge/org/appGroupApps.json | 0 .../edge/org/appGroups.json | 0 .../edge/org/developerApps.json | 0 .../resourcessample/edge/org/developers.json | 9 +++ .../edge/org/importAppGroupAppKeys.json | 0 .../edge/org/importKeys.json | 0 .../edge/org/kvms.json | 0 .../edge/org/ratePlans.json | 0 .../edge/org/reports.json | 0 .../edge/org/spaces.json | 0 samples/EdgeConfig/shared-pom.xml | 2 +- .../config/mavenplugin/DeveloperMojo.java | 60 +++++++++++++++++-- .../com/apigee/edge/config/rest/RestUtil.java | 23 ++++++- 34 files changed, 104 insertions(+), 14 deletions(-) rename samples/EdgeConfig/{resources => resourcessample}/edge/api/forecastweatherapi/kvms.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/api/oauth/kvms.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/aliases.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/flowhooks.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/keystores.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/kvms.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/references.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/resourcefiles.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/dev/targetServers.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/prod/flowhooks.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/aliases.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/flowhooks.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/keystores.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/kvms.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/references.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/resourcefiles.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/env/test/targetServers.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/apiCategories.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/apiDocs.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/apiProducts.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/appGroupApps.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/appGroups.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/developerApps.json (100%) create mode 100644 samples/EdgeConfig/resourcessample/edge/org/developers.json rename samples/EdgeConfig/{resources => resourcessample}/edge/org/importAppGroupAppKeys.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/importKeys.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/kvms.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/ratePlans.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/reports.json (100%) rename samples/EdgeConfig/{resources => resourcessample}/edge/org/spaces.json (100%) diff --git a/samples/EdgeConfig/resources/edge/org/developers.json b/samples/EdgeConfig/resources/edge/org/developers.json index 6ba7997..19d357d 100644 --- a/samples/EdgeConfig/resources/edge/org/developers.json +++ b/samples/EdgeConfig/resources/edge/org/developers.json @@ -1,9 +1,17 @@ -[ - { - "attributes": [], - "email": "hugh@example.com", - "firstName": "Hugh", - "lastName": "Jack", - "userName": "hughexample" - } +[ + { + "email": "hugh@example.com", + "firstName": "Hugh", + "lastName": "Jack", + "userName": "hughexample", + "status": "inactive", + "developerId": "9d341886-64df-45a2-b781-a785c1fbf7e9" + }, + { + "email": "shak@example.com", + "firstName": "Shakira", + "lastName": "Mebarak", + "userName": "shakira", + "status": "active" + } ] \ No newline at end of file diff --git a/samples/EdgeConfig/resources/edge/api/forecastweatherapi/kvms.json b/samples/EdgeConfig/resourcessample/edge/api/forecastweatherapi/kvms.json similarity index 100% rename from samples/EdgeConfig/resources/edge/api/forecastweatherapi/kvms.json rename to samples/EdgeConfig/resourcessample/edge/api/forecastweatherapi/kvms.json diff --git a/samples/EdgeConfig/resources/edge/api/oauth/kvms.json b/samples/EdgeConfig/resourcessample/edge/api/oauth/kvms.json similarity index 100% rename from samples/EdgeConfig/resources/edge/api/oauth/kvms.json rename to samples/EdgeConfig/resourcessample/edge/api/oauth/kvms.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/aliases.json b/samples/EdgeConfig/resourcessample/edge/env/dev/aliases.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/aliases.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/aliases.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/flowhooks.json b/samples/EdgeConfig/resourcessample/edge/env/dev/flowhooks.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/flowhooks.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/flowhooks.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/keystores.json b/samples/EdgeConfig/resourcessample/edge/env/dev/keystores.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/keystores.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/keystores.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/kvms.json b/samples/EdgeConfig/resourcessample/edge/env/dev/kvms.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/kvms.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/kvms.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/references.json b/samples/EdgeConfig/resourcessample/edge/env/dev/references.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/references.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/references.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/resourcefiles.json b/samples/EdgeConfig/resourcessample/edge/env/dev/resourcefiles.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/resourcefiles.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/resourcefiles.json diff --git a/samples/EdgeConfig/resources/edge/env/dev/targetServers.json b/samples/EdgeConfig/resourcessample/edge/env/dev/targetServers.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/dev/targetServers.json rename to samples/EdgeConfig/resourcessample/edge/env/dev/targetServers.json diff --git a/samples/EdgeConfig/resources/edge/env/prod/flowhooks.json b/samples/EdgeConfig/resourcessample/edge/env/prod/flowhooks.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/prod/flowhooks.json rename to samples/EdgeConfig/resourcessample/edge/env/prod/flowhooks.json diff --git a/samples/EdgeConfig/resources/edge/env/test/aliases.json b/samples/EdgeConfig/resourcessample/edge/env/test/aliases.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/aliases.json rename to samples/EdgeConfig/resourcessample/edge/env/test/aliases.json diff --git a/samples/EdgeConfig/resources/edge/env/test/flowhooks.json b/samples/EdgeConfig/resourcessample/edge/env/test/flowhooks.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/flowhooks.json rename to samples/EdgeConfig/resourcessample/edge/env/test/flowhooks.json diff --git a/samples/EdgeConfig/resources/edge/env/test/keystores.json b/samples/EdgeConfig/resourcessample/edge/env/test/keystores.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/keystores.json rename to samples/EdgeConfig/resourcessample/edge/env/test/keystores.json diff --git a/samples/EdgeConfig/resources/edge/env/test/kvms.json b/samples/EdgeConfig/resourcessample/edge/env/test/kvms.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/kvms.json rename to samples/EdgeConfig/resourcessample/edge/env/test/kvms.json diff --git a/samples/EdgeConfig/resources/edge/env/test/references.json b/samples/EdgeConfig/resourcessample/edge/env/test/references.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/references.json rename to samples/EdgeConfig/resourcessample/edge/env/test/references.json diff --git a/samples/EdgeConfig/resources/edge/env/test/resourcefiles.json b/samples/EdgeConfig/resourcessample/edge/env/test/resourcefiles.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/resourcefiles.json rename to samples/EdgeConfig/resourcessample/edge/env/test/resourcefiles.json diff --git a/samples/EdgeConfig/resources/edge/env/test/targetServers.json b/samples/EdgeConfig/resourcessample/edge/env/test/targetServers.json similarity index 100% rename from samples/EdgeConfig/resources/edge/env/test/targetServers.json rename to samples/EdgeConfig/resourcessample/edge/env/test/targetServers.json diff --git a/samples/EdgeConfig/resources/edge/org/apiCategories.json b/samples/EdgeConfig/resourcessample/edge/org/apiCategories.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/apiCategories.json rename to samples/EdgeConfig/resourcessample/edge/org/apiCategories.json diff --git a/samples/EdgeConfig/resources/edge/org/apiDocs.json b/samples/EdgeConfig/resourcessample/edge/org/apiDocs.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/apiDocs.json rename to samples/EdgeConfig/resourcessample/edge/org/apiDocs.json diff --git a/samples/EdgeConfig/resources/edge/org/apiProducts.json b/samples/EdgeConfig/resourcessample/edge/org/apiProducts.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/apiProducts.json rename to samples/EdgeConfig/resourcessample/edge/org/apiProducts.json diff --git a/samples/EdgeConfig/resources/edge/org/appGroupApps.json b/samples/EdgeConfig/resourcessample/edge/org/appGroupApps.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/appGroupApps.json rename to samples/EdgeConfig/resourcessample/edge/org/appGroupApps.json diff --git a/samples/EdgeConfig/resources/edge/org/appGroups.json b/samples/EdgeConfig/resourcessample/edge/org/appGroups.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/appGroups.json rename to samples/EdgeConfig/resourcessample/edge/org/appGroups.json diff --git a/samples/EdgeConfig/resources/edge/org/developerApps.json b/samples/EdgeConfig/resourcessample/edge/org/developerApps.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/developerApps.json rename to samples/EdgeConfig/resourcessample/edge/org/developerApps.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/developers.json b/samples/EdgeConfig/resourcessample/edge/org/developers.json new file mode 100644 index 0000000..6ba7997 --- /dev/null +++ b/samples/EdgeConfig/resourcessample/edge/org/developers.json @@ -0,0 +1,9 @@ +[ + { + "attributes": [], + "email": "hugh@example.com", + "firstName": "Hugh", + "lastName": "Jack", + "userName": "hughexample" + } +] \ No newline at end of file diff --git a/samples/EdgeConfig/resources/edge/org/importAppGroupAppKeys.json b/samples/EdgeConfig/resourcessample/edge/org/importAppGroupAppKeys.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/importAppGroupAppKeys.json rename to samples/EdgeConfig/resourcessample/edge/org/importAppGroupAppKeys.json diff --git a/samples/EdgeConfig/resources/edge/org/importKeys.json b/samples/EdgeConfig/resourcessample/edge/org/importKeys.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/importKeys.json rename to samples/EdgeConfig/resourcessample/edge/org/importKeys.json diff --git a/samples/EdgeConfig/resources/edge/org/kvms.json b/samples/EdgeConfig/resourcessample/edge/org/kvms.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/kvms.json rename to samples/EdgeConfig/resourcessample/edge/org/kvms.json diff --git a/samples/EdgeConfig/resources/edge/org/ratePlans.json b/samples/EdgeConfig/resourcessample/edge/org/ratePlans.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/ratePlans.json rename to samples/EdgeConfig/resourcessample/edge/org/ratePlans.json diff --git a/samples/EdgeConfig/resources/edge/org/reports.json b/samples/EdgeConfig/resourcessample/edge/org/reports.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/reports.json rename to samples/EdgeConfig/resourcessample/edge/org/reports.json diff --git a/samples/EdgeConfig/resources/edge/org/spaces.json b/samples/EdgeConfig/resourcessample/edge/org/spaces.json similarity index 100% rename from samples/EdgeConfig/resources/edge/org/spaces.json rename to samples/EdgeConfig/resourcessample/edge/org/spaces.json diff --git a/samples/EdgeConfig/shared-pom.xml b/samples/EdgeConfig/shared-pom.xml index 9c8ae12..e713c30 100644 --- a/samples/EdgeConfig/shared-pom.xml +++ b/samples/EdgeConfig/shared-pom.xml @@ -26,7 +26,7 @@ com.apigee.edge.config apigee-config-maven-plugin - 2.9.3 + 2.9.4-SNAPSHOT create-config-targetserver diff --git a/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java b/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java index f0f44bd..4d76df2 100644 --- a/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java +++ b/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java @@ -250,15 +250,33 @@ public static String updateDeveloper(ServerProfile profile, developerId, developer); try { - + String payload = response.parseAsString(); logger.info("Response " + response.getContentType() + "\n" + - response.parseAsString()); + payload); if (response.isSuccessStatusCode()) - logger.info("Update Success."); - + logger.info("Update Success Test New Code 2."); + + logger.debug("output " + response.getContentType()); + // response can be read only once + logger.info("Debug: Finished the updating of developer"); + + JSONParser parser = new JSONParser(); + JSONObject devPayload = (JSONObject)parser.parse(payload); + logger.info("This is the payload: " + payload + "\n" + devPayload); + JSONObject devJson = (JSONObject)parser.parse(developer); + logger.info("This is the json: " + devJson); + if (!devPayload.get("status").equals(devJson.get("status")) + ) + { + setDeveloperStatus(profile, (String) devPayload.get("developerId"), (String) devJson.get("status")); + } + } catch (HttpResponseException e) { logger.error("Developer update error " + e.getMessage()); throw new IOException(e.getMessage()); + } catch (ParseException pe){ + logger.error("Get Developer parse error " + pe.getMessage()); + throw new IOException(pe.getMessage()); } return ""; @@ -286,6 +304,40 @@ public static String deleteDeveloper(ServerProfile profile, return ""; } + public static String setDeveloperStatus(ServerProfile profile, + String developerId, + String action) + throws IOException { + RestUtil restUtil = new RestUtil(profile); + + logger.info("Setting developer status to: " + action); + + HttpResponse response = restUtil.updateDeveloperStatus(profile, + "developers", + developerId, + action); + logger.info("Response ", response); + try { + + logger.info("Response " + response.getContentType() + "\n" + + response.parseAsString()); + if (response.isSuccessStatusCode()) + logger.info("Update Status."); + else { + String errorBody = response.parseAsString(); + logger.error("Developer update failed with status code " + response.getStatusCode() + ": " + errorBody); + throw new IOException("Failed to update developer status. Status: " + response.getStatusCode() + ", Message: " + errorBody); + } + + } catch (HttpResponseException e) { + logger.error("Developer update error " + e.getMessage(), e); + throw new IOException("Developer update failed: " + e.getMessage(), e); + } + + return ""; + } + + public static List getDeveloper(ServerProfile profile) throws IOException { RestUtil restUtil = new RestUtil(profile); diff --git a/src/main/java/com/apigee/edge/config/rest/RestUtil.java b/src/main/java/com/apigee/edge/config/rest/RestUtil.java index 2aeba3a..b81b40e 100644 --- a/src/main/java/com/apigee/edge/config/rest/RestUtil.java +++ b/src/main/java/com/apigee/edge/config/rest/RestUtil.java @@ -189,6 +189,19 @@ public HttpResponse createEnvConfig(ServerProfile profile, return executeAPIPost(profile, payload, importCmd); } + public HttpResponse updateDeveloperStatus(ServerProfile profile, + String resource, + String developerId, + String action) + throws IOException { + String cmd = profile.getHostUrl() + "/" + + profile.getApi_version() + "/organizations/" + + profile.getOrg() + "/developers/" + + URLEncoder.encode(developerId, "UTF-8") + "?action=" + action; + + return executeAPIPost(profile, "", cmd, "application/octet-stream"); + } + public HttpResponse createEnvConfigWithParameters(ServerProfile profile, String resource, String resourceId, String subResource, Map parameters, String payload) throws IOException { @@ -1249,7 +1262,15 @@ private HttpResponse executeAPIPost(ServerProfile profile, String payload, String importCmd) throws IOException { - ByteArrayContent content = new ByteArrayContent("application/json", + + return executeAPIPost(profile, payload, importCmd, "application/json"); + } + + private HttpResponse executeAPIPost(ServerProfile profile, String payload, + String importCmd, String contentType) + throws IOException { + + ByteArrayContent content = new ByteArrayContent(contentType, payload.getBytes()); HttpRequest restRequest = REQUEST_FACTORY From 639081cd3a826b82c7d58dfc32a8b54b0882c050 Mon Sep 17 00:00:00 2001 From: Vivian Varela Date: Fri, 6 Jun 2025 18:03:01 -0300 Subject: [PATCH 2/4] update: add support to empty status on json --- .../resources/edge/org/developers.json | 4 +- .../config/mavenplugin/DeveloperMojo.java | 112 +++++++++++------- 2 files changed, 73 insertions(+), 43 deletions(-) diff --git a/samples/EdgeConfig/resources/edge/org/developers.json b/samples/EdgeConfig/resources/edge/org/developers.json index 19d357d..e874d0b 100644 --- a/samples/EdgeConfig/resources/edge/org/developers.json +++ b/samples/EdgeConfig/resources/edge/org/developers.json @@ -3,9 +3,7 @@ "email": "hugh@example.com", "firstName": "Hugh", "lastName": "Jack", - "userName": "hughexample", - "status": "inactive", - "developerId": "9d341886-64df-45a2-b781-a785c1fbf7e9" + "userName": "hughexample" }, { "email": "shak@example.com", diff --git a/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java b/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java index 4d76df2..e73426a 100644 --- a/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java +++ b/src/main/java/com/apigee/edge/config/mavenplugin/DeveloperMojo.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.maven.plugin.MojoExecutionException; @@ -35,6 +36,8 @@ import com.google.api.client.http.HttpResponseException; import com.google.api.client.util.Key; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParser; import com.google.gson.JsonParseException; /** ¡¡ @@ -250,27 +253,41 @@ public static String updateDeveloper(ServerProfile profile, developerId, developer); try { - String payload = response.parseAsString(); - logger.info("Response " + response.getContentType() + "\n" + - payload); - if (response.isSuccessStatusCode()) - logger.info("Update Success Test New Code 2."); - - logger.debug("output " + response.getContentType()); - // response can be read only once - logger.info("Debug: Finished the updating of developer"); + String initialUpdateResponsePayload = response.parseAsString(); + //if (response.isSuccessStatusCode()) + //logger.info("Update Success."); + //logger.debug("output " + response.getContentType()); JSONParser parser = new JSONParser(); - JSONObject devPayload = (JSONObject)parser.parse(payload); - logger.info("This is the payload: " + payload + "\n" + devPayload); - JSONObject devJson = (JSONObject)parser.parse(developer); - logger.info("This is the json: " + devJson); - if (!devPayload.get("status").equals(devJson.get("status")) - ) - { - setDeveloperStatus(profile, (String) devPayload.get("developerId"), (String) devJson.get("status")); + JSONObject devPayloadFromServer = (JSONObject)parser.parse(initialUpdateResponsePayload); + JSONObject devJsonFromConfig = (JSONObject)parser.parse(developer); + + String finalPayloadToLog = initialUpdateResponsePayload; // Default to the initial response + + Object statusFromServerObj = devPayloadFromServer.get("status"); + Object statusFromConfigObj = devJsonFromConfig.get("status"); + + String statusFromServer = (statusFromServerObj == null) ? null : statusFromServerObj.toString(); + String statusFromConfig = (statusFromConfigObj == null) ? null : statusFromConfigObj.toString(); + + // Check if status needs to be updated + if (statusFromConfig != null && !statusFromConfig.trim().isEmpty()) { + if (!statusFromConfig.equals(statusFromServer)) { + logger.info("Developer " + developerId + ": status differs. Server: \"" + statusFromServer + "\", Config: \"" + statusFromConfig + "\". Updating status."); + // setDeveloperStatus returns the response payload of the status update call + /* String statusUpdateResponse = */ setDeveloperStatus(profile, (String) devPayloadFromServer.get("developerId"), (String) devJsonFromConfig.get("status")); + // Update our local representation of the developer payload to reflect the change. + devPayloadFromServer.put("status", statusFromConfig); + finalPayloadToLog = new GsonBuilder().setPrettyPrinting().create().toJson(devPayloadFromServer); + } else { + logger.info("Developer " + developerId + ": status in config matches server status (\"" + statusFromServer + "\"). No status change needed."); } - + } else { + logger.warn("Developer " + developerId + ": 'status' field is missing, null, or empty in the configuration. Skipping status update. Current server status: \"" + statusFromServer + "\""); + } + logger.info("Response " + response.getContentType() + "\n" + + finalPayloadToLog); + logger.info("Update Success."); } catch (HttpResponseException e) { logger.error("Developer update error " + e.getMessage()); throw new IOException(e.getMessage()); @@ -310,38 +327,37 @@ public static String setDeveloperStatus(ServerProfile profile, throws IOException { RestUtil restUtil = new RestUtil(profile); - logger.info("Setting developer status to: " + action); + HttpResponse response = restUtil.updateDeveloperStatus(profile, "developers", developerId, action); - logger.info("Response ", response); - try { - + try { + String statusUpdateResponsePayload = response.parseAsString(); // Parse only once + logger.info("Setting developer status to: " + action); logger.info("Response " + response.getContentType() + "\n" + - response.parseAsString()); - if (response.isSuccessStatusCode()) - logger.info("Update Status."); - else { - String errorBody = response.parseAsString(); - logger.error("Developer update failed with status code " + response.getStatusCode() + ": " + errorBody); - throw new IOException("Failed to update developer status. Status: " + response.getStatusCode() + ", Message: " + errorBody); + statusUpdateResponsePayload); // Use parsed payload + if (response.isSuccessStatusCode()) { + logger.info("Developer status successfully updated to: " + action); + } else { + // Use the already parsed payload for the error message + logger.error("Developer status update failed with status code " + response.getStatusCode() + ": " + statusUpdateResponsePayload); + throw new IOException("Failed to update developer status. Status: " + response.getStatusCode() + ", Message: " + statusUpdateResponsePayload); } - } catch (HttpResponseException e) { - logger.error("Developer update error " + e.getMessage(), e); - throw new IOException("Developer update failed: " + e.getMessage(), e); + logger.error("Developer status update error " + e.getMessage(), e); + throw new IOException("Developer status update failed: " + e.getMessage(), e); } - - return ""; + // Return the response from the status update call + return ""; } public static List getDeveloper(ServerProfile profile) throws IOException { RestUtil restUtil = new RestUtil(profile); - HttpResponse response = restUtil.getOrgConfig(profile, "developers"); + HttpResponse response = restUtil.getOrgConfig(profile, "developers"); // Fetches list of developers if(response == null) return new ArrayList(); JSONArray developers = new JSONArray(); try { @@ -366,13 +382,33 @@ public static List getDeveloper(ServerProfile profile) return developers; } + + // Helper method to get the latest details of a specific developer + public static String getDeveloperDetails(ServerProfile profile, String developerEmail) + throws IOException { + RestUtil restUtil = new RestUtil(profile); + logger.info("Fetching details for developer - " + developerEmail); + HttpResponse response = restUtil.getOrgConfig(profile, "developers/" + URLEncoder.encode(developerEmail, "UTF-8")); + if (response == null) { + logger.warn("No response from server when fetching details for developer " + developerEmail); + return null; + } + try { + String payload = response.parseAsString(); + logger.debug("Developer details payload for " + developerEmail + ": " + payload); + return payload; + } catch (HttpResponseException e) { + logger.error("Get Developer details error for " + developerEmail + ": " + e.getMessage()); + throw new IOException("Failed to get developer details for " + developerEmail + ": " + e.getMessage(), e); + } + } public static boolean doesDeveloperExist(ServerProfile profile, String developerEmail) throws IOException { try { RestUtil restUtil = new RestUtil(profile); logger.info("Checking if developer - " +developerEmail + " exist"); - HttpResponse response = restUtil.getOrgConfig(profile, "developers/"+URLEncoder.encode(developerEmail, "UTF-8")); + HttpResponse response = restUtil.getOrgConfig(profile, "developers/" + URLEncoder.encode(developerEmail, "UTF-8")); if(response == null) return false; } catch (HttpResponseException e) { @@ -382,7 +418,3 @@ public static boolean doesDeveloperExist(ServerProfile profile, String developer return true; } } - - - - From 4f09afc74f6a419bef5e702171aeac3f8152233d Mon Sep 17 00:00:00 2001 From: Vivian Varela Date: Fri, 6 Jun 2025 18:08:30 -0300 Subject: [PATCH 3/4] update: add support to empty status on json --- README.md | 1 - .../edge/api/forecastweatherapi/kvms.json | 0 .../edge/api/oauth/kvms.json | 0 .../edge/env/dev/aliases.json | 0 .../edge/env/dev/flowhooks.json | 0 .../edge/env/dev/keystores.json | 0 .../edge/env/dev/kvms.json | 0 .../edge/env/dev/references.json | 0 .../edge/env/dev/resourcefiles.json | 0 .../edge/env/dev/targetServers.json | 0 .../edge/env/prod/flowhooks.json | 0 .../edge/env/test/aliases.json | 0 .../edge/env/test/flowhooks.json | 0 .../edge/env/test/keystores.json | 0 .../edge/env/test/kvms.json | 0 .../edge/env/test/references.json | 0 .../edge/env/test/resourcefiles.json | 0 .../edge/env/test/targetServers.json | 0 .../edge/org/apiCategories.json | 0 .../edge/org/apiDocs.json | 0 .../edge/org/apiProducts.json | 0 .../edge/org/appGroupApps.json | 0 .../edge/org/appGroups.json | 0 .../edge/org/developerApps.json | 0 .../resources/edge/org/developers.json | 23 ++++++++----------- .../edge/org/importAppGroupAppKeys.json | 0 .../edge/org/importKeys.json | 0 .../edge/org/kvms.json | 0 .../edge/org/ratePlans.json | 0 .../edge/org/reports.json | 0 .../edge/org/spaces.json | 0 .../resourcesbackup/edge/org/developers.json | 15 ++++++++++++ .../resourcessample/edge/org/developers.json | 9 -------- 33 files changed, 24 insertions(+), 24 deletions(-) rename samples/EdgeConfig/{resourcessample => resources}/edge/api/forecastweatherapi/kvms.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/api/oauth/kvms.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/aliases.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/flowhooks.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/keystores.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/kvms.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/references.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/resourcefiles.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/dev/targetServers.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/prod/flowhooks.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/aliases.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/flowhooks.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/keystores.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/kvms.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/references.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/resourcefiles.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/env/test/targetServers.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/apiCategories.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/apiDocs.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/apiProducts.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/appGroupApps.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/appGroups.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/developerApps.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/importAppGroupAppKeys.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/importKeys.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/kvms.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/ratePlans.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/reports.json (100%) rename samples/EdgeConfig/{resourcessample => resources}/edge/org/spaces.json (100%) create mode 100644 samples/EdgeConfig/resourcesbackup/edge/org/developers.json delete mode 100644 samples/EdgeConfig/resourcessample/edge/org/developers.json diff --git a/README.md b/README.md index ee87b79..3d33bb5 100644 --- a/README.md +++ b/README.md @@ -242,4 +242,3 @@ Apigee customers should use [formal support channels](https://cloud.google.com/a ## Disclaimer This is not an officially supported Google product. - diff --git a/samples/EdgeConfig/resourcessample/edge/api/forecastweatherapi/kvms.json b/samples/EdgeConfig/resources/edge/api/forecastweatherapi/kvms.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/api/forecastweatherapi/kvms.json rename to samples/EdgeConfig/resources/edge/api/forecastweatherapi/kvms.json diff --git a/samples/EdgeConfig/resourcessample/edge/api/oauth/kvms.json b/samples/EdgeConfig/resources/edge/api/oauth/kvms.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/api/oauth/kvms.json rename to samples/EdgeConfig/resources/edge/api/oauth/kvms.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/aliases.json b/samples/EdgeConfig/resources/edge/env/dev/aliases.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/aliases.json rename to samples/EdgeConfig/resources/edge/env/dev/aliases.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/flowhooks.json b/samples/EdgeConfig/resources/edge/env/dev/flowhooks.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/flowhooks.json rename to samples/EdgeConfig/resources/edge/env/dev/flowhooks.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/keystores.json b/samples/EdgeConfig/resources/edge/env/dev/keystores.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/keystores.json rename to samples/EdgeConfig/resources/edge/env/dev/keystores.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/kvms.json b/samples/EdgeConfig/resources/edge/env/dev/kvms.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/kvms.json rename to samples/EdgeConfig/resources/edge/env/dev/kvms.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/references.json b/samples/EdgeConfig/resources/edge/env/dev/references.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/references.json rename to samples/EdgeConfig/resources/edge/env/dev/references.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/resourcefiles.json b/samples/EdgeConfig/resources/edge/env/dev/resourcefiles.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/resourcefiles.json rename to samples/EdgeConfig/resources/edge/env/dev/resourcefiles.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/dev/targetServers.json b/samples/EdgeConfig/resources/edge/env/dev/targetServers.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/dev/targetServers.json rename to samples/EdgeConfig/resources/edge/env/dev/targetServers.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/prod/flowhooks.json b/samples/EdgeConfig/resources/edge/env/prod/flowhooks.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/prod/flowhooks.json rename to samples/EdgeConfig/resources/edge/env/prod/flowhooks.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/aliases.json b/samples/EdgeConfig/resources/edge/env/test/aliases.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/aliases.json rename to samples/EdgeConfig/resources/edge/env/test/aliases.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/flowhooks.json b/samples/EdgeConfig/resources/edge/env/test/flowhooks.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/flowhooks.json rename to samples/EdgeConfig/resources/edge/env/test/flowhooks.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/keystores.json b/samples/EdgeConfig/resources/edge/env/test/keystores.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/keystores.json rename to samples/EdgeConfig/resources/edge/env/test/keystores.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/kvms.json b/samples/EdgeConfig/resources/edge/env/test/kvms.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/kvms.json rename to samples/EdgeConfig/resources/edge/env/test/kvms.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/references.json b/samples/EdgeConfig/resources/edge/env/test/references.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/references.json rename to samples/EdgeConfig/resources/edge/env/test/references.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/resourcefiles.json b/samples/EdgeConfig/resources/edge/env/test/resourcefiles.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/resourcefiles.json rename to samples/EdgeConfig/resources/edge/env/test/resourcefiles.json diff --git a/samples/EdgeConfig/resourcessample/edge/env/test/targetServers.json b/samples/EdgeConfig/resources/edge/env/test/targetServers.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/env/test/targetServers.json rename to samples/EdgeConfig/resources/edge/env/test/targetServers.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/apiCategories.json b/samples/EdgeConfig/resources/edge/org/apiCategories.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/apiCategories.json rename to samples/EdgeConfig/resources/edge/org/apiCategories.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/apiDocs.json b/samples/EdgeConfig/resources/edge/org/apiDocs.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/apiDocs.json rename to samples/EdgeConfig/resources/edge/org/apiDocs.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/apiProducts.json b/samples/EdgeConfig/resources/edge/org/apiProducts.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/apiProducts.json rename to samples/EdgeConfig/resources/edge/org/apiProducts.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/appGroupApps.json b/samples/EdgeConfig/resources/edge/org/appGroupApps.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/appGroupApps.json rename to samples/EdgeConfig/resources/edge/org/appGroupApps.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/appGroups.json b/samples/EdgeConfig/resources/edge/org/appGroups.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/appGroups.json rename to samples/EdgeConfig/resources/edge/org/appGroups.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/developerApps.json b/samples/EdgeConfig/resources/edge/org/developerApps.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/developerApps.json rename to samples/EdgeConfig/resources/edge/org/developerApps.json diff --git a/samples/EdgeConfig/resources/edge/org/developers.json b/samples/EdgeConfig/resources/edge/org/developers.json index e874d0b..0332257 100644 --- a/samples/EdgeConfig/resources/edge/org/developers.json +++ b/samples/EdgeConfig/resources/edge/org/developers.json @@ -1,15 +1,10 @@ -[ - { - "email": "hugh@example.com", - "firstName": "Hugh", - "lastName": "Jack", - "userName": "hughexample" - }, - { - "email": "shak@example.com", - "firstName": "Shakira", - "lastName": "Mebarak", - "userName": "shakira", - "status": "active" - } +[ + { + "attributes": [], + "email": "hugh@example.com", + "firstName": "Hugh", + "lastName": "Jack", + "userName": "hughexample", + "status": "active" + } ] \ No newline at end of file diff --git a/samples/EdgeConfig/resourcessample/edge/org/importAppGroupAppKeys.json b/samples/EdgeConfig/resources/edge/org/importAppGroupAppKeys.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/importAppGroupAppKeys.json rename to samples/EdgeConfig/resources/edge/org/importAppGroupAppKeys.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/importKeys.json b/samples/EdgeConfig/resources/edge/org/importKeys.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/importKeys.json rename to samples/EdgeConfig/resources/edge/org/importKeys.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/kvms.json b/samples/EdgeConfig/resources/edge/org/kvms.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/kvms.json rename to samples/EdgeConfig/resources/edge/org/kvms.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/ratePlans.json b/samples/EdgeConfig/resources/edge/org/ratePlans.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/ratePlans.json rename to samples/EdgeConfig/resources/edge/org/ratePlans.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/reports.json b/samples/EdgeConfig/resources/edge/org/reports.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/reports.json rename to samples/EdgeConfig/resources/edge/org/reports.json diff --git a/samples/EdgeConfig/resourcessample/edge/org/spaces.json b/samples/EdgeConfig/resources/edge/org/spaces.json similarity index 100% rename from samples/EdgeConfig/resourcessample/edge/org/spaces.json rename to samples/EdgeConfig/resources/edge/org/spaces.json diff --git a/samples/EdgeConfig/resourcesbackup/edge/org/developers.json b/samples/EdgeConfig/resourcesbackup/edge/org/developers.json new file mode 100644 index 0000000..e874d0b --- /dev/null +++ b/samples/EdgeConfig/resourcesbackup/edge/org/developers.json @@ -0,0 +1,15 @@ +[ + { + "email": "hugh@example.com", + "firstName": "Hugh", + "lastName": "Jack", + "userName": "hughexample" + }, + { + "email": "shak@example.com", + "firstName": "Shakira", + "lastName": "Mebarak", + "userName": "shakira", + "status": "active" + } +] \ No newline at end of file diff --git a/samples/EdgeConfig/resourcessample/edge/org/developers.json b/samples/EdgeConfig/resourcessample/edge/org/developers.json deleted file mode 100644 index 6ba7997..0000000 --- a/samples/EdgeConfig/resourcessample/edge/org/developers.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "attributes": [], - "email": "hugh@example.com", - "firstName": "Hugh", - "lastName": "Jack", - "userName": "hughexample" - } -] \ No newline at end of file From 4f6459e8dd96a658babd6d5849d3ac41b08bf2a3 Mon Sep 17 00:00:00 2001 From: Vivian Varela Date: Fri, 6 Jun 2025 18:11:19 -0300 Subject: [PATCH 4/4] update resource folder --- .../resourcesbackup/edge/org/developers.json | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 samples/EdgeConfig/resourcesbackup/edge/org/developers.json diff --git a/samples/EdgeConfig/resourcesbackup/edge/org/developers.json b/samples/EdgeConfig/resourcesbackup/edge/org/developers.json deleted file mode 100644 index e874d0b..0000000 --- a/samples/EdgeConfig/resourcesbackup/edge/org/developers.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "email": "hugh@example.com", - "firstName": "Hugh", - "lastName": "Jack", - "userName": "hughexample" - }, - { - "email": "shak@example.com", - "firstName": "Shakira", - "lastName": "Mebarak", - "userName": "shakira", - "status": "active" - } -] \ No newline at end of file