diff --git a/pom.xml b/pom.xml
index 024ef6b57..9a894884d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,18 +51,6 @@
-
- org.wso2.carbon.devicemgt
- org.wso2.carbon.device.mgt.analytics.data.publisher
- provided
-
-
- org.apache.axis2.wso2
- axis2-client
-
-
-
-
org.wso2.carbon.devicemgt
org.wso2.carbon.certificate.mgt.core
diff --git a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java
index fbebe12f9..faec317e0 100644
--- a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java
+++ b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java
@@ -58,15 +58,11 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
-import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
-import java.security.PrivateKey;
import java.util.ArrayList;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Properties;
import java.util.UUID;
@@ -175,12 +171,11 @@ public class VirtualFireAlarmServiceImpl implements VirtualFireAlarmService {
String user = APIUtil.getAuthenticatedUser() + "@" + PrivilegedCarbonContext.getThreadLocalCarbonContext()
.getTenantDomain();
ZipArchive zipFile = createDownloadFile(user, deviceName, sketchType);
- Response.ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(zipFile.getZipFile()));
+ Response.ResponseBuilder response = Response.ok(zipFile.getZipFileContent());
response.status(Response.Status.OK);
response.type("application/zip");
response.header("Content-Disposition", "attachment; filename=\"" + zipFile.getFileName() + "\"");
Response resp = response.build();
- zipFile.getZipFile().delete();
return resp;
} catch (IllegalArgumentException ex) {
return Response.status(400).entity(ex.getMessage()).build();//bad request
@@ -193,9 +188,6 @@ public class VirtualFireAlarmServiceImpl implements VirtualFireAlarmService {
} catch (APIManagerException ex) {
log.error(ex.getMessage(), ex);
return Response.status(500).entity(ex.getMessage()).build();
- } catch (IOException ex) {
- log.error(ex.getMessage(), ex);
- return Response.status(500).entity(ex.getMessage()).build();
} catch (UserStoreException ex) {
log.error(ex.getMessage(), ex);
return Response.status(500).entity(ex.getMessage()).build();
diff --git a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java
index 22fda92b3..2152a5e36 100644
--- a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java
+++ b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java
@@ -18,23 +18,23 @@
package org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.util;
-import java.io.File;
+import java.util.zip.ZipOutputStream;
/**
* This is an utility class to hold zip files.
*/
public class ZipArchive {
- private File zipFile = null;
+ private byte[] zipFileContent = null;
private String fileName = null;
- public ZipArchive(String fileName, File zipFile) {
+ public ZipArchive(String fileName, byte[] zipFile) {
this.fileName = fileName;
- this.zipFile = zipFile;
+ this.zipFileContent = zipFile;
}
- public File getZipFile() {
- return zipFile;
+ public byte[] getZipFileContent() {
+ return zipFileContent;
}
public String getFileName() {
diff --git a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java
index e9bcb6c60..496d5eb5a 100644
--- a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java
+++ b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java
@@ -19,7 +19,6 @@
package org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.util;
import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -33,14 +32,12 @@ import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration
import org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.xmpp.XmppConfig;
import org.wso2.carbon.utils.CarbonUtils;
-import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -59,24 +56,18 @@ import java.util.zip.ZipOutputStream;
public class ZipUtil {
private static final Log log = LogFactory.getLog(ZipUtil.class);
- private static final String HTTPS_PORT_PROPERTY = "httpsPort";
- private static final String HTTP_PORT_PROPERTY = "httpPort";
private static final String LOCALHOST = "localhost";
private static final String HTTPS_PROTOCOL_URL = "https://${iot.gateway.host}:${iot.gateway.https.port}";
private static final String HTTP_PROTOCOL_URL = "http://${iot.gateway.host}:${iot.gateway.http.port}";
private static final String CONFIG_TYPE = "general";
private static final String DEFAULT_MQTT_ENDPOINT = "tcp://${mqtt.broker.host}:${mqtt.broker.port}";
- public static final String HOST_NAME = "HostName";
public ZipArchive createZipFile(String owner, String deviceType, String deviceId, String deviceName,
String apiApplicationKey, String token, String refreshToken)
throws DeviceManagementException {
String sketchFolder = "repository" + File.separator + "resources" + File.separator + "sketches";
- String archivesPath =
- CarbonUtils.getCarbonHome() + File.separator + sketchFolder + File.separator + "archives" +
- File.separator + deviceId;
String templateSketchPath = sketchFolder + File.separator + deviceType;
String iotServerIP;
@@ -141,7 +132,7 @@ public class ZipUtil {
? "" : XmppConfig.getInstance().getJid());
ZipArchive zipFile;
- zipFile = getSketchArchive(archivesPath, templateSketchPath, contextParams, deviceName);
+ zipFile = getSketchArchive(templateSketchPath, contextParams, deviceName);
return zipFile;
} catch (IOException e) {
throw new DeviceManagementException("Zip File Creation Failed", e);
@@ -159,7 +150,7 @@ public class ZipUtil {
return Base64.encodeBase64String(stringToEncode.getBytes());
}
- public static String getServerUrl() {
+ private static String getServerUrl() {
try {
return org.apache.axis2.util.Utils.getIpAddress();
} catch (SocketException e) {
@@ -168,33 +159,27 @@ public class ZipUtil {
}
}
- public static ZipArchive getSketchArchive(String archivesPath, String templateSketchPath, Map contextParams
+ private ZipArchive getSketchArchive(String templateSketchPath, Map contextParams
, String zipFileName)
throws DeviceManagementException, IOException {
String sketchPath = CarbonUtils.getCarbonHome() + File.separator + templateSketchPath;
- FileUtils.deleteDirectory(new File(archivesPath));//clear directory
- FileUtils.deleteDirectory(new File(archivesPath + ".zip"));//clear zip
- if (!new File(archivesPath).mkdirs()) { //new dir
- String message = "Could not create directory at path: " + archivesPath;
- log.error(message);
- throw new DeviceManagementException(message);
- }
zipFileName = zipFileName + ".zip";
try {
Map> properties = getProperties(sketchPath + File.separator + "sketch" + ".properties");
List templateFiles = properties.get("templates");
+ List processTemplateFiles = new ArrayList<>();
for (String templateFile : templateFiles) {
- parseTemplate(templateSketchPath + File.separator + templateFile, archivesPath + File.separator + templateFile,
- contextParams);
+ TemplateFile tFile = new TemplateFile();
+ tFile.setContent(parseTemplate(templateSketchPath + File.separator + templateFile, contextParams));
+ tFile.setFileName(templateFile);
+ processTemplateFiles.add(tFile);
}
templateFiles.add("sketch.properties"); // ommit copying the props file
- copyFolder(new File(sketchPath), new File(archivesPath), templateFiles);
- createZipArchive(archivesPath);
- FileUtils.deleteDirectory(new File(archivesPath));
- File zip = new File(archivesPath + ".zip");
- return new org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.util.ZipArchive(zipFileName, zip);
+
+ byte[] zip = createZipArchive(templateSketchPath, processTemplateFiles);
+ return new ZipArchive(zipFileName, zip);
} catch (IOException ex) {
throw new DeviceManagementException(
"Error occurred when trying to read property " + "file sketch.properties", ex);
@@ -206,9 +191,7 @@ public class ZipUtil {
InputStream input = null;
try {
-
input = new FileInputStream(propertyFilePath);
-
// load a properties file
prop.load(input);
Map> properties = new HashMap>();
@@ -235,148 +218,124 @@ public class ZipUtil {
}
}
- private static void parseTemplate(String srcFile, String dstFile, Map contextParams) throws IOException {
+ private static String parseTemplate(String srcFile, Map contextParams) throws IOException {
//read from file
FileInputStream inputStream = null;
- FileOutputStream outputStream = null;
try {
inputStream = new FileInputStream(srcFile);
- outputStream = new FileOutputStream(dstFile);
String content = IOUtils.toString(inputStream, StandardCharsets.UTF_8.toString());
Iterator iterator = contextParams.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry mapEntry = (Map.Entry) iterator.next();
content = content.replaceAll("\\$\\{" + mapEntry.getKey() + "\\}", mapEntry.getValue().toString());
}
- IOUtils.write(content, outputStream, StandardCharsets.UTF_8.toString());
+ return content;
} finally {
if (inputStream != null) {
inputStream.close();
}
- if (outputStream != null) {
- outputStream.close();
- }
}
}
- private static void copyFolder(File src, File dest, List excludeFileNames) throws IOException {
-
- if (src.isDirectory()) {
- //if directory not exists, create it
- if (!dest.exists() && !dest.mkdirs()) {
- String message = "Could not create directory at path: " + dest;
- log.error(message);
- throw new IOException(message);
- }
- //list all the directory contents
- String files[] = src.list();
-
- if (files == null) {
- log.warn("There are no files insides the directory " + src.getAbsolutePath());
- return;
- }
-
- for (String file : files) {
- //construct the src and dest file structure
- File srcFile = new File(src, file);
- File destFile = new File(dest, file);
- //recursive copy
- copyFolder(srcFile, destFile, excludeFileNames);
- }
-
- } else {
- for (String fileName : excludeFileNames) {
- if (src.getName().equals(fileName)) {
- return;
- }
- }
- //if file, then copy it
- //Use bytes stream to support all file types
- InputStream in = null;
- OutputStream out = null;
-
- try {
- in = new FileInputStream(src);
- out = new FileOutputStream(dest);
-
- byte[] buffer = new byte[1024];
-
- int length;
- //copy the file content in bytes
- while ((length = in.read(buffer)) > 0) {
- out.write(buffer, 0, length);
- }
- } finally {
- if (in != null) {
- in.close();
- }
- if (out != null) {
- out.close();
- }
- }
- }
- }
-
- private static boolean createZipArchive(String srcFolder) throws IOException {
- BufferedInputStream origin = null;
+ private static byte[] createZipArchive(String srcFolder, List processTemplateFiles) throws IOException {
ZipOutputStream out = null;
-
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
- final int BUFFER = 2048;
- FileOutputStream dest = new FileOutputStream(new File(srcFolder + ".zip"));
- out = new ZipOutputStream(new BufferedOutputStream(dest));
- byte data[] = new byte[BUFFER];
+ out = new ZipOutputStream(new BufferedOutputStream(baos));
File subDir = new File(srcFolder);
String subdirList[] = subDir.list();
if (subdirList == null) {
log.warn("The sub directory " + subDir.getAbsolutePath() + " is empty");
- return false;
+ return null;
}
for (String sd : subdirList) {
// get a list of files from current directory
- File f = new File(srcFolder + "/" + sd);
+ File f = new File(srcFolder + File.separator + sd);
if (f.isDirectory()) {
String files[] = f.list();
if (files == null) {
log.warn("The current directory " + f.getAbsolutePath() + " is empty. Has no files");
- return false;
+ return null;
}
for (int i = 0; i < files.length; i++) {
- FileInputStream fi = new FileInputStream(srcFolder + "/" + sd + "/" + files[i]);
- origin = new BufferedInputStream(fi, BUFFER);
- ZipEntry entry = new ZipEntry(sd + "/" + files[i]);
- out.putNextEntry(entry);
- int count;
- while ((count = origin.read(data, 0, BUFFER)) != -1) {
- out.write(data, 0, count);
- out.flush();
+ boolean fileAdded = false;
+ for (TemplateFile templateFile : processTemplateFiles) {
+ if (files[i].equals(templateFile.getFileName())) {
+ ZipEntry entry = new ZipEntry(templateFile.getFileName());
+ out.putNextEntry(entry);
+ out.write(templateFile.getContent().getBytes());
+ out.closeEntry();
+ fileAdded = true;
+ break;
+ } else if (f.getName().equals("sketch.properties")) {
+ fileAdded = true;
+ break;
+ }
}
+ if (fileAdded) {
+ continue;
+ }
+ ZipEntry entry = new ZipEntry(sd + File.separator + files[i]);
+ out.putNextEntry(entry);
+ out.write(IOUtils.toByteArray(new FileInputStream(srcFolder + File.separator + sd
+ + File.separator + files[i])));
+ out.closeEntry();
}
} else //it is just a file
{
- FileInputStream fi = new FileInputStream(f);
- origin = new BufferedInputStream(fi, BUFFER);
+ boolean fileAdded = false;
+ for (TemplateFile templateFile : processTemplateFiles) {
+ if (f.getName().equals(templateFile.getFileName())) {
+ ZipEntry entry = new ZipEntry(templateFile.getFileName());
+ out.putNextEntry(entry);
+ out.write(templateFile.getContent().getBytes());
+ out.closeEntry();
+ fileAdded = true;
+ break;
+ } else if (f.getName().equals("sketch.properties")) {
+ fileAdded = true;
+ break;
+ }
+ }
+ if (fileAdded) {
+ continue;
+ }
ZipEntry entry = new ZipEntry(sd);
out.putNextEntry(entry);
- int count;
- while ((count = origin.read(data, 0, BUFFER)) != -1) {
- out.write(data, 0, count);
- out.flush();
- }
+ out.write(IOUtils.toByteArray(new FileInputStream(f)));
+ out.closeEntry();
}
}
- out.flush();
+ out.finish();
} finally {
- if (origin != null) {
- origin.close();
- }
if (out != null) {
out.close();
}
}
- return true;
+ return baos.toByteArray();
+ }
+
+ public class TemplateFile {
+ private String content;
+ private String fileName;
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
}
}
diff --git a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java b/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java
deleted file mode 100644
index 586de223c..000000000
--- a/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2016, 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.mgt.iot.virtualfirealarm.service.impl.util.util;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.base.ServerConfiguration;
-import org.wso2.carbon.device.mgt.common.DeviceManagementException;
-import org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.util.ZipArchive;
-import org.wso2.carbon.utils.CarbonUtils;
-import org.wso2.carbon.utils.NetworkUtils;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.SocketException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-/**
- * Provides utility methods required by the device type plugins.
- */
-public class Utils {
-
- public static final String HOST_NAME = "HostName";
- private static final Log log = LogFactory.getLog(Utils.class);
-
-
-
-}