Merge branch 'application-mgt-new' into 'application-mgt-new'

Improve APPM app saving functionality

See merge request entgra/carbon-device-mgt!288
feature/appm-store/pbac
Dharmakeerthi Lasantha 5 years ago
commit 51b001c236

@ -28,65 +28,88 @@ import java.io.InputStream;
import java.util.List;
/**
* This manages all the storage related requirements of ApplicationDTO.
* This manages all the storage related requirements of Application.
*/
public interface ApplicationStorageManager {
/**
* To upload image artifacts related with an ApplicationDTO.
* To upload image artifacts related with an Application.
*
* @param applicationRelease ApplicationReleaseDTO Object
* @param iconFile Icon File input stream
* @param bannerFile Banner File input stream
* @throws ResourceManagementException Resource Management Exception.
* @param applicationRelease Application Release Object
* @param iconFile InputStream of the icon file.
* @param bannerFile InputStream of the banner file.
* @return {@link ApplicationReleaseDTO}
* @throws ResourceManagementException if it finds an empty screenshot array or IOException throws while handling
* input streams.
*/
ApplicationReleaseDTO uploadImageArtifacts(ApplicationReleaseDTO applicationRelease,
InputStream iconFile, InputStream bannerFile, List<InputStream> screenshots) throws ResourceManagementException;
ApplicationReleaseDTO uploadImageArtifacts(ApplicationReleaseDTO applicationRelease, InputStream iconFile,
InputStream bannerFile, List<InputStream> screenshots, int tenantId) throws ResourceManagementException;
/**
* To get App Installer data such as version, package name etc.
*
* @param binaryFile Binary file of the application.
* @param deviceType Compatible device type of the application.
* @return {@link ApplicationInstaller}
* @throws ApplicationStorageManagementException if device type is incorrect or error occurred while parsing binary
* data.
*/
ApplicationInstaller getAppInstallerData(InputStream binaryFile, String deviceType)
throws ApplicationStorageManagementException;
/**
* To upload release artifacts for an Application.
*
* @param applicationRelease ApplicationDTO Release Object.
* @param applicationRelease Application Release Object.
* @param deviceType Compatible device type of the application.
* @param binaryFile Binary File for the release.
* @param tenantId Tenant Id
* @throws ResourceManagementException if IO Exception occured while saving the release artifacts in the server.
*/
void uploadReleaseArtifact(ApplicationReleaseDTO applicationRelease, String deviceType, InputStream binaryFile)
throws ResourceManagementException;
void uploadReleaseArtifact(ApplicationReleaseDTO applicationRelease, String deviceType, InputStream binaryFile,
int tenantId) throws ResourceManagementException;
/**
* To upload release artifacts for an ApplicationDTO.
* To upload release artifacts for an Application.
*
* @param applicationReleaseDTO applicationRelease ApplicationDTO release of a particular application.
* @param applicationReleaseDTO application Release of a particular application.
* @param deletingAppHashValue Hash value of the deleting application release.
* @throws ApplicationStorageManagementException Resource Management Exception.
* @param tenantId Tenant Id
* @throws ApplicationStorageManagementException if IO Exception occurs while copying image artifacts and deleting
* application release installer file.
*/
void copyImageArtifactsAndDeleteInstaller(String deletingAppHashValue,
ApplicationReleaseDTO applicationReleaseDTO) throws ApplicationStorageManagementException;
ApplicationReleaseDTO applicationReleaseDTO, int tenantId) throws ApplicationStorageManagementException;
/**
* To delete the artifacts related with particular ApplicationDTO Release.
* To delete the artifacts related with particular Application Release.
*
* @throws ApplicationStorageManagementException Not Found Exception.
* @param appReleaseHashVal Hash value of the application release.
* @param folderName Folder name of the application stored.
* @param fileName Name of the application release artifact.
* @throws ApplicationStorageManagementException if artifact doesn't exist.
*/
void deleteAppReleaseArtifact(String appReleaseHashVal, String folderName, String fileName) throws ApplicationStorageManagementException;
void deleteAppReleaseArtifact(String appReleaseHashVal, String folderName, String fileName, int tenantId)
throws ApplicationStorageManagementException;
/**
* To delete all release artifacts related with particular ApplicationDTO Release.
* To delete all release artifacts related with particular Application Release.
*
* @param directoryPaths Hash values of the ApplicationDTO.
* @throws ApplicationStorageManagementException ApplicationDTO Storage Management Exception
* @param directoryPaths Hash values of the Application.
* @param tenantId Tenant Id
* @throws ApplicationStorageManagementException if artifact doesn't exist or IO exception occurred while deleting
* application artifact.
*/
void deleteAllApplicationReleaseArtifacts(List<String> directoryPaths) throws ApplicationStorageManagementException;
void deleteAllApplicationReleaseArtifacts(List<String> directoryPaths, int tenantId)
throws ApplicationStorageManagementException;
/***
/**
* Get the InputStream of the file which is located in filePath
*
* @param hashVal Hash Value of the application release.
* @return {@link InputStream}
* @throws ApplicationStorageManagementException throws if an error occurs when accessing the file.
*/
InputStream getFileStream(String hashVal, String folderName, String fileName) throws ApplicationStorageManagementException;
InputStream getFileStream(String hashVal, String folderName, String fileName, int tenantId)
throws ApplicationStorageManagementException;
}

@ -139,14 +139,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
log.debug("Ent. Application create request is received. Application name: " + applicationWrapper.getName()
+ " Device type: " + applicationWrapper.getDeviceType());
}
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
ApplicationDTO applicationDTO = APIUtil.convertToAppDTO(applicationWrapper);
//uploading application artifacts
ApplicationReleaseDTO applicationReleaseDTO = uploadEntAppReleaseArtifacts(
applicationDTO.getApplicationReleaseDTOs().get(0), applicationArtifact,
applicationWrapper.getDeviceType(), false);
applicationWrapper.getDeviceType(), tenantId, false);
applicationDTO.getApplicationReleaseDTOs().clear();
applicationDTO.getApplicationReleaseDTOs().add(applicationReleaseDTO);
return addAppDataIntoDB(applicationDTO);
return addAppDataIntoDB(applicationDTO, tenantId);
}
@Override
@ -156,6 +157,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
log.debug("Web clip create request is received. App name: " + webAppWrapper.getName() + " Device type: "
+ Constants.ANY);
}
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
ApplicationDTO applicationDTO = APIUtil.convertToAppDTO(webAppWrapper);
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0);
applicationReleaseDTO.setUuid(UUID.randomUUID().toString());
@ -163,14 +165,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
//uploading application artifacts
try {
applicationDTO.getApplicationReleaseDTOs().clear();
applicationDTO.getApplicationReleaseDTOs().add(addImageArtifacts(applicationReleaseDTO, applicationArtifact));
applicationDTO.getApplicationReleaseDTOs()
.add(addImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId));
} catch (ResourceManagementException e) {
String msg = "Error Occured when uploading artifacts of the web clip: " + webAppWrapper.getName();
log.error(msg);
throw new ApplicationManagementException(msg, e);
}
//insert application data into database
return addAppDataIntoDB(applicationDTO);
return addAppDataIntoDB(applicationDTO, tenantId);
}
@Override
@ -184,7 +187,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
String publicAppStorePath = "";
if (DeviceTypes.ANDROID.toString().toLowerCase().equals(publicAppWrapper.getDeviceType())) {
if (DeviceTypes.ANDROID.toString().equalsIgnoreCase(publicAppWrapper.getDeviceType())) {
publicAppStorePath = Constants.GOOGLE_PLAY_STORE_URL;
} else if (DeviceTypes.IOS.toString().equals(publicAppWrapper.getDeviceType())) {
publicAppStorePath = Constants.APPLE_STORE_URL;
@ -210,13 +213,13 @@ public class ApplicationManagerImpl implements ApplicationManager {
ConnectionManagerUtil.closeDBConnection();
}
if (exitingRelease != null && exitingRelease.size() > 0) {
if (exitingRelease != null && !exitingRelease.isEmpty()) {
applicationDTO.getApplicationReleaseDTOs().clear();
applicationReleaseDTO.setUuid(exitingRelease.get(0).getUuid());
applicationReleaseDTO.setCurrentState(exitingRelease.get(0).getCurrentState());
try {
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact);
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId);
applicationDTO.getApplicationReleaseDTOs().add(applicationReleaseDTO);
ConnectionManagerUtil.beginDBTransaction();
applicationReleaseDAO.updateRelease(applicationReleaseDTO, tenantId);
@ -237,7 +240,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
} else {
//uploading application artifacts
try {
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact);
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId);
applicationDTO.getApplicationReleaseDTOs().clear();
applicationDTO.getApplicationReleaseDTOs().add(applicationReleaseDTO);
} catch (ResourceManagementException e) {
@ -246,7 +249,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new ApplicationManagementException(msg, e);
}
//insert application data into database
return addAppDataIntoDB(applicationDTO);
return addAppDataIntoDB(applicationDTO, tenantId);
}
}
@ -290,16 +293,16 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationReleaseDTO.setInstallerName(applicationArtifact.getInstallerName());
try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
applicationStorageManager.uploadReleaseArtifact(applicationReleaseDTO, customAppWrapper.getDeviceType(),
binaryDuplicate);
binaryDuplicate, tenantId);
} catch (IOException e) {
String msg = "Error occurred when uploading release artifact into the server.";
log.error(msg);
throw new ApplicationManagementException(msg);
}
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact);
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId);
applicationDTO.getApplicationReleaseDTOs().clear();
applicationDTO.getApplicationReleaseDTOs().add(applicationReleaseDTO);
return addAppDataIntoDB(applicationDTO);
return addAppDataIntoDB(applicationDTO, tenantId);
} catch (ResourceManagementException e) {
String msg = "Error occurred while uploading application artifact into the server. Application name: "
+ customAppWrapper.getName() + " Device type: " + customAppWrapper.getDeviceType();
@ -313,10 +316,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
private void deleteApplicationArtifacts(List<String> directoryPaths) throws ApplicationManagementException {
private void deleteApplicationArtifacts(List<String> directoryPaths, int tenantId) throws ApplicationManagementException {
ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager();
try {
applicationStorageManager.deleteAllApplicationReleaseArtifacts(directoryPaths);
applicationStorageManager.deleteAllApplicationReleaseArtifacts(directoryPaths, tenantId);
} catch (ApplicationStorageManagementException e) {
String msg = "Error occurred when deleting application artifacts. directory paths: ." + directoryPaths
.toString();
@ -374,7 +377,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
applicationStorageManager
.uploadReleaseArtifact(applicationReleaseDTO, deviceType, binaryDuplicate);
.uploadReleaseArtifact(applicationReleaseDTO, deviceType, binaryDuplicate, tenantId);
}
} catch (DBConnectionException e) {
String msg = "Error occurred when getting database connection for verifying app release data.";
@ -455,9 +458,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationReleaseDTO.setAppHashValue(md5OfApp);
try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
applicationStorageManager
.uploadReleaseArtifact(applicationReleaseDTO, deviceType, binaryDuplicate);
.uploadReleaseArtifact(applicationReleaseDTO, deviceType, binaryDuplicate,
tenantId);
applicationStorageManager.copyImageArtifactsAndDeleteInstaller(deletingAppHashValue,
applicationReleaseDTO);
applicationReleaseDTO, tenantId);
}
} catch (DBConnectionException e) {
String msg = "Error occurred when getting database connection for verifying application "
@ -486,7 +490,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
private ApplicationReleaseDTO addImageArtifacts(ApplicationReleaseDTO applicationReleaseDTO,
ApplicationArtifact applicationArtifact) throws ResourceManagementException {
ApplicationArtifact applicationArtifact, int tenantId) throws ResourceManagementException {
ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager();
applicationReleaseDTO.setIconName(applicationArtifact.getIconName());
@ -510,24 +514,24 @@ public class ApplicationManagerImpl implements ApplicationManager {
// Upload images
applicationReleaseDTO = applicationStorageManager
.uploadImageArtifacts(applicationReleaseDTO, applicationArtifact.getIconStream(),
applicationArtifact.getBannerStream(), new ArrayList<>(screenshots.values()));
applicationArtifact.getBannerStream(), new ArrayList<>(screenshots.values()), tenantId);
return applicationReleaseDTO;
}
private ApplicationReleaseDTO updateImageArtifacts(ApplicationReleaseDTO applicationReleaseDTO,
ApplicationArtifact applicationArtifact) throws ResourceManagementException{
ApplicationArtifact applicationArtifact, int tenantId) throws ResourceManagementException{
ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager();
if (!StringUtils.isEmpty(applicationArtifact.getIconName())) {
applicationStorageManager
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), Constants.ICON_ARTIFACT,
applicationReleaseDTO.getIconName());
applicationReleaseDTO.getIconName(), tenantId);
applicationReleaseDTO.setIconName(applicationArtifact.getIconName());
}
if (!StringUtils.isEmpty(applicationArtifact.getBannerName())){
applicationStorageManager
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), Constants.BANNER_ARTIFACT,
applicationReleaseDTO.getBannerName());
applicationReleaseDTO.getBannerName(), tenantId);
applicationReleaseDTO.setBannerName(applicationArtifact.getBannerName());
}
@ -544,17 +548,17 @@ public class ApplicationManagerImpl implements ApplicationManager {
if (counter == 1) {
applicationStorageManager
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), folderPath,
applicationReleaseDTO.getScreenshotName1());
applicationReleaseDTO.getScreenshotName1(), tenantId);
applicationReleaseDTO.setScreenshotName1(scName);
} else if (counter == 2) {
applicationStorageManager
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), folderPath,
applicationReleaseDTO.getScreenshotName2());
applicationReleaseDTO.getScreenshotName2(), tenantId);
applicationReleaseDTO.setScreenshotName2(scName);
} else if (counter == 3) {
applicationStorageManager
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), folderPath,
applicationReleaseDTO.getScreenshotName3());
applicationReleaseDTO.getScreenshotName3(), tenantId);
applicationReleaseDTO.setScreenshotName3(scName);
}
counter++;
@ -564,7 +568,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
// Upload images
applicationReleaseDTO = applicationStorageManager
.uploadImageArtifacts(applicationReleaseDTO, applicationArtifact.getIconStream(),
applicationArtifact.getBannerStream(), screenshotStreams);
applicationArtifact.getBannerStream(), screenshotStreams, tenantId);
return applicationReleaseDTO;
}
@ -694,11 +698,11 @@ public class ApplicationManagerImpl implements ApplicationManager {
* required to do the validation of request and check the existence of application releaseDTO.
*
* @param applicationDTO Application DTO object.
* @param tenantId Tenant Id
* @return {@link Application}
* @throws ApplicationManagementException which throws if error occurs while during application management.
*/
private Application addAppDataIntoDB(ApplicationDTO applicationDTO) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
private Application addAppDataIntoDB(ApplicationDTO applicationDTO, int tenantId) throws ApplicationManagementException {
ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager();
List<String> unrestrictedRoles = applicationDTO.getUnrestrictedRoles();
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0);
@ -712,7 +716,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
if (appId == -1) {
log.error("Application data storing is Failed.");
ConnectionManagerUtil.rollbackDBTransaction();
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()));
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()),
tenantId);
return null;
} else {
if (log.isDebugEnabled()) {
@ -783,7 +788,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
log.error(msg, e);
try {
applicationStorageManager.deleteAllApplicationReleaseArtifacts(
Collections.singletonList(applicationReleaseDTO.getAppHashValue()));
Collections.singletonList(applicationReleaseDTO.getAppHashValue()), tenantId);
} catch (ApplicationStorageManagementException ex) {
String errorLog =
"Error occurred when deleting application artifacts. Application artifacts are tried to "
@ -797,7 +802,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
String msg = "Error occurred while adding application or application release. application name: "
+ applicationDTO.getName() + ".";
log.error(msg, e);
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()));
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()), tenantId);
throw new ApplicationManagementException(msg, e);
} catch (LifecycleManagementException e) {
ConnectionManagerUtil.rollbackDBTransaction();
@ -805,7 +810,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
"Error occurred when getting initial lifecycle state. application name: " + applicationDTO.getName()
+ ".";
log.error(msg, e);
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()));
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()), tenantId);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while getting database connection.";
@ -816,7 +821,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
String msg = "Error occurred while adding unrestricted roles. application name: " + applicationDTO.getName()
+ ".";
log.error(msg, e);
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()));
deleteApplicationArtifacts(Collections.singletonList(applicationReleaseDTO.getAppHashValue()), tenantId);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while disabling AutoCommit.";
@ -853,7 +858,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
ApplicationReleaseDTO applicationReleaseDTO = uploadEntAppReleaseArtifacts(
APIUtil.releaseWrapperToReleaseDTO(entAppReleaseWrapper), applicationArtifact, deviceType.getName(),
true);
tenantId, true);
try {
ConnectionManagerUtil.beginDBTransaction();
String initialstate = lifecycleStateManager.getInitialState();
@ -918,12 +923,12 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
private ApplicationReleaseDTO uploadEntAppReleaseArtifacts(ApplicationReleaseDTO releaseDTO,
ApplicationArtifact applicationArtifact, String deviceTypeName, boolean isNewRelease)
ApplicationArtifact applicationArtifact, String deviceTypeName, int tenantId, boolean isNewRelease)
throws ApplicationManagementException {
try {
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts(deviceTypeName, releaseDTO,
applicationArtifact, isNewRelease);
return addImageArtifacts(applicationReleaseDTO, applicationArtifact);
return addImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId);
} catch (ResourceManagementException e) {
String msg = "Error occurred while uploading application release artifacts.";
log.error(msg, e);
@ -1243,7 +1248,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
deletingAppHashVals.add(applicationReleaseDTO.getAppHashValue());
deletingAppReleaseIds.add(applicationReleaseDTO.getId());
}
applicationStorageManager.deleteAllApplicationReleaseArtifacts(deletingAppHashVals);
applicationStorageManager.deleteAllApplicationReleaseArtifacts(deletingAppHashVals, tenantId);
this.lifecycleStateDAO.deleteLifecycleStates(deletingAppReleaseIds);
this.applicationReleaseDAO.deleteReleases(deletingAppReleaseIds);
this.applicationDAO.deleteApplicationTags(applicationId, tenantId);
@ -1355,7 +1360,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new ForbiddenException(msg);
}
applicationStorageManager.deleteAllApplicationReleaseArtifacts(
Collections.singletonList(applicationReleaseDTO.getAppHashValue()));
Collections.singletonList(applicationReleaseDTO.getAppHashValue()), tenantId);
lifecycleStateDAO.deleteLifecycleStateByReleaseId(applicationReleaseDTO.getId());
applicationReleaseDAO.deleteRelease(applicationReleaseDTO.getId());
ConnectionManagerUtil.commitDBTransaction();
@ -1412,7 +1417,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
+ " into updatable state and retry the operation.");
}
applicationReleaseDTO = this.applicationReleaseDAO
.updateRelease(updateImageArtifacts(applicationReleaseDTO, applicationArtifact), tenantId);
.updateRelease(updateImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId), tenantId);
if (applicationReleaseDTO == null) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Application release updating count is 0 for application release UUID: " + uuid;
@ -2396,7 +2401,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
.set(updateEntAppReleaseArtifact(deviceTypeObj.getName(), applicationReleaseDTO.get(),
applicationArtifact));
}
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact));
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact, tenantId));
boolean updateStatus = applicationReleaseDAO.updateRelease(applicationReleaseDTO.get(), tenantId) != null;
if (!updateStatus) {
ConnectionManagerUtil.rollbackDBTransaction();
@ -2463,7 +2468,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationReleaseDTO.get().setMetaData(publicAppReleaseWrapper.getMetaData());
}
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact));
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact, tenantId));
boolean updateStatus = applicationReleaseDAO.updateRelease(applicationReleaseDTO.get(), tenantId) != null;
if (!updateStatus) {
@ -2528,7 +2533,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationReleaseDTO.get().setMetaData(webAppReleaseWrapper.getMetaData());
}
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact));
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact, tenantId));
boolean updateStatus = applicationReleaseDAO.updateRelease(applicationReleaseDTO.get(), tenantId) != null;
if (!updateStatus) {
ConnectionManagerUtil.rollbackDBTransaction();
@ -2625,9 +2630,9 @@ public class ApplicationManagerImpl implements ApplicationManager {
try (ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream(content)) {
applicationStorageManager
.uploadReleaseArtifact(applicationReleaseDTO.get(), deviceTypeObj.getName(),
binaryDuplicate);
binaryDuplicate, tenantId);
applicationStorageManager.copyImageArtifactsAndDeleteInstaller(deletingAppHashValue,
applicationReleaseDTO.get());
applicationReleaseDTO.get(), tenantId);
}
} catch (DBConnectionException e) {
String msg = "Error occurred when getting database connection for verifying application"
@ -2652,7 +2657,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new ApplicationStorageManagementException(msg, e);
}
}
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact));
applicationReleaseDTO.set(updateImageArtifacts(applicationReleaseDTO.get(), applicationArtifact, tenantId));
boolean updateStatus = applicationReleaseDAO.updateRelease(applicationReleaseDTO.get(), tenantId) != null;
if (!updateStatus) {
ConnectionManagerUtil.rollbackDBTransaction();

@ -59,14 +59,15 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
@Override
public ApplicationReleaseDTO uploadImageArtifacts(ApplicationReleaseDTO applicationReleaseDTO,
InputStream iconFileStream, InputStream bannerFileStream, List<InputStream> screenShotStreams)
InputStream iconFileStream, InputStream bannerFileStream, List<InputStream> screenShotStreams, int tenantId)
throws ResourceManagementException {
String iconStoredLocation;
String bannerStoredLocation;
String scStoredLocation = null;
try {
String artifactStoringBaseDirPath = storagePath + applicationReleaseDTO.getAppHashValue();
String artifactStoringBaseDirPath =
storagePath + tenantId + File.separator + applicationReleaseDTO.getAppHashValue();
StorageManagementUtil.createArtifactDirectory(artifactStoringBaseDirPath);
if (iconFileStream != null) {
@ -144,11 +145,12 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
@Override
public void uploadReleaseArtifact(ApplicationReleaseDTO applicationReleaseDTO,
String deviceType, InputStream binaryFile) throws ResourceManagementException {
String deviceType, InputStream binaryFile, int tenantId) throws ResourceManagementException {
try {
byte [] content = IOUtils.toByteArray(binaryFile);
String artifactDirectoryPath =
storagePath + applicationReleaseDTO.getAppHashValue() + File.separator + Constants.APP_ARTIFACT;
storagePath + tenantId + File.separator + applicationReleaseDTO.getAppHashValue() + File.separator
+ Constants.APP_ARTIFACT;
StorageManagementUtil.createArtifactDirectory(artifactDirectoryPath);
String artifactPath = artifactDirectoryPath + File.separator + applicationReleaseDTO.getInstallerName();
saveFile(new ByteArrayInputStream(content), artifactPath);
@ -162,7 +164,7 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
@Override
public void copyImageArtifactsAndDeleteInstaller(String deletingAppHashValue,
ApplicationReleaseDTO applicationReleaseDTO) throws ApplicationStorageManagementException {
ApplicationReleaseDTO applicationReleaseDTO, int tenantId) throws ApplicationStorageManagementException {
try {
String appHashValue = applicationReleaseDTO.getAppHashValue();
@ -171,42 +173,41 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
String screenshot1 = applicationReleaseDTO.getScreenshotName1();
String screenshot2 = applicationReleaseDTO.getScreenshotName2();
String screenshot3 = applicationReleaseDTO.getScreenshotName3();
String basePath = storagePath + tenantId + File.separator;
if (bannerName != null) {
StorageManagementUtil
.copy(storagePath + deletingAppHashValue + File.separator + Constants.BANNER_ARTIFACT
StorageManagementUtil.copy(basePath + deletingAppHashValue + File.separator + Constants.BANNER_ARTIFACT
+ File.separator + bannerName,
storagePath + appHashValue + File.separator + Constants.BANNER_ARTIFACT + File.separator
basePath + appHashValue + File.separator + Constants.BANNER_ARTIFACT + File.separator
+ bannerName);
}
if (iconName != null) {
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + Constants.ICON_ARTIFACT
StorageManagementUtil.copy(basePath + deletingAppHashValue + File.separator + Constants.ICON_ARTIFACT
+ File.separator + iconName,
storagePath + appHashValue + File.separator + Constants.ICON_ARTIFACT + File.separator
+ iconName);
basePath + appHashValue + File.separator + Constants.ICON_ARTIFACT + File.separator + iconName);
}
if (screenshot1 != null) {
StorageManagementUtil
.copy(storagePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 1
.copy(basePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 1
+ File.separator + screenshot1,
storagePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 1
basePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 1
+ File.separator + screenshot1);
}
if (screenshot2 != null) {
StorageManagementUtil
.copy(storagePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 2
.copy(basePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 2
+ File.separator + screenshot2,
storagePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 2
basePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 2
+ File.separator + screenshot2);
}
if (screenshot3 != null) {
StorageManagementUtil
.copy(storagePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 3
.copy(basePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 3
+ File.separator + screenshot3,
storagePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 3
basePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 3
+ File.separator + screenshot3);
}
deleteAppReleaseArtifact( storagePath + deletingAppHashValue);
deleteAppReleaseArtifact( basePath + deletingAppHashValue);
} catch (IOException e) {
String msg = "Application installer updating is failed because of I/O issue";
log.error(msg, e);
@ -217,24 +218,28 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
@Override
public void deleteAppReleaseArtifact(String appReleaseHashVal, String folderName, String fileName)
public void deleteAppReleaseArtifact(String appReleaseHashVal, String folderName, String fileName, int tenantId)
throws ApplicationStorageManagementException {
String artifactPath = storagePath + appReleaseHashVal + File.separator + folderName + File.separator + fileName;
String artifactPath = storagePath + tenantId + File.separator + appReleaseHashVal + File.separator + folderName
+ File.separator + fileName;
deleteAppReleaseArtifact(artifactPath);
}
@Override
public void deleteAllApplicationReleaseArtifacts(List<String> directoryPaths)
public void deleteAllApplicationReleaseArtifacts(List<String> directoryPaths, int tenantId)
throws ApplicationStorageManagementException {
for (String directoryBasePath : directoryPaths) {
deleteAppReleaseArtifact(storagePath + directoryBasePath);
String basePath = storagePath + tenantId + File.separator;
for (String directoryPath : directoryPaths) {
deleteAppReleaseArtifact(basePath + directoryPath);
}
}
@Override
public InputStream getFileStream(String hashVal, String folderName, String fileName)
public InputStream getFileStream(String hashVal, String folderName, String fileName, int tenantId)
throws ApplicationStorageManagementException {
String filePath = storagePath + hashVal + File.separator + folderName + File.separator + fileName;
String filePath =
storagePath + tenantId + File.separator + hashVal + File.separator + folderName + File.separator
+ fileName;
try {
return StorageManagementUtil.getInputStream(filePath);
} catch (IOException e) {

@ -74,7 +74,7 @@ public class AppmDataHandlerImpl implements AppmDataHandler {
throw new NotFoundException(msg);
}
InputStream inputStream = applicationStorageManager
.getFileStream(appReleaseHashValue, folderName, artifactName);
.getFileStream(appReleaseHashValue, folderName, artifactName, tenantId);
if (inputStream == null) {
String msg = "Couldn't file the file in the file system.";
log.error(msg);

@ -840,7 +840,7 @@ public interface ApplicationManagementPublisherAPI {
@Multipart(value = "screenshot3") Attachment screenshot3);
@PUT
@Path("/pub-app-release/{uuid}")
@Path("/public-app-release/{uuid}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@ApiOperation(

Loading…
Cancel
Save