@ -56,7 +56,7 @@ import org.wso2.carbon.device.application.mgt.common.response.Category;
import org.wso2.carbon.device.application.mgt.common.response.Tag ;
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager ;
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager ;
import org.wso2.carbon.device.application.mgt.common.wrapper. Application ReleaseWrapper;
import org.wso2.carbon.device.application.mgt.common.wrapper. Ent AppReleaseWrapper;
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationUpdateWrapper ;
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper ;
import org.wso2.carbon.device.application.mgt.common.wrapper.PublicAppReleaseWrapper ;
@ -131,7 +131,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
@Override
public Application create Application ( ApplicationWrapper applicationWrapper ,
public Application create Ent App( ApplicationWrapper applicationWrapper ,
ApplicationArtifact applicationArtifact ) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
@ -143,29 +143,106 @@ public class ApplicationManagerImpl implements ApplicationManager {
ApplicationDTO applicationDTO = APIUtil . convertToAppDTO ( applicationWrapper ) ;
//uploading application artifacts
try {
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
if ( ! isValidOsVersions ( applicationReleaseDTO . getSupportedOsVersions ( ) , applicationWrapper . getDeviceType ( ) ) ) {
if ( ! isValidOsVersions ( applicationReleaseDTO . getSupportedOsVersions ( ) , applicationWrapper . getDeviceType ( ) ) ) {
String msg = "You are trying to create application which has an application release contains invalid or "
+ "unsupported OS versions in the supportedOsVersions section. Hence, please re-evaluate the "
+ "request payload." ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;
}
applicationReleaseDTO = addApplicationReleaseArtifacts ( applicationDTO . getType ( ) ,
applicationWrapper . getDeviceType ( ) , applicationReleaseDTO , applicationArtifact , false ) ;
applicationReleaseDTO = addImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ;
//uploading application artifacts
applicationReleaseDTO = uploadEntAppReleaseArtifacts ( applicationReleaseDTO , applicationArtifact ,
applicationWrapper . getDeviceType ( ) , false ) ;
applicationDTO . getApplicationReleaseDTOs ( ) . clear ( ) ;
applicationDTO . getApplicationReleaseDTOs ( ) . add ( applicationReleaseDTO ) ;
return addAppDataIntoDB ( applicationDTO , tenantId ) ;
}
@Override
public Application createWebClip ( WebAppWrapper webAppWrapper , ApplicationArtifact applicationArtifact )
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
String userName = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getUsername ( ) ;
if ( log . isDebugEnabled ( ) ) {
log . debug ( "Web clip create request is received for the tenant : " + tenantId + " From" + " the user : "
+ userName ) ;
}
ApplicationDTO applicationDTO = APIUtil . convertToAppDTO ( webAppWrapper ) ;
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String md5 = DigestUtils . md5Hex ( applicationReleaseDTO . getInstallerName ( ) ) ;
applicationReleaseDTO . setUuid ( uuid ) ;
applicationReleaseDTO . setAppHashValue ( md5 ) ;
//uploading application artifacts
try {
applicationDTO . getApplicationReleaseDTOs ( ) . clear ( ) ;
applicationDTO . getApplicationReleaseDTOs ( ) . add ( addImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ) ;
} 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 , tenantId ) ;
}
@Override
public Application createPublicApp ( PublicAppWrapper publicAppWrapper , ApplicationArtifact applicationArtifact )
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
String userName = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getUsername ( ) ;
String publicAppStorePath = "" ;
if ( log . isDebugEnabled ( ) ) {
log . debug ( "Public app creating request is received for the tenant : " + tenantId + " From" + " the user : "
+ userName ) ;
}
if ( ! isValidOsVersions ( publicAppWrapper . getPublicAppReleaseWrappers ( ) . get ( 0 ) . getSupportedOsVersions ( ) ,
publicAppWrapper . getDeviceType ( ) ) ) {
String msg = "You are trying to add application release which has invalid or unsupported OS versions in "
+ "the supportedOsVersions section. Hence, please re-evaluate the request payload." ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;
}
if ( DeviceTypes . ANDROID . toString ( ) . equals ( publicAppWrapper . getDeviceType ( ) ) ) {
publicAppStorePath = Constants . GOOGLE_PLAY_STORE_URL ;
} else if ( DeviceTypes . IOS . toString ( ) . equals ( publicAppWrapper . getDeviceType ( ) ) ) {
publicAppStorePath = Constants . APPLE_STORE_URL ;
}
ApplicationDTO applicationDTO = APIUtil . convertToAppDTO ( publicAppWrapper ) ;
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String appInstallerUrl = publicAppStorePath + applicationReleaseDTO . getPackageName ( ) ;
//todo check app package name exist or not, do it in validation method
applicationReleaseDTO . setInstallerName ( appInstallerUrl ) ;
String md5 = DigestUtils . md5Hex ( appInstallerUrl ) ;
applicationReleaseDTO . setUuid ( uuid ) ;
applicationReleaseDTO . setAppHashValue ( md5 ) ;
//uploading application artifacts
try {
applicationDTO . getApplicationReleaseDTOs ( ) . clear ( ) ;
applicationDTO . getApplicationReleaseDTOs ( )
. add ( addImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ) ;
} catch ( ResourceManagementException e ) {
String msg = "Error Occured when uploading artifacts of the application: " + applicationWrapper . getName ( ) ;
String msg = "Error Occured when uploading artifacts of the public app: " + publicApp Wrapper. getName ( ) ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg , e ) ;
}
//insert application data into database
return addAppDataIntoDB ( applicationDTO , tenantId ) ;
}
private void deleteApplicationArtifacts ( List < String > directoryPaths ) throws ApplicationManagementException {
ApplicationStorageManager applicationStorageManager = DAOUtil . getApplicationStorageManager ( ) ;
try {
@ -178,7 +255,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
private ApplicationReleaseDTO addApplicationReleaseArtifacts ( String applicationType, String deviceType,
private ApplicationReleaseDTO addApplicationReleaseArtifacts ( String deviceType,
ApplicationReleaseDTO applicationReleaseDTO , ApplicationArtifact applicationArtifact , boolean isNewRelease )
throws ResourceManagementException , ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
@ -188,7 +265,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationReleaseDTO . setUuid ( uuid ) ;
// The application executable artifacts such as apks are uploaded.
if ( ApplicationType . ENTERPRISE . toString ( ) . equals ( applicationType ) ) {
try {
byte [ ] content = IOUtils . toByteArray ( applicationArtifact . getInstallerStream ( ) ) ;
@ -222,16 +298,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
if ( this . applicationReleaseDAO
. verifyReleaseExistenceByHash ( md5OfApp , tenantId ) ) {
throw new BadRequestException (
"Application release exists for the uploaded binary file. Application Type: "
+ applicationType + " Device Type: " + deviceType ) ;
"Application release exists for the uploaded binary file. Device Type: " + deviceType ) ;
}
applicationReleaseDTO . setAppHashValue ( md5OfApp ) ;
try ( ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream ( content ) ) {
applicationReleaseDTO = applicationStorageManager
. uploadReleaseArtifact ( applicationReleaseDTO , applicationType ,
deviceType , binaryDuplicate ) ;
. uploadReleaseArtifact ( applicationReleaseDTO , deviceType , binaryDuplicate ) ;
}
}
} catch ( IOException e ) {
@ -252,97 +326,91 @@ public class ApplicationManagerImpl implements ApplicationManager {
} finally {
ConnectionManagerUtil . closeDBConnection ( ) ;
}
} else if ( ApplicationType . WEB_CLIP . toString ( ) . equals ( applicationType ) ) {
applicationReleaseDTO . setVersion ( Constants . DEFAULT_VERSION ) ;
applicationReleaseDTO . setInstallerName ( applicationReleaseDTO . getUrl ( ) ) ;
// Since WEB CLIP doesn't have an installer, set uuid as has value for WEB CLIP
applicationReleaseDTO . setAppHashValue ( uuid ) ;
}
return applicationReleaseDTO ;
}
private ApplicationReleaseDTO update Application ReleaseArtifacts ( String applicationType , String deviceType ,
private ApplicationReleaseDTO updateEntAppReleaseArtifact ( String deviceType ,
ApplicationReleaseDTO applicationReleaseDTO , ApplicationArtifact applicationArtifact )
throws ResourceManagementException , ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
ApplicationStorageManager applicationStorageManager = DAOUtil . getApplicationStorageManager ( ) ;
// The application executable artifacts such as apks are uploaded.
if ( ApplicationType . ENTERPRISE . toString ( ) . equals ( applicationType ) ) {
try {
byte [ ] content = IOUtils . toByteArray ( applicationArtifact . getInstallerStream ( ) ) ;
try ( ByteArrayInputStream binaryClone = new ByteArrayInputStream ( content ) ) {
try ( ByteArrayInputStream binaryClone = new ByteArrayInputStream ( content ) ) {
String md5OfApp = StorageManagementUtil . getMD5 ( binaryClone ) ;
if ( md5OfApp = = null ) {
String msg = "Error occurred while md5sum value retrieving process: application UUID "
+ applicationReleaseDTO . getUuid ( ) ;
String msg = "Error occurred while retrieving md5sum value from the binary file for application "
+ "release UUID " + applicationReleaseDTO . getUuid ( ) ;
log . error ( msg ) ;
throw new ApplicationStorageManagementException ( msg ) ;
}
if ( ! applicationReleaseDTO . getAppHashValue ( ) . equals ( md5OfApp ) ) {
if ( ! applicationReleaseDTO . getAppHashValue ( ) . equals ( md5OfApp ) ) {
applicationReleaseDTO . setInstallerName ( applicationArtifact . getInstallerName ( ) ) ;
try ( ByteArrayInputStream binary = new ByteArrayInputStream ( content ) ) {
ApplicationInstaller applicationInstaller = applicationStorageManager
. getAppInstallerData ( binary , deviceType ) ;
String packagen ame = applicationInstaller . getPackageName ( ) ;
String packageN ame = applicationInstaller . getPackageName ( ) ;
try {
ConnectionManagerUtil . getDBConnection ( ) ;
if ( applicationReleaseDAO . isActiveReleaseExisitForPackageName ( packagename , tenantId ,
lifecycleStateManager . getEndState ( ) ) ) {
String msg = "Application release is already exist for the package name: " + packagename +
". Either you can delete all application releases for package " + packagename + " or "
+ "you can add this app release as an new application release, under the existing "
+ "application." ;
if ( this . applicationReleaseDAO . verifyReleaseExistenceByHash ( md5OfApp , tenantId ) ) {
String msg = "Same binary file is in the server. Hence you can't add same file into the "
+ "server. Device Type: " + deviceType + " and package name: " + packageName ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;
}
if ( applicationReleaseDTO . getPackageName ( ) = = null ) {
String msg = "Found null value for application release package name for application "
+ "release which has UUID: " + applicationReleaseDTO . getUuid ( ) ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg ) ;
}
applicationReleaseDTO . setVersion ( applicationInstaller . getVersion ( ) ) ;
applicationReleaseDTO . setPackageName ( packagename ) ;
if ( this . applicationReleaseDAO
. verifyReleaseExistenceByHash ( md5OfApp , tenantId ) ) {
throw new BadRequestException (
"Application release exists for the uploaded binary file. Application Type: "
+ applicationType + " Device Tyep: " + deviceType ) ;
if ( ! applicationReleaseDTO . getPackageName ( ) . equals ( packageName ) ) {
String msg = "Package name of the new artifact does not match with the package name of "
+ "the exiting application release. Package name of the existing app release "
+ applicationReleaseDTO . getPackageName ( ) + " and package name of the new "
+ "application release " + packageName ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;
}
applicationReleaseDTO . setAppHashValue ( md5OfApp ) ;
applicationReleaseDTO . setVersion ( applicationInstaller . getVersion ( ) ) ;
applicationReleaseDTO . setPackageName ( packageName ) ;
String deletingAppHashValue = applicationReleaseDTO . getAppHashValue ( ) ;
applicationReleaseDTO . setAppHashValue ( md5OfApp ) ;
try ( ByteArrayInputStream binaryDuplicate = new ByteArrayInputStream ( content ) ) {
applicationReleaseDTO = applicationStorageManager
. uploadReleaseArtifact ( applicationReleaseDTO , applicationType ,
deviceType , binaryDuplicate ) ;
. uploadReleaseArtifact ( applicationReleaseDTO , deviceType , binaryDuplicate ) ;
applicationStorageManager . copyImageArtifactsAndDeleteInstaller ( deletingAppHashValue ,
applicationReleaseDTO ) ;
}
}
}
}
} catch ( IOException e ) {
String msg =
"Error occurred when getting byte array of binary file. Installer name: " + applicationArtifact
. getInstallerName ( ) ;
log . error ( msg ) ;
throw new ApplicationStorageManagementException ( msg ) ;
} catch ( DBConnectionException e ) {
String msg = "Error occurred when getting database connection for verifying application package existence." ;
String msg = "Error occurred when getting database connection for verifying application "
+ "release existing for new app hash value." ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg , e ) ;
} catch ( ApplicationManagementDAOException e ) {
String msg = "Error occurred when executing the query for verifying application release existence for "
+ "the packag e.";
String msg = "Error occurred when executing the query for verifying application release "
+ "existence for the new app hash value." ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg , e ) ;
} finally {
ConnectionManagerUtil . closeDBConnection ( ) ;
}
} else if ( ApplicationType . WEB_CLIP . toString ( ) . equals ( applicationType ) ) {
applicationReleaseDTO . setVersion ( Constants . DEFAULT_VERSION ) ;
applicationReleaseDTO . setInstallerName ( applicationReleaseDTO . getUrl ( ) ) ;
}
}
}
} catch ( IOException e ) {
String msg = "Error occurred when getting byte array of binary file. Installer name: " + applicationArtifact
. getInstallerName ( ) ;
log . error ( msg ) ;
throw new ApplicationStorageManagementException ( msg ) ;
}
return applicationReleaseDTO ;
}
@ -380,117 +448,50 @@ public class ApplicationManagerImpl implements ApplicationManager {
ApplicationArtifact applicationArtifact ) throws ResourceManagementException {
ApplicationStorageManager applicationStorageManager = DAOUtil . getApplicationStorageManager ( ) ;
applicationStorageManager . deleteImageArtifacts ( applicationReleaseDTO ) ;
if ( ! StringUtils . isEmpty ( applicationArtifact . getIconName ( ) ) ) {
applicationStorageManager . deleteAppReleaseArtifact ( applicationReleaseDTO . getAppHashValue ( ) ,
applicationReleaseDTO . getIconName ( ) ) ;
applicationReleaseDTO . setIconName ( applicationArtifact . getIconName ( ) ) ;
}
if ( ! StringUtils . isEmpty ( applicationArtifact . getBannerName ( ) ) ) {
applicationStorageManager . deleteAppReleaseArtifact ( applicationReleaseDTO . getAppHashValue ( ) ,
applicationReleaseDTO . getBannerName ( ) ) ;
applicationReleaseDTO . setBannerName ( applicationArtifact . getBannerName ( ) ) ;
applicationReleaseDTO . setScreenshotName1 ( null ) ;
applicationReleaseDTO . setScreenshotName2 ( null ) ;
applicationReleaseDTO . setScreenshotName3 ( null ) ;
}
Map < String , InputStream > screenshots = applicationArtifact . getScreenshots ( ) ;
List < InputStream > screenshotStreams = new ArrayList < > ( ) ;
if ( screenshots ! = null ) {
List < String > screenshotNames = new ArrayList < > ( screenshots . keySet ( ) ) ;
screenshotStreams = new ArrayList < > ( screenshots . values ( ) ) ;
int counter = 1 ;
for ( String scName : screenshotNames ) {
if ( counter = = 1 ) {
applicationStorageManager . deleteAppReleaseArtifact ( applicationReleaseDTO . getAppHashValue ( ) ,
applicationReleaseDTO . getScreenshotName1 ( ) ) ;
applicationReleaseDTO . setScreenshotName1 ( scName ) ;
} else if ( counter = = 2 ) {
applicationStorageManager . deleteAppReleaseArtifact ( applicationReleaseDTO . getAppHashValue ( ) ,
applicationReleaseDTO . getScreenshotName2 ( ) ) ;
applicationReleaseDTO . setScreenshotName2 ( scName ) ;
} else if ( counter = = 3 ) {
applicationStorageManager . deleteAppReleaseArtifact ( applicationReleaseDTO . getAppHashValue ( ) ,
applicationReleaseDTO . getScreenshotName3 ( ) ) ;
applicationReleaseDTO . setScreenshotName3 ( scName ) ;
}
counter + + ;
}
}
// Upload images
applicationReleaseDTO = applicationStorageManager
. uploadImageArtifacts ( applicationReleaseDTO , applicationArtifact . getIconStream ( ) ,
applicationArtifact . getBannerStream ( ) , new ArrayList < > ( screenshots . values ( ) ) ) ;
applicationArtifact . getBannerStream ( ) , screenshotStreams ) ;
return applicationReleaseDTO ;
}
@Override
public Application createWebClip ( WebAppWrapper webAppWrapper , ApplicationArtifact applicationArtifact )
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
String userName = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getUsername ( ) ;
if ( log . isDebugEnabled ( ) ) {
log . debug ( "Web clip create request is received for the tenant : " + tenantId + " From" + " the user : "
+ userName ) ;
}
ApplicationDTO applicationDTO = APIUtil . convertToAppDTO ( webAppWrapper ) ;
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String md5 = DigestUtils . md5Hex ( applicationReleaseDTO . getInstallerName ( ) ) ;
applicationReleaseDTO . setUuid ( uuid ) ;
applicationReleaseDTO . setAppHashValue ( md5 ) ;
//uploading application artifacts
try {
applicationDTO . getApplicationReleaseDTOs ( ) . clear ( ) ;
applicationDTO . getApplicationReleaseDTOs ( ) . add ( addImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ) ;
} 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 , tenantId ) ;
}
@Override
public Application createPublicApp ( PublicAppWrapper publicAppWrapper , ApplicationArtifact applicationArtifact )
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
String userName = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getUsername ( ) ;
String publicAppStorePath = "" ;
if ( log . isDebugEnabled ( ) ) {
log . debug ( "Public app creating request is received for the tenant : " + tenantId + " From" + " the user : "
+ userName ) ;
}
if ( ! isValidOsVersions ( publicAppWrapper . getPublicAppReleaseWrappers ( ) . get ( 0 ) . getSupportedOsVersions ( ) ,
publicAppWrapper . getDeviceType ( ) ) ) {
String msg = "You are trying to add application release which has invalid or unsupported OS versions in "
+ "the supportedOsVersions section. Hence, please re-evaluate the request payload." ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;
}
if ( DeviceTypes . ANDROID . toString ( ) . equals ( publicAppWrapper . getDeviceType ( ) ) ) {
publicAppStorePath = Constants . GOOGLE_PLAY_STORE_URL ;
} else if ( DeviceTypes . IOS . toString ( ) . equals ( publicAppWrapper . getDeviceType ( ) ) ) {
publicAppStorePath = Constants . APPLE_STORE_URL ;
}
ApplicationDTO applicationDTO = APIUtil . convertToAppDTO ( publicAppWrapper ) ;
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String appInstallerUrl = publicAppStorePath + applicationReleaseDTO . getPackageName ( ) ;
//todo check app package name exist or not, do it in validation method
applicationReleaseDTO . setInstallerName ( appInstallerUrl ) ;
String md5 = DigestUtils . md5Hex ( appInstallerUrl ) ;
applicationReleaseDTO . setUuid ( uuid ) ;
applicationReleaseDTO . setAppHashValue ( md5 ) ;
//uploading application artifacts
try {
applicationDTO . getApplicationReleaseDTOs ( ) . clear ( ) ;
applicationDTO . getApplicationReleaseDTOs ( )
. add ( addImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ) ;
} catch ( ResourceManagementException e ) {
String msg = "Error Occured when uploading artifacts of the public app: " + publicAppWrapper . getName ( ) ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg , e ) ;
}
//insert application data into database
return addAppDataIntoDB ( applicationDTO , tenantId ) ;
}
@Override
public ApplicationList getApplications ( Filter filter ) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( ) ;
@ -745,7 +746,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
@Override
public ApplicationRelease createEntAppRelease ( int applicationId , ApplicationReleaseWrapper application ReleaseWrapper,
public ApplicationRelease createEntAppRelease ( int applicationId , EntAppReleaseWrapper entApp ReleaseWrapper,
ApplicationArtifact applicationArtifact ) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
ApplicationRelease applicationRelease ;
@ -764,14 +765,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new BadRequestException ( msg ) ;
}
DeviceType deviceType = getDeviceTypeData ( applicationDTO . getDeviceTypeId ( ) ) ;
if ( ! isValidOsVersions ( application ReleaseWrapper. getSupportedOsVersions ( ) , deviceType . getName ( ) ) ) {
if ( ! isValidOsVersions ( entApp ReleaseWrapper. getSupportedOsVersions ( ) , deviceType . getName ( ) ) ) {
String msg = "You are trying to add application release which has invalid or unsupported OS versions in "
+ "the supportedOsVersions section. Hence, please re-evaluate the request payload." ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;
}
ApplicationReleaseDTO applicationReleaseDTO = uploadReleaseArtifacts ( applicationReleaseWrapper ,
applicationDTO , applicationArtifact , deviceType . getName ( ) ) ;
ApplicationReleaseDTO applicationReleaseDTO = uploadEntAppReleaseArtifacts (
APIUtil . releaseWrapperToReleaseDTO ( entAppReleaseWrapper ) ,
applicationArtifact , deviceType . getName ( ) , true ) ;
ConnectionManagerUtil . beginDBTransaction ( ) ;
String initialstate = lifecycleStateManager . getInitialState ( ) ;
applicationReleaseDTO . setCurrentState ( initialstate ) ;
@ -829,18 +831,16 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
private ApplicationReleaseDTO upload ReleaseArtifacts( ApplicationRelease Wrapper applicationReleaseWrapper ,
Application DTO applicationDTO , Application Artifact applicationArtifact , String deviceTypeNam e)
private ApplicationReleaseDTO upload EntApp ReleaseArtifacts( ApplicationRelease DTO releaseDTO ,
Application Artifact applicationArtifact , String deviceTypeNam e, boolean isNewReleas e)
throws ApplicationManagementException {
try {
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts ( applicationDTO . getType ( ) ,
deviceTypeName , APIUtil . releaseWrapperToReleaseDTO ( applicationReleaseWrapper ) , applicationArtifact ,
true ) ;
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts ( deviceTypeName , releaseDTO ,
applicationArtifact , isNewRelease ) ;
return addImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ;
} catch ( ResourceManagementException e ) {
String msg =
"Error occurred while uploading application release artifacts. Application ID: " + applicationDTO
. getId ( ) ;
String msg = "Error occurred while uploading application release artifacts." ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg , e ) ;
}
}
@ -1129,6 +1129,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
try {
ConnectionManagerUtil . beginDBTransaction ( ) ;
List < Integer > deletingAppReleaseIds = new ArrayList < > ( ) ;
List < String > deletingAppHashVals = new ArrayList < > ( ) ;
for ( ApplicationReleaseDTO applicationReleaseDTO : applicationReleaseDTOs ) {
List < DeviceSubscriptionDTO > deviceSubscriptionDTOS = subscriptionDAO
. getDeviceSubscriptions ( applicationReleaseDTO . getId ( ) , tenantId ) ;
@ -1139,9 +1140,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
log . error ( msg ) ;
throw new ForbiddenException ( msg ) ;
}
applicationStorageManager. deleteApplicationReleaseArtifacts ( applicationReleaseDTO . getAppHashValue ( ) ) ;
deletingAppHashVals. add ( applicationReleaseDTO . getAppHashValue ( ) ) ;
deletingAppReleaseIds . add ( applicationReleaseDTO . getId ( ) ) ;
}
applicationStorageManager . deleteAllApplicationReleaseArtifacts ( deletingAppHashVals ) ;
this . lifecycleStateDAO . deleteLifecycleStates ( deletingAppReleaseIds ) ;
this . applicationReleaseDAO . deleteReleases ( deletingAppReleaseIds ) ;
this . applicationDAO . deleteApplicationTags ( applicationId , tenantId ) ;
@ -1186,8 +1188,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
if ( ! activeApplicationReleaseDTOs . isEmpty ( ) ) {
String msg = "There are application releases which are not in the state " + lifecycleStateManager
. getEndState ( ) + " . Hence you are not allowed to delete the application";
String msg = "There are application releases which are not in the " + lifecycleStateManager
. getEndState ( ) + " state . Hence you are not allowed to delete the application";
log . error ( msg ) ;
throw new ForbiddenException ( msg ) ;
}
@ -1232,7 +1234,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
log . error ( msg ) ;
throw new ForbiddenException ( msg ) ;
}
applicationStorageManager . deleteApplicationReleaseArtifacts ( applicationReleaseDTO . getAppHashValue ( ) ) ;
applicationStorageManager . deleteAllApplicationReleaseArtifacts (
Collections . singletonList ( applicationReleaseDTO . getAppHashValue ( ) ) ) ;
lifecycleStateDAO . deleteLifecycleStateByReleaseId ( applicationReleaseDTO . getId ( ) ) ;
applicationReleaseDAO . deleteRelease ( applicationReleaseDTO . getId ( ) ) ;
ConnectionManagerUtil . commitDBTransaction ( ) ;
@ -1278,10 +1281,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
+ " into updatable state and retry the operation." ) ;
}
applicationReleaseDTO = this . applicationReleaseDAO
. updateRelease ( add ImageArtifacts( applicationReleaseDTO , applicationArtifact ) , tenantId ) ;
. updateRelease ( update ImageArtifacts( applicationReleaseDTO , applicationArtifact ) , tenantId ) ;
if ( applicationReleaseDTO = = null ) {
ConnectionManagerUtil . rollbackDBTransaction ( ) ;
String msg = "Application DTO release updating count is 0. ApplicationDTO release UUID is " + uuid ;
String msg = "Application release updating count is 0 for application release UUID: " + uuid ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg ) ;
}
@ -1310,7 +1313,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
@Override
public void updateApplicationArtifact ( String deviceType , String appType, String uuid,
public void updateApplicationArtifact ( String deviceType , String uuid,
ApplicationArtifact applicationArtifact ) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
boolean isValidDeviceType = false ;
@ -1338,15 +1341,31 @@ public class ApplicationManagerImpl implements ApplicationManager {
try {
ConnectionManagerUtil . beginDBTransaction ( ) ;
Application Release DTO application Release DTO = this . application ReleaseDAO. getRelease ByUUID( uuid , tenantId ) ;
if ( application Release DTO = = null ) {
String msg = "Couldn't found an application release for UUID: " + uuid ;
Application DTO application DTO = this . application DAO. getApplication ByUUID( uuid , tenantId ) ;
if ( application DTO = = null ) {
String msg = "Couldn't found an application which has application release for UUID: " + uuid ;
log . error ( msg ) ;
throw new NotFoundException ( msg ) ;
}
if ( ! ApplicationType . ENTERPRISE . toString ( ) . equals ( applicationDTO . getType ( ) ) ) {
String msg = "If Application type is " + applicationDTO . getType ( ) + ", then you don't have application "
+ "release artifact to update for application release UUID: " + uuid ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg ) ;
}
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
if ( ! lifecycleStateManager . isUpdatableState ( applicationReleaseDTO . getCurrentState ( ) ) ) {
String msg = "Application release in " + applicationReleaseDTO . getCurrentState ( )
+ " state. Therefore you are not allowed to update the application release. Hence, "
+ "please move application release from " + applicationReleaseDTO . getCurrentState ( )
+ " to updatable state." ;
log . error ( msg ) ;
throw new ForbiddenException ( msg ) ;
}
applicationReleaseDTO = updateApplicationReleaseArtifacts ( appType , deviceType , applicationReleaseDTO ,
applicationArtifact ) ;
applicationReleaseDTO = update Ent AppReleaseArtifact( deviceType, applicationReleaseDTO
, applicationArtifact ) ;
applicationReleaseDTO = this . applicationReleaseDAO . updateRelease ( applicationReleaseDTO , tenantId ) ;
if ( applicationReleaseDTO = = null ) {
ConnectionManagerUtil . rollbackDBTransaction ( ) ;
@ -2105,22 +2124,26 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
@Override
public boolean updateRelease ( String deviceType , String applicationType , String releaseUuid ,
ApplicationReleaseWrapper applicationReleaseWrapper , ApplicationArtifact applicationArtifact )
throws ApplicationManagementException {
public boolean updateEntAppRelease ( String deviceType , String releaseUuid , EntAppReleaseWrapper entAppReleaseWrapper ,
ApplicationArtifact applicationArtifact ) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext . getThreadLocalCarbonContext ( ) . getTenantId ( true ) ;
try {
ConnectionManagerUtil . beginDBTransaction ( ) ;
ApplicationReleaseDTO applicationReleaseDTO = this . applicationReleaseDAO
. getReleaseByUUID ( releaseUuid , tenantId ) ;
ApplicationDTO applicationDTO = this . applicationDAO . getApplicationByUUID ( releaseUuid , tenantId ) ;
if ( application Release DTO = = null ) {
String msg = "Couldn't found an application release for updating. Application release UUID: " + releaseUuid ;
if ( application DTO = = null ) {
String msg = "Couldn't found an application which has application release for UUID: " + releaseUuid ;
log . error ( msg ) ;
throw new NotFoundException ( msg ) ;
}
if ( ! ApplicationType . ENTERPRISE . toString ( ) . equals ( applicationDTO . getType ( ) ) ) {
String msg = "You trying to perform enterprise app release update on non-enterprise app release." ;
log . error ( msg ) ;
throw new ForbiddenException ( msg ) ;
}
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO . getApplicationReleaseDTOs ( ) . get ( 0 ) ;
if ( ! lifecycleStateManager . isUpdatableState ( applicationReleaseDTO . getCurrentState ( ) ) ) {
String msg = "Application release in " + applicationReleaseDTO . getCurrentState ( )
+ " state. Therefore you are not allowed to update the application release. Hence, "
@ -2131,15 +2154,9 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
DeviceType deviceTypeObj = getDeviceTypeData ( deviceType ) ;
Double price = applicationReleaseWrapper . getPrice ( ) ;
String applicationSubType = this . applicationDAO . getApplicationSubTypeByUUID ( releaseUuid , tenantId ) ;
if ( applicationSubType = = null ) {
String msg = "Couldn't find an application subscription type for the application release UUID: " + releaseUuid ;
log . error ( msg ) ;
throw new ApplicationManagementException ( msg ) ;
}
Double price = entAppReleaseWrapper . getPrice ( ) ;
String applicationSubType = applicationDTO . getSubType ( ) ;
if ( price < 0.0 | | ( price = = 0.0 & & ApplicationSubscriptionType . PAID . toString ( ) . equals ( applicationSubType ) )
| | ( price > 0.0 & & ApplicationSubscriptionType . FREE . toString ( ) . equals ( applicationSubType ) ) ) {
throw new BadRequestException (
@ -2150,7 +2167,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationReleaseDTO . setPrice ( price ) ;
applicationReleaseDTO . setIsSharedWithAllTenants ( applicationReleaseDTO . getIsSharedWithAllTenants ( ) ) ;
String supportedOSVersions = application ReleaseWrapper. getSupportedOsVersions ( ) ;
String supportedOSVersions = entApp ReleaseWrapper. getSupportedOsVersions ( ) ;
if ( ! StringUtils . isEmpty ( supportedOSVersions ) ) {
if ( ! isValidOsVersions ( supportedOSVersions , deviceType ) ) {
String msg = "You are trying to update application release which has invalid or unsupported OS "
@ -2159,18 +2176,20 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new BadRequestException ( msg ) ; }
applicationReleaseDTO . setSupportedOsVersions ( supportedOSVersions ) ;
}
if ( ! StringUtils . isEmpty ( application ReleaseWrapper. getDescription ( ) ) ) {
applicationReleaseDTO . setDescription ( application ReleaseWrapper. getDescription ( ) ) ;
if ( ! StringUtils . isEmpty ( entApp ReleaseWrapper. getDescription ( ) ) ) {
applicationReleaseDTO . setDescription ( entApp ReleaseWrapper. getDescription ( ) ) ;
}
if ( ! StringUtils . isEmpty ( application ReleaseWrapper. getReleaseType ( ) ) ) {
applicationReleaseDTO . setReleaseType ( application ReleaseWrapper. getReleaseType ( ) ) ;
if ( ! StringUtils . isEmpty ( entApp ReleaseWrapper. getReleaseType ( ) ) ) {
applicationReleaseDTO . setReleaseType ( entApp ReleaseWrapper. getReleaseType ( ) ) ;
}
if ( ! StringUtils . isEmpty ( application ReleaseWrapper. getMetaData ( ) ) ) {
applicationReleaseDTO . setMetaData ( application ReleaseWrapper. getMetaData ( ) ) ;
if ( ! StringUtils . isEmpty ( entApp ReleaseWrapper. getMetaData ( ) ) ) {
applicationReleaseDTO . setMetaData ( entApp ReleaseWrapper. getMetaData ( ) ) ;
}
applicationReleaseDTO = updateApplicationReleaseArtifacts ( applicationType , deviceTypeObj . getName ( ) ,
if ( ! StringUtils . isEmpty ( applicationArtifact . getInstallerName ( ) ) & & applicationArtifact . getInstallerStream ( ) ! = null ) {
applicationReleaseDTO = updateEntAppReleaseArtifact ( deviceTypeObj . getName ( ) ,
applicationReleaseDTO , applicationArtifact ) ;
}
applicationReleaseDTO = updateImageArtifacts ( applicationReleaseDTO , applicationArtifact ) ;
boolean updateStatus = applicationReleaseDAO . updateRelease ( applicationReleaseDTO , tenantId ) ! = null ;
@ -2232,10 +2251,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
DeviceType deviceType = getDeviceTypeData ( applicationWrapper . getDeviceType ( ) ) ;
deviceTypeId = deviceType . getId ( ) ;
List < ApplicationReleaseWrapper> application ReleaseWrappers;
application ReleaseWrappers = applicationWrapper . get Application ReleaseWrappers( ) ;
List < EntAppReleaseWrapper> entApp ReleaseWrappers;
entApp ReleaseWrappers = applicationWrapper . get Ent AppReleaseWrappers( ) ;
if ( applicationReleaseWrappers = = null | | application ReleaseWrappers. size ( ) ! = 1 ) {
if ( entAppReleaseWrappers = = null | | entApp ReleaseWrappers. size ( ) ! = 1 ) {
String msg = "Invalid application creating request. Application creating request must have single "
+ "application release. Application name:" + applicationWrapper . getName ( ) + "." ;
log . error ( msg ) ;
@ -2402,9 +2421,9 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new BadRequestException ( msg ) ;
}
if ( param instanceof Application ReleaseWrapper) {
ApplicationReleaseWrapper applicationReleaseWrapper = ( Application ReleaseWrapper) param ;
if ( StringUtils . isEmpty ( application ReleaseWrapper. getSupportedOsVersions ( ) ) ) {
if ( param instanceof Ent AppReleaseWrapper) {
EntAppReleaseWrapper entAppReleaseWrapper = ( EntApp ReleaseWrapper) param ;
if ( StringUtils . isEmpty ( entApp ReleaseWrapper. getSupportedOsVersions ( ) ) ) {
String msg = "Supported OS Version shouldn't be null or empty." ;
log . error ( msg ) ;
throw new BadRequestException ( msg ) ;