Skip to content

Commit

Permalink
Merge pull request #12 from SolaceLabs/feature/misc-implementations
Browse files Browse the repository at this point in the history
Miscellaneous features implementation
  • Loading branch information
HariRangarajan-Solace authored Aug 30, 2024
2 parents da1684e + 455b493 commit c93442b
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 36 deletions.
17 changes: 17 additions & 0 deletions manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated manifest.yml based on template version 0.1.0
# appName = ep-asyncapi-sap-is-converter
# language=java
# multitenancy=false
---
applications:
- name: ep-asyncapi-sap-is-converter
routes:
- route: ep-is-gen.cfapps.ca10.hana.ondemand.com
path: target/ep-asyncapi-sap-is-converter.jar
memory: 1G
disk_quota: 512M
env:
JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{ enabled: false }'
JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jdk.SAPMachineJDK']"
JBP_CONFIG_SAP_MACHINE_JDK: '{ version: 17.+ }'
buildpack: sap_java_buildpack
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@
</dependencies>

<build>
<finalName>ep-asyncapi-sap-is-converter</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
Expand All @@ -145,7 +146,6 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- <version>2.4.0</version>-->
<configuration>
<excludes>
<exclude>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,50 +3,40 @@
import com.solace.cloud.ep.designer.ApiClient;
import com.solace.cloud.ep.designer.Configuration;
import com.solace.cloud.ep.designer.auth.HttpBearerAuth;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

//import javax.servlet.http.HttpSession;
import jakarta.servlet.http.HttpSession;

@Component
@Slf4j
public class ApiClientUtil {

@Value("${solace.api.ep.authTokenType}")
String authTokenType;

@Value("${solace.api.ep.basePath}")
String basePath;


public ApiClient initializeApiClient(final String epToken) {
if (StringUtils.hasText(epToken)) {
ApiClient apiClient = Configuration.getDefaultApiClient();
apiClient.setBasePath(basePath);
HttpBearerAuth APIToken = (HttpBearerAuth) apiClient.getAuthentication("APIToken");
APIToken.setBearerToken(epToken);

return apiClient;
} else {
log.error("Failed to initialize ApiClient: AuthToken is empty");
}
return null;
}


public ApiClient getApiClientFromSession(final HttpSession httpSession) {
ApiClient apiClient = (ApiClient) httpSession.getAttribute("apiClient");
if (apiClient == null) {
log.warn("ApiClient is not coming in the session. Identify and fix!!");
log.warn("ApiClient not available in the session. Potential issue!!");
final String epTokenFromSession = (String) httpSession.getAttribute("validatedEpToken");
apiClient = initializeApiClient(epTokenFromSession);
httpSession.setAttribute("apiClient", apiClient);
}
return apiClient;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

// import javax.servlet.http.HttpSession;
import java.util.Collections;
import java.util.List;

Expand All @@ -47,15 +46,16 @@ public String homePage(final Model model) {
@PostMapping("/validateUserEPToken")
public String validateUserEPToken(final HttpSession httpSession, final Model model, EpTokenModel epTokenModel) {
final String epToken = epTokenModel.getEpToken();

log.debug("Validating user EP token input:{}", epToken);
log.info("Validating user EP token");
if (StringUtils.hasText(epToken)) {
boolean isUserEpTokenValidated = epActionsService.validateUserEPToken(epToken);
model.addAttribute("isUserEpTokenValidated", isUserEpTokenValidated);
log.info("Is User's EP Token validated: {}", isUserEpTokenValidated);
if (isUserEpTokenValidated) {
httpSession.setAttribute("validatedEpToken", epToken);
ApiClient apiClient = apiClientUtil.initializeApiClient(epToken);
httpSession.setAttribute("apiClient", apiClient);
log.info("Retrieving application domains for user token");
List<ApplicationDomainDTO> applicationDomainDTOList = epActionsService.getAllApplicationDomains(apiClient);
model.addAttribute("applicationDomainDTOList", applicationDomainDTOList);
}
Expand All @@ -71,6 +71,7 @@ public String validateUserEPToken(final HttpSession httpSession, final Model mod
@ResponseBody
public List<ApplicationDTO> getApplicationsForAppDomain(@PathVariable String appDomainId, final HttpSession httpSession) {
if (StringUtils.hasText(appDomainId)) {
log.info("Retrieving applications for user app domain id");
ApiClient apiClient = apiClientUtil.getApiClientFromSession(httpSession);
return epActionsService.getAllApplicationsForAppDomain(apiClient, appDomainId);
}
Expand All @@ -82,6 +83,7 @@ public List<ApplicationDTO> getApplicationsForAppDomain(@PathVariable String app
@ResponseBody
public List<ApplicationVersionDTO> getVersionsForApplication(@PathVariable final String appDomainId, @PathVariable final String applicationId, final HttpSession httpSession) {
if (StringUtils.hasText(appDomainId) && StringUtils.hasText(applicationId)) {
log.info("Retrieving applications versions for user app id");
ApiClient apiClient = apiClientUtil.getApiClientFromSession(httpSession);
return epActionsService.getApplicationVersionsForAppId(apiClient, applicationId);
}
Expand All @@ -90,9 +92,7 @@ public List<ApplicationVersionDTO> getVersionsForApplication(@PathVariable final

@GetMapping("/{appDomainId}/applications/{appId}/versions/{appVersionId}/isArtefact")
public ResponseEntity<byte[]> generateISArtefactDownload(@PathVariable final String appDomainId, @PathVariable final String appId, @PathVariable final String appVersionId, final HttpSession httpSession) {
log.debug("appDomainId:{}", appDomainId);
log.debug("appId:{}", appId);
log.debug("appVersionId:{}", appVersionId);
log.info("Generating IS artefact for user app version");
ApiClient apiClient = apiClientUtil.getApiClientFromSession(httpSession);
byte[] appVersionIsWorkflowArtefact = epActionsService.generateISWorkflowArtefactForAppVersion(apiClient, appVersionId);
HttpHeaders headers = new HttpHeaders();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import ep.asyncapi.tool.sap.is.converter.service.converter.SapIFlowConverter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;

import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -52,7 +51,6 @@ public EpActionsService(final SolaceCloudV0APIClient solaceCloudV0APIClient,

public boolean validateUserEPToken(final String userEpToken) {
if (StringUtils.hasText(userEpToken)) {
// HttpStatus epTokenValidationStatusCode = solaceCloudV0APIClient.validateUserEPToken(userEpToken);
HttpStatusCode epTokenValidationStatusCode = solaceCloudV0APIClient.validateUserEPToken(userEpToken);
if (epTokenValidationStatusCode == HttpStatus.OK) {
log.info("User EP Token input validated");
Expand Down Expand Up @@ -103,12 +101,10 @@ public List<ApplicationVersionDTO> getApplicationVersionsForAppId(final ApiClien

public byte[] generateISWorkflowArtefactForAppVersion(final ApiClient apiClient, final String appVersionId) {
try {

//Get AsyncAPI spec
final String asyncApiSpecForAppVersion = applicationApiClientService.getAsycnApiSpecForAppVersion(apiClient, appVersionId);
final String asyncApiSpecForAppVersion = applicationApiClientService.getAsyncApiSpecForAppVersion(apiClient, appVersionId);

//Handle AsyncAPI spec

MapMuleDoc mapMuleDoc = AsyncApiToMuleDocMapper.mapMuleDocFromAsyncApi(asyncApiSpecForAppVersion);
final String appVersionTitle = mapMuleDoc.getGlobalProperties().get("epApplicationVersionTitle");
final String appSemanticVersion = mapMuleDoc.getGlobalProperties().get("epApplicationVersion");
Expand All @@ -119,7 +115,7 @@ public byte[] generateISWorkflowArtefactForAppVersion(final ApiClient apiClient,
final File mainDirectory = new File(tmpDirectory, appVersionTitle + "_" + runCount++);
FileUtils.forceMkdir(mainDirectory);

log.info( "Creating project structure in system temp directory: {}", mainDirectory.getAbsolutePath() );
log.debug("Creating project structure in system temp directory: {}", mainDirectory.getAbsolutePath());

final File resourcesSubDirectory = new File(mainDirectory, "src/main/resources");
FileUtils.forceMkdir(resourcesSubDirectory);
Expand Down Expand Up @@ -174,20 +170,15 @@ public byte[] generateISWorkflowArtefactForAppVersion(final ApiClient apiClient,
private File createZipFile(File directory) throws IOException {
File zipFile = new File(directory.getParent(), directory.getName() + ".zip");
try (FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream zos = new ZipOutputStream(fos)) {
// zip(directory, directory.getName(), zos);
zip(directory, "", zos);
}
return zipFile;
}

// TODO - Validate zipping mechanism
private void zip(File directory, String baseName, ZipOutputStream zos) throws IOException {
// log.info( "Basename: {}", baseName );
for (File file : directory.listFiles()) {
// log.info( "Zipping: {}", file.getAbsolutePath() );
// log.info( "Zipping: {}", file.getName());
if (file.isDirectory()) {
zip(file, ( baseName.length() > 0 ? ( baseName + File.separator) : "" ) + file.getName(), zos);
zip(file, (baseName.length() > 0 ? (baseName + File.separator) : "") + file.getName(), zos);
} else {
byte[] buffer = new byte[1024];
try (FileInputStream fis = new FileInputStream(file)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
package ep.asyncapi.tool.sap.is.converter.service.apis;

// import lombok.extern.slf4j.Slf4j;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;


@Service
// @Slf4j
@Slf4j
public class SolaceCloudV0APIClient {

@Value("${solace.api.v0.token-permission-url}")
private String SOLACE_V0_TOKEN_PERMISSIONS_URL;

// public HttpStatus validateUserEPToken(final String userEpToken) {
public HttpStatusCode validateUserEPToken(final String userEpToken) {
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(userEpToken);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public List<ApplicationVersion> getApplicationsVersionsForAppId(final ApiClient
}
}

public String getAsycnApiSpecForAppVersion(final ApiClient apiClient, final String applicationVersionId) {
public String getAsyncApiSpecForAppVersion(final ApiClient apiClient, final String applicationVersionId) {
applicationsApi = new ApplicationsApi(apiClient);
try {
return applicationsApi.getAsyncApiForApplicationVersion(applicationVersionId, "json", null, null, null, null, null);
Expand All @@ -53,6 +53,4 @@ public String getAsycnApiSpecForAppVersion(final ApiClient apiClient, final Stri
return "";
}
}


}

0 comments on commit c93442b

Please sign in to comment.