mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Refactor and modify storage management logic
This commit is contained in:
parent
c950223283
commit
2fd7601139
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.application.mgt.common.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the exception thrown during validating the request.
|
||||||
|
*/
|
||||||
|
public class RequestValidatingException extends Exception{
|
||||||
|
|
||||||
|
public RequestValidatingException(String message, Throwable ex) {
|
||||||
|
super(message, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequestValidatingException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -22,6 +22,7 @@ package org.wso2.carbon.device.application.mgt.common.services;
|
|||||||
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.RequestValidatingException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -64,7 +65,7 @@ public interface ApplicationStorageManager {
|
|||||||
* @throws ResourceManagementException Resource Management Exception.
|
* @throws ResourceManagementException Resource Management Exception.
|
||||||
*/
|
*/
|
||||||
ApplicationRelease uploadReleaseArtifact(ApplicationRelease applicationRelease, String appType, InputStream binaryFile)
|
ApplicationRelease uploadReleaseArtifact(ApplicationRelease applicationRelease, String appType, InputStream binaryFile)
|
||||||
throws ResourceManagementException;
|
throws ResourceManagementException, RequestValidatingException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To upload release artifacts for an Application.
|
* To upload release artifacts for an Application.
|
||||||
@ -75,7 +76,7 @@ public interface ApplicationStorageManager {
|
|||||||
* @throws ApplicationStorageManagementException Resource Management Exception.
|
* @throws ApplicationStorageManagementException Resource Management Exception.
|
||||||
*/
|
*/
|
||||||
ApplicationRelease updateReleaseArtifacts(ApplicationRelease applicationRelease, String appType, InputStream binaryFile)
|
ApplicationRelease updateReleaseArtifacts(ApplicationRelease applicationRelease, String appType, InputStream binaryFile)
|
||||||
throws ApplicationStorageManagementException;
|
throws ApplicationStorageManagementException, RequestValidatingException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To delete the artifacts related with particular Application Release.
|
* To delete the artifacts related with particular Application Release.
|
||||||
|
|||||||
@ -142,8 +142,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
|||||||
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY"
|
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY"
|
||||||
+
|
+
|
||||||
" AS APP_CATEGORY, AP_APP.SUB_TYPE AS SUB_TYPE, AP_APP.CURRENCY AS CURRENCY, "
|
" AS APP_CATEGORY, AP_APP.SUB_TYPE AS SUB_TYPE, AP_APP.CURRENCY AS CURRENCY, "
|
||||||
+ "AP_APP.RESTRICTED, AP_APP_TAG.TAG AS APP_TAG, AP_UNRESTRICTED_ROLES.ROLE "
|
+ "AP_APP.RESTRICTED AS RESTRICTED, AP_APP_TAG.TAG AS APP_TAG, AP_UNRESTRICTED_ROLES.ROLE "
|
||||||
+ "AS APP_UNRESTRICTED_ROLES FROM ((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) "
|
+ "AS ROLE FROM ((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) "
|
||||||
+ "LEFT JOIN AP_UNRESTRICTED_ROLES ON AP_APP.ID = AP_UNRESTRICTED_ROLES.AP_APP_ID) "
|
+ "LEFT JOIN AP_UNRESTRICTED_ROLES ON AP_APP.ID = AP_UNRESTRICTED_ROLES.AP_APP_ID) "
|
||||||
+ "WHERE AP_APP.TENANT_ID = ? AND AP_APP.STATUS != ?";
|
+ "WHERE AP_APP.TENANT_ID = ? AND AP_APP.STATUS != ?";
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,7 @@ import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|||||||
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
|
||||||
import org.wso2.carbon.device.application.mgt.common.ApplicationType;
|
import org.wso2.carbon.device.application.mgt.common.ApplicationType;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.RequestValidatingException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||||
@ -47,6 +48,7 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -104,9 +106,10 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
saveFile(bannerFileStream, bannerStoredLocation);
|
saveFile(bannerFileStream, bannerStoredLocation);
|
||||||
applicationRelease.setBannerLoc(bannerStoredLocation);
|
applicationRelease.setBannerLoc(bannerStoredLocation);
|
||||||
}
|
}
|
||||||
if (screenShotStreams.size() > screenShotMaxCount) {
|
if (!screenShotStreams.isEmpty()) {
|
||||||
throw new ApplicationStorageManagementException("Maximum limit for the screen-shot exceeds");
|
if (screenShotStreams.size() > screenShotMaxCount) {
|
||||||
} else if (!screenShotStreams.isEmpty() && screenShotStreams.size() <= screenShotMaxCount) {
|
throw new ApplicationStorageManagementException("Maximum limit for the screen-shot exceeds");
|
||||||
|
}
|
||||||
int count = 1;
|
int count = 1;
|
||||||
for (InputStream screenshotStream : screenShotStreams) {
|
for (InputStream screenshotStream : screenShotStreams) {
|
||||||
scStoredLocation = artifactDirectoryPath + File.separator + Constants.IMAGE_ARTIFACTS[2] + count;
|
scStoredLocation = artifactDirectoryPath + File.separator + Constants.IMAGE_ARTIFACTS[2] + count;
|
||||||
@ -123,7 +126,6 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return applicationRelease;
|
return applicationRelease;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new ApplicationStorageManagementException("IO Exception while saving the screens hots for " +
|
throw new ApplicationStorageManagementException("IO Exception while saving the screens hots for " +
|
||||||
@ -149,9 +151,10 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
if (bannerFileStream != null) {
|
if (bannerFileStream != null) {
|
||||||
deleteApplicationReleaseArtifacts(applicationRelease.getBannerLoc());
|
deleteApplicationReleaseArtifacts(applicationRelease.getBannerLoc());
|
||||||
}
|
}
|
||||||
if (screenShotStreams.size() > screenShotMaxCount) {
|
if (!screenShotStreams.isEmpty()) {
|
||||||
throw new ApplicationStorageManagementException("Maximum limit for the screen-shot exceeds");
|
if (screenShotStreams.size() > screenShotMaxCount) {
|
||||||
} else if (!screenShotStreams.isEmpty() && screenShotStreams.size() <= screenShotMaxCount) {
|
throw new ApplicationStorageManagementException("Maximum limit for the screen-shot exceeds");
|
||||||
|
}
|
||||||
int count = 1;
|
int count = 1;
|
||||||
while (count < screenShotStreams.size()) {
|
while (count < screenShotStreams.size()) {
|
||||||
if (count == 1) {
|
if (count == 1) {
|
||||||
@ -166,8 +169,7 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
applicationRelease = uploadImageArtifacts(applicationRelease, iconFileStream, bannerFileStream, screenShotStreams);
|
return uploadImageArtifacts(applicationRelease, iconFileStream, bannerFileStream, screenShotStreams);
|
||||||
return applicationRelease;
|
|
||||||
} catch (ApplicationStorageManagementException e) {
|
} catch (ApplicationStorageManagementException e) {
|
||||||
ConnectionManagerUtil.rollbackDBTransaction();
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
throw new ApplicationStorageManagementException("Application Storage exception while trying to"
|
throw new ApplicationStorageManagementException("Application Storage exception while trying to"
|
||||||
@ -177,15 +179,15 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApplicationRelease uploadReleaseArtifact(ApplicationRelease applicationRelease, String appType, InputStream binaryFile)
|
public ApplicationRelease uploadReleaseArtifact(ApplicationRelease applicationRelease, String appType,
|
||||||
throws ResourceManagementException {
|
InputStream binaryFile) throws ResourceManagementException, RequestValidatingException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (ApplicationType.WEB_CLIP.toString().equals(appType)) {
|
if (ApplicationType.WEB_CLIP.toString().equals(appType)) {
|
||||||
applicationRelease.setVersion(Constants.DEFAULT_VERSION);
|
applicationRelease.setVersion(Constants.DEFAULT_VERSION);
|
||||||
UrlValidator urlValidator = new UrlValidator();
|
UrlValidator urlValidator = new UrlValidator();
|
||||||
if (applicationRelease.getUrl() == null || !urlValidator.isValid(applicationRelease.getUrl())) {
|
if (applicationRelease.getUrl() == null || !urlValidator.isValid(applicationRelease.getUrl())) {
|
||||||
throw new ApplicationStorageManagementException("Request payload doesn't contains Web Clip URL " +
|
throw new RequestValidatingException("Request payload doesn't contains Web Clip URL " +
|
||||||
"with application release object or Web " +
|
"with application release object or Web " +
|
||||||
"Clip URL is invalid");
|
"Clip URL is invalid");
|
||||||
//todo if we throw this we must send BAD REQUEST to end user
|
//todo if we throw this we must send BAD REQUEST to end user
|
||||||
@ -208,32 +210,25 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
if (ApplicationType.ANDROID.toString().equals(appType)) {
|
if (ApplicationType.ANDROID.toString().equals(appType)) {
|
||||||
String prefix = "stream2file";
|
String prefix = "stream2file";
|
||||||
String suffix = ".apk";
|
String suffix = ".apk";
|
||||||
Boolean isTempDelete;
|
|
||||||
|
|
||||||
File tempFile = File.createTempFile(prefix, suffix);
|
File tempFile = File.createTempFile(prefix, suffix);
|
||||||
FileOutputStream out = new FileOutputStream(tempFile);
|
FileOutputStream out = new FileOutputStream(tempFile);
|
||||||
IOUtils.copy(binaryFile, out);
|
IOUtils.copy(binaryFile, out);
|
||||||
ApkFile apkFile = new ApkFile(tempFile);
|
try (ApkFile apkFile = new ApkFile(tempFile)){
|
||||||
ApkMeta apkMeta = apkFile.getApkMeta();
|
ApkMeta apkMeta = apkFile.getApkMeta();
|
||||||
applicationRelease.setVersion(apkMeta.getVersionName());
|
applicationRelease.setVersion(apkMeta.getVersionName());
|
||||||
isTempDelete = tempFile.delete();
|
Files.delete(tempFile.toPath());
|
||||||
if (!isTempDelete) {
|
|
||||||
log.error("Temporary created APK file deletion failed");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (ApplicationType.IOS.toString().equals(appType)) {
|
} else if (ApplicationType.IOS.toString().equals(appType)) {
|
||||||
String prefix = "stream2file";
|
String prefix = "stream2file";
|
||||||
String suffix = ".ipa";
|
String suffix = ".ipa";
|
||||||
Boolean isTempDelete;
|
|
||||||
|
|
||||||
File tempFile = File.createTempFile(prefix, suffix);
|
File tempFile = File.createTempFile(prefix, suffix);
|
||||||
FileOutputStream out = new FileOutputStream(tempFile);
|
FileOutputStream out = new FileOutputStream(tempFile);
|
||||||
IOUtils.copy(binaryFile, out);
|
IOUtils.copy(binaryFile, out);
|
||||||
Map<String, String> plistInfo = getIPAInfo(tempFile);
|
Map<String, String> plistInfo = getIPAInfo(tempFile);
|
||||||
applicationRelease.setVersion(plistInfo.get("CFBundleVersion"));
|
applicationRelease.setVersion(plistInfo.get("CFBundleVersion"));
|
||||||
isTempDelete = tempFile.delete();
|
Files.delete(tempFile.toPath());
|
||||||
if (!isTempDelete) {
|
|
||||||
log.error("Temporary created ipa file deletion failed");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw new ApplicationStorageManagementException("Application Type doesn't match with supporting " +
|
throw new ApplicationStorageManagementException("Application Type doesn't match with supporting " +
|
||||||
"application types " + applicationRelease.getUuid());
|
"application types " + applicationRelease.getUuid());
|
||||||
@ -262,7 +257,7 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApplicationRelease updateReleaseArtifacts(ApplicationRelease applicationRelease, String appType,
|
public ApplicationRelease updateReleaseArtifacts(ApplicationRelease applicationRelease, String appType,
|
||||||
InputStream binaryFile) throws ApplicationStorageManagementException {
|
InputStream binaryFile) throws ApplicationStorageManagementException, RequestValidatingException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
deleteApplicationReleaseArtifacts(applicationRelease.getAppStoredLoc());
|
deleteApplicationReleaseArtifacts(applicationRelease.getAppStoredLoc());
|
||||||
@ -284,15 +279,20 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
File artifact = new File(artifactPath);
|
File artifact = new File(artifactPath);
|
||||||
|
|
||||||
if (artifact.exists()) {
|
if (artifact.exists()) {
|
||||||
StorageManagementUtil.deleteDir(artifact);
|
try {
|
||||||
|
StorageManagementUtil.deleteDir(artifact);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ApplicationStorageManagementException(
|
||||||
|
"Error occured while deleting application release artifacts", e);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new ApplicationStorageManagementException("Tried to delete application release, but it doesn't exist " +
|
throw new ApplicationStorageManagementException(
|
||||||
"in the system");
|
"Tried to delete application release, but it doesn't exist in the system");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override public void deleteAllApplicationReleaseArtifacts(List<String> directoryPaths)
|
||||||
public void deleteAllApplicationReleaseArtifacts(List<String> directoryPaths) throws ApplicationStorageManagementException {
|
throws ApplicationStorageManagementException {
|
||||||
for (String directoryBasePath : directoryPaths) {
|
for (String directoryBasePath : directoryPaths) {
|
||||||
deleteApplicationReleaseArtifacts(directoryBasePath);
|
deleteApplicationReleaseArtifacts(directoryBasePath);
|
||||||
}
|
}
|
||||||
@ -346,6 +346,11 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
NSString parameter = (NSString) rootDict.objectForKey(Constants.CF_BUNDLE_VERSION);
|
NSString parameter = (NSString) rootDict.objectForKey(Constants.CF_BUNDLE_VERSION);
|
||||||
ipaInfo.put(Constants.CF_BUNDLE_VERSION, parameter.toString());
|
ipaInfo.put(Constants.CF_BUNDLE_VERSION, parameter.toString());
|
||||||
|
|
||||||
|
if (ipaDirectory != null) {
|
||||||
|
// remove unzip folder
|
||||||
|
deleteDir(new File(ipaDirectory + File.separator + Constants.PAYLOAD));
|
||||||
|
}
|
||||||
|
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
String msg = "Error occurred while parsing the plist data";
|
String msg = "Error occurred while parsing the plist data";
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
@ -361,11 +366,6 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
String msg = "Error occurred while unzipping the ipa file";
|
String msg = "Error occurred while unzipping the ipa file";
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
throw new ApplicationStorageManagementException(msg, e);
|
throw new ApplicationStorageManagementException(msg, e);
|
||||||
} finally {
|
|
||||||
if (ipaDirectory != null) {
|
|
||||||
// remove unzip folder
|
|
||||||
deleteDir(new File(ipaDirectory + File.separator + Constants.PAYLOAD));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ipaInfo;
|
return ipaInfo;
|
||||||
}
|
}
|
||||||
@ -380,7 +380,7 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
private void unzip(String zipFilePath, String destDirectory)
|
private void unzip(String zipFilePath, String destDirectory)
|
||||||
throws IOException, ApplicationStorageManagementException {
|
throws IOException, ApplicationStorageManagementException {
|
||||||
File destDir = new File(destDirectory);
|
File destDir = new File(destDirectory);
|
||||||
Boolean isDirCreated;
|
boolean isDirCreated;
|
||||||
|
|
||||||
if (!destDir.exists()) {
|
if (!destDir.exists()) {
|
||||||
isDirCreated = destDir.mkdir();
|
isDirCreated = destDir.mkdir();
|
||||||
@ -389,33 +389,31 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
"retrieval");
|
"retrieval");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) {
|
||||||
|
|
||||||
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
|
ZipEntry entry = zipIn.getNextEntry();
|
||||||
ZipEntry entry = zipIn.getNextEntry();
|
// iterates over entries in the zip file
|
||||||
|
while (entry != null) {
|
||||||
|
String filePath = destDirectory + File.separator + entry.getName();
|
||||||
|
|
||||||
// iterates over entries in the zip file
|
if (!entry.isDirectory()) {
|
||||||
while (entry != null) {
|
// if the entry is a file, extracts it
|
||||||
String filePath = destDirectory + File.separator + entry.getName();
|
extractFile(zipIn, filePath);
|
||||||
|
} else {
|
||||||
|
// if the entry is a directory, make the directory
|
||||||
|
File dir = new File(filePath);
|
||||||
|
isDirCreated = dir.mkdir();
|
||||||
|
if (!isDirCreated) {
|
||||||
|
throw new ApplicationStorageManagementException(
|
||||||
|
"Directory Creation Is Failed while iOS app vertion " + "retrieval");
|
||||||
|
}
|
||||||
|
|
||||||
if (!entry.isDirectory()) {
|
|
||||||
// if the entry is a file, extracts it
|
|
||||||
extractFile(zipIn, filePath);
|
|
||||||
} else {
|
|
||||||
// if the entry is a directory, make the directory
|
|
||||||
File dir = new File(filePath);
|
|
||||||
isDirCreated = dir.mkdir();
|
|
||||||
if (!isDirCreated) {
|
|
||||||
throw new ApplicationStorageManagementException(
|
|
||||||
"Directory Creation Is Failed while iOS app vertion " +
|
|
||||||
"retrieval");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zipIn.closeEntry();
|
||||||
|
entry = zipIn.getNextEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
zipIn.closeEntry();
|
|
||||||
entry = zipIn.getNextEntry();
|
|
||||||
}
|
}
|
||||||
zipIn.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -425,13 +423,12 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
|||||||
* @param filePath file path
|
* @param filePath file path
|
||||||
*/
|
*/
|
||||||
private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
|
private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
|
||||||
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
|
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) {
|
||||||
byte[] bytesIn = new byte[BUFFER_SIZE];
|
byte[] bytesIn = new byte[BUFFER_SIZE];
|
||||||
int read;
|
int read;
|
||||||
|
while ((read = zipIn.read(bytesIn)) != -1) {
|
||||||
while ((read = zipIn.read(bytesIn)) != -1) {
|
bos.write(bytesIn, 0, read);
|
||||||
bos.write(bytesIn, 0, read);
|
}
|
||||||
}
|
}
|
||||||
bos.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,14 +55,14 @@ public class StorageManagementUtil {
|
|||||||
*
|
*
|
||||||
* @param artifactDirectory Artifact Directory that need to be deleted.
|
* @param artifactDirectory Artifact Directory that need to be deleted.
|
||||||
*/
|
*/
|
||||||
public static void deleteDir(File artifactDirectory) {
|
public static void deleteDir(File artifactDirectory) throws IOException {
|
||||||
File[] contents = artifactDirectory.listFiles();
|
File[] contents = artifactDirectory.listFiles();
|
||||||
if (contents != null) {
|
if (contents != null) {
|
||||||
for (File file : contents) {
|
for (File file : contents) {
|
||||||
deleteDir(file);
|
deleteDir(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
artifactDirectory.delete();
|
Files.delete(artifactDirectory.toPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,19 +72,13 @@ public class StorageManagementUtil {
|
|||||||
* @param path Path the file need to be saved in.
|
* @param path Path the file need to be saved in.
|
||||||
*/
|
*/
|
||||||
public static void saveFile(InputStream inputStream, String path) throws IOException {
|
public static void saveFile(InputStream inputStream, String path) throws IOException {
|
||||||
OutputStream outStream = null;
|
try (OutputStream outStream = new FileOutputStream(new File(path))) {
|
||||||
try {
|
|
||||||
byte[] buffer = new byte[inputStream.available()];
|
byte[] buffer = new byte[inputStream.available()];
|
||||||
inputStream.read(buffer);
|
if (inputStream.read(buffer) != -1) {
|
||||||
outStream = new FileOutputStream(new File(path));
|
outStream.write(buffer);
|
||||||
outStream.write(buffer);
|
|
||||||
} finally {
|
|
||||||
|
|
||||||
inputStream.close();
|
|
||||||
|
|
||||||
if (outStream != null) {
|
|
||||||
outStream.close();
|
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
inputStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
|||||||
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
import org.wso2.carbon.device.application.mgt.common.*;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.RequestValidatingException;
|
||||||
import org.wso2.carbon.device.application.mgt.publisher.api.APIUtil;
|
import org.wso2.carbon.device.application.mgt.publisher.api.APIUtil;
|
||||||
import org.wso2.carbon.device.application.mgt.publisher.api.services.ApplicationManagementAPI;
|
import org.wso2.carbon.device.application.mgt.publisher.api.services.ApplicationManagementAPI;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
@ -171,6 +172,9 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
log.error(errorMessage, e);
|
log.error(errorMessage, e);
|
||||||
return APIUtil.getResponse(new ApplicationManagementException(errorMessage, e),
|
return APIUtil.getResponse(new ApplicationManagementException(errorMessage, e),
|
||||||
Response.Status.INTERNAL_SERVER_ERROR);
|
Response.Status.INTERNAL_SERVER_ERROR);
|
||||||
|
} catch (RequestValidatingException e) {
|
||||||
|
log.error("Error occured while handling the application creating request");
|
||||||
|
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,8 +256,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
if (binaryFile == null) {
|
if (binaryFile == null) {
|
||||||
return Response.status(Response.Status.BAD_REQUEST)
|
return APIUtil.getResponse("Uploading artifacts for the application is failed " + applicationUuid,
|
||||||
.entity("Uploading artifacts for the application is failed " + applicationUuid).build();
|
Response.Status.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
applicationRelease = applicationManager.validateApplicationRelease(applicationId, applicationUuid);
|
applicationRelease = applicationManager.validateApplicationRelease(applicationId, applicationUuid);
|
||||||
applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, appType,
|
applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, appType,
|
||||||
@ -263,7 +267,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
.entity("Successfully uploaded artifacts for the application release. UUID is " + applicationUuid).build();
|
.entity("Successfully uploaded artifacts for the application release. UUID is " + applicationUuid).build();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
String msg =
|
String msg =
|
||||||
"Exception while trying to read icon, banner files for the application release" + applicationUuid;
|
"Error occured while trying to read icon, banner files for the application release" + applicationUuid;
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
return APIUtil.getResponse(new ApplicationManagementException(msg, e),
|
return APIUtil.getResponse(new ApplicationManagementException(msg, e),
|
||||||
Response.Status.BAD_REQUEST);
|
Response.Status.BAD_REQUEST);
|
||||||
@ -275,6 +279,10 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
log.error("Error occurred while updating the image artifacts of the application with the uuid "
|
log.error("Error occurred while updating the image artifacts of the application with the uuid "
|
||||||
+ applicationUuid, e);
|
+ applicationUuid, e);
|
||||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||||
|
} catch (RequestValidatingException e) {
|
||||||
|
log.error("Error occured while handling the application artifact updating request. application release UUID: "
|
||||||
|
+ applicationUuid);
|
||||||
|
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,6 +365,10 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
log.error("Error occurred while updating the releases artifacts of the application with the uuid "
|
log.error("Error occurred while updating the releases artifacts of the application with the uuid "
|
||||||
+ applicationUUID + " for the release " + applicationRelease.getVersion(), e);
|
+ applicationUUID + " for the release " + applicationRelease.getVersion(), e);
|
||||||
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||||
|
} catch (RequestValidatingException e) {
|
||||||
|
log.error("Error occured while handling the application release updating request. application release UUID: "
|
||||||
|
+ applicationUUID);
|
||||||
|
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user