forked from community/device-mgt-plugins
Merge pull request #27 from GPrathap/IoTS-1.0.0-M1
adding drone as a device type
commit
9233a6f8ff
@ -0,0 +1,106 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>device-mgt-iot-droneanalyzer</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
|
||||
<name>WSO2 Carbon - IoT Server Drone Analyzer Management Plugin</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
<version>2.3.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<version>1.4.0</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||
<Bundle-Version>${carbon.iot.device.mgt.version}</Bundle-Version>
|
||||
<Bundle-Description>IoT Server Impl Bundle</Bundle-Description>
|
||||
<Private-Package>org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.internal</Private-Package>
|
||||
<Import-Package>
|
||||
org.osgi.framework,
|
||||
org.osgi.service.component,
|
||||
org.apache.commons.logging,
|
||||
javax.xml.bind.*,
|
||||
javax.naming,
|
||||
javax.sql,
|
||||
javax.xml.bind.annotation.*,
|
||||
javax.xml.parsers,
|
||||
javax.net,
|
||||
javax.net.ssl,
|
||||
org.w3c.dom,
|
||||
org.wso2.carbon.device.mgt.common.*,
|
||||
org.wso2.carbon.device.mgt.common,
|
||||
org.wso2.carbon.context.*,
|
||||
org.wso2.carbon.ndatasource.core,
|
||||
org.wso2.carbon.device.mgt.iot.*,
|
||||
</Import-Package>
|
||||
|
||||
<Export-Package>
|
||||
!org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.internal,
|
||||
org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.*
|
||||
</Export-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.logging</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.ndatasource.core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,63 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceRegistration;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.DroneAnalyzerManagerService;
|
||||
import org.wso2.carbon.device.mgt.iot.service.DeviceTypeService;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerManagementServiceComponent {
|
||||
private ServiceRegistration firealarmServiceRegRef;
|
||||
|
||||
private static final Log log = LogFactory.getLog(DroneAnalyzerManagementServiceComponent.class);
|
||||
|
||||
protected void activate(ComponentContext ctx) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Activating Drone Device Management Service Component");
|
||||
}
|
||||
try {
|
||||
BundleContext bundleContext = ctx.getBundleContext();
|
||||
firealarmServiceRegRef =
|
||||
bundleContext.registerService(DeviceManagementService.class.getName(),
|
||||
new DroneAnalyzerManagerService(), null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Drone Device Management Service Component has been successfully activated");
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
log.error("Error occurred while activating Drone Device Management Service Component", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void deactivate(ComponentContext ctx) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("De-activating Virtual Firealarm Device Management Service Component");
|
||||
}
|
||||
try {
|
||||
if (firealarmServiceRegRef != null) {
|
||||
firealarmServiceRegRef.unregister();
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(
|
||||
"Virtual Firealarm Device Management Service Component has been successfully de-activated");
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
log.error("Error occurred while de-activating Virtual Firealarm Device Management bundle", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setDeviceTypeService(DeviceTypeService deviceTypeService) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Data source service set to mobile service component");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetDeviceTypeService(DeviceTypeService deviceTypeService) {
|
||||
//do nothing
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/7/15.
|
||||
*/
|
||||
public class DroneConstants {
|
||||
|
||||
public final static String DEVICE_PLUGIN_DEVICE_NAME = "DEVICE_NAME";
|
||||
public final static String DEVICE_PLUGIN_DEVICE_ID = "DRONE_DEVICE_ID";
|
||||
public final static String STATE_ON = "ON";
|
||||
public final static String STATE_OFF = "OFF";
|
||||
public static final String DEVICE_TYPE = "drone";
|
||||
public static final String URL_PREFIX = "http://";
|
||||
public static final String BULB_CONTEXT = "/BULB/";
|
||||
public static final String SONAR_CONTEXT = "/HUMIDITY/";
|
||||
public static final String TEMPERATURE_CONTEXT = "/TEMPERATURE/";
|
||||
public static final int MINIMUM_TIME_DURATION = 150;
|
||||
public static final String SENSOR_TEMPERATURE = "temp";
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants;
|
||||
|
||||
|
||||
public class MessageConfig {
|
||||
|
||||
public static final String IN_QUATANNIM_VAL = "quatanium_val";
|
||||
public static final String OUT_QUATANNIM_VAL = "quatanium_val";
|
||||
public static final String IN_ACCELETOMETER_VAL = "accelerometer";
|
||||
public static final String OUT_ACCELETOMETER_VAL = "accelerometer";
|
||||
public static final String IN_GYROSCOPE_VAL = "gyroscope";
|
||||
public static final String OUT_GYROSCOPE_VAL = "gyroscope";
|
||||
public static final String IN_MAGNETOMETER_VAL = "magnetometer";
|
||||
public static final String OUT_MAGNETOMETER_VAL = "magnetometer";
|
||||
public static final String IN_BASIC_PARAM_VAL = "basicParam";
|
||||
public static final String OUT_BASIC_PARAM_VAL = "basicParam";
|
||||
|
||||
}
|
@ -0,0 +1,253 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.*;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
|
||||
import org.wso2.carbon.device.mgt.common.license.mgt.License;
|
||||
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.DroneAnalyzerDAO;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOFactory;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dto.IotDevice;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.util.IotDeviceManagementUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerManager implements DeviceManager {
|
||||
|
||||
private static final IotDeviceManagementDAOFactory iotDeviceManagementDAOFactory = new DroneAnalyzerDAO();
|
||||
private static final Log log = LogFactory.getLog(DroneAnalyzerManager.class);
|
||||
|
||||
@Override
|
||||
public FeatureManager getFeatureManager() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean saveConfiguration(TenantConfiguration tenantConfiguration)
|
||||
throws DeviceManagementException {
|
||||
//TODO implement this
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TenantConfiguration getConfiguration() throws DeviceManagementException {
|
||||
//TODO implement this
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enrollDevice(Device device) throws DeviceManagementException {
|
||||
boolean status;
|
||||
IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device);
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Enrolling a new Virtual Firealarm device : " + device.getDeviceIdentifier());
|
||||
}
|
||||
DroneAnalyzerDAO.beginTransaction();
|
||||
status = iotDeviceManagementDAOFactory.getIotDeviceDAO().addIotDevice(
|
||||
iotDevice);
|
||||
DroneAnalyzerDAO.commitTransaction();
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
try {
|
||||
DroneAnalyzerDAO.rollbackTransaction();
|
||||
} catch (IotDeviceManagementDAOException iotDAOEx) {
|
||||
String msg = "Error occurred while roll back the device enrol transaction :" + device.toString();
|
||||
log.warn(msg, iotDAOEx);
|
||||
}
|
||||
String msg = "Error while enrolling the Virtual Firealarm device : " + device.getDeviceIdentifier();
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean modifyEnrollment(Device device) throws DeviceManagementException {
|
||||
boolean status;
|
||||
IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device);
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Modifying the Virtual Firealarm device enrollment data");
|
||||
}
|
||||
DroneAnalyzerDAO.beginTransaction();
|
||||
status = iotDeviceManagementDAOFactory.getIotDeviceDAO()
|
||||
.updateIotDevice(iotDevice);
|
||||
DroneAnalyzerDAO.commitTransaction();
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
try {
|
||||
DroneAnalyzerDAO.rollbackTransaction();
|
||||
} catch (IotDeviceManagementDAOException iotDAOEx) {
|
||||
String msg = "Error occurred while roll back the update device transaction :" + device.toString();
|
||||
log.warn(msg, iotDAOEx);
|
||||
}
|
||||
String msg = "Error while updating the enrollment of the Virtual Firealarm device : " +
|
||||
device.getDeviceIdentifier();
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
boolean status;
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Dis-enrolling Virtual Firealarm device : " + deviceId);
|
||||
}
|
||||
DroneAnalyzerDAO.beginTransaction();
|
||||
status = iotDeviceManagementDAOFactory.getIotDeviceDAO()
|
||||
.deleteIotDevice(deviceId.getId());
|
||||
DroneAnalyzerDAO.commitTransaction();
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
try {
|
||||
DroneAnalyzerDAO.rollbackTransaction();
|
||||
} catch (IotDeviceManagementDAOException iotDAOEx) {
|
||||
String msg = "Error occurred while roll back the device dis enrol transaction :" + deviceId.toString();
|
||||
log.warn(msg, iotDAOEx);
|
||||
}
|
||||
String msg = "Error while removing the Virtual Firealarm device : " + deviceId.getId();
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
boolean isEnrolled = false;
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Checking the enrollment of Virtual Firealarm device : " + deviceId.getId());
|
||||
}
|
||||
IotDevice iotDevice = iotDeviceManagementDAOFactory.getIotDeviceDAO().getIotDevice(deviceId.getId());
|
||||
if (iotDevice != null) {
|
||||
isEnrolled = true;
|
||||
}
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
String msg = "Error while checking the enrollment status of Virtual Firealarm device : " +
|
||||
deviceId.getId();
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return isEnrolled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setActive(DeviceIdentifier deviceId, boolean status)
|
||||
throws DeviceManagementException {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
Device device;
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the details of Virtual Firealarm device : " + deviceId.getId());
|
||||
}
|
||||
IotDevice iotDevice = iotDeviceManagementDAOFactory.getIotDeviceDAO().
|
||||
getIotDevice(deviceId.getId());
|
||||
device = IotDeviceManagementUtil.convertToDevice(iotDevice);
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
String msg = "Error while fetching the Virtual Firealarm device : " + deviceId.getId();
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setOwnership(DeviceIdentifier deviceId, String ownershipType)
|
||||
throws DeviceManagementException {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isClaimable(DeviceIdentifier deviceIdentifier) throws DeviceManagementException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setStatus(DeviceIdentifier deviceId, String currentOwner,
|
||||
EnrolmentInfo.Status status) throws DeviceManagementException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public License getLicense(String s) throws LicenseManagementException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLicense(License license) throws LicenseManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device) throws DeviceManagementException {
|
||||
boolean status;
|
||||
IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device);
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(
|
||||
"updating the details of Virtual Firealarm device : " + deviceIdentifier);
|
||||
}
|
||||
DroneAnalyzerDAO.beginTransaction();
|
||||
status = iotDeviceManagementDAOFactory.getIotDeviceDAO()
|
||||
.updateIotDevice(iotDevice);
|
||||
DroneAnalyzerDAO.commitTransaction();
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
try {
|
||||
DroneAnalyzerDAO.rollbackTransaction();
|
||||
} catch (IotDeviceManagementDAOException iotDAOEx) {
|
||||
String msg = "Error occurred while roll back the update device info transaction :" + device.toString();
|
||||
log.warn(msg, iotDAOEx);
|
||||
}
|
||||
String msg =
|
||||
"Error while updating the Virtual Firealarm device : " + deviceIdentifier;
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Device> getAllDevices() throws DeviceManagementException {
|
||||
List<Device> devices = null;
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Fetching the details of all Virtual Firealarm devices");
|
||||
}
|
||||
List<IotDevice> iotDevices =
|
||||
iotDeviceManagementDAOFactory.getIotDeviceDAO().getAllIotDevices();
|
||||
if (iotDevices != null) {
|
||||
devices = new ArrayList<Device>();
|
||||
for (IotDevice iotDevice : iotDevices) {
|
||||
devices.add(IotDeviceManagementUtil.convertToDevice(iotDevice));
|
||||
}
|
||||
}
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
String msg = "Error while fetching all Virtual Firealarm devices.";
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
return devices;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean requireDeviceAuthorization() {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManager;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerManagerService implements DeviceManagementService {
|
||||
private DeviceManager deviceManager;
|
||||
@Override
|
||||
public String getType() {
|
||||
return DroneConstants.DEVICE_TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws DeviceManagementException {
|
||||
this.deviceManager = new DroneAnalyzerManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceManager getDeviceManager() {
|
||||
return deviceManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplicationManager getApplicationManager() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyOperationToDevices(Operation operation, List<DeviceIdentifier> list)
|
||||
throws DeviceManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Application[] getApplications(String s, int i, int i1) throws ApplicationManagementException {
|
||||
return new Application[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateApplicationStatus(DeviceIdentifier deviceIdentifier, Application application, String s)
|
||||
throws ApplicationManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getApplicationStatus(DeviceIdentifier deviceIdentifier, Application application)
|
||||
throws ApplicationManagementException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void installApplicationForDevices(Operation operation, List<DeviceIdentifier> list)
|
||||
throws ApplicationManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void installApplicationForUsers(Operation operation, List<String> list)
|
||||
throws ApplicationManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void installApplicationForUserRoles(Operation operation, List<String> list)
|
||||
throws ApplicationManagementException {
|
||||
|
||||
}
|
||||
|
||||
public String getProviderTenantDomain() {
|
||||
return "carbon.super";
|
||||
}
|
||||
|
||||
public boolean isSharedWithAllTenants() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public String[] getSharedTenantsDomain() {
|
||||
return new String[0];
|
||||
}
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.impl.DroneAnalyzerDeviceDAOImpl;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceDAO;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOFactory;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOFactoryInterface;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerDAO extends IotDeviceManagementDAOFactory implements IotDeviceManagementDAOFactoryInterface {
|
||||
|
||||
private static final Log log = LogFactory.getLog(DroneAnalyzerDAO.class);
|
||||
static DataSource dataSource;
|
||||
private static ThreadLocal<Connection> currentConnection = new ThreadLocal<Connection>();
|
||||
|
||||
public DroneAnalyzerDAO() {
|
||||
initFireAlarmDAO();
|
||||
}
|
||||
|
||||
public static void initFireAlarmDAO() {
|
||||
dataSource = getDataSourceMap().get(DroneConstants.DEVICE_TYPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotDeviceDAO getIotDeviceDAO() {
|
||||
return new DroneAnalyzerDeviceDAOImpl();
|
||||
}
|
||||
|
||||
public static void beginTransaction() throws IotDeviceManagementDAOException {
|
||||
try {
|
||||
Connection conn = dataSource.getConnection();
|
||||
conn.setAutoCommit(false);
|
||||
currentConnection.set(conn);
|
||||
} catch (SQLException e) {
|
||||
throw new IotDeviceManagementDAOException("Error occurred while retrieving datasource connection", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Connection getConnection() throws IotDeviceManagementDAOException {
|
||||
|
||||
if (currentConnection != null && currentConnection.get() == null) {
|
||||
try {
|
||||
currentConnection.set(dataSource.getConnection());
|
||||
} catch (SQLException e) {
|
||||
throw new IotDeviceManagementDAOException("Error occurred while retrieving data source connection", e);
|
||||
}
|
||||
}
|
||||
//log.info("------>");
|
||||
return currentConnection.get();
|
||||
}
|
||||
|
||||
public static void commitTransaction() throws IotDeviceManagementDAOException {
|
||||
try {
|
||||
Connection conn = currentConnection.get();
|
||||
if (conn != null) {
|
||||
conn.commit();
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Datasource connection associated with the current thread is null, hence commit "
|
||||
+ "has not been attempted");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new IotDeviceManagementDAOException("Error occurred while committing the transaction", e);
|
||||
} finally {
|
||||
closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
public static void closeConnection() throws IotDeviceManagementDAOException {
|
||||
|
||||
Connection con = currentConnection.get();
|
||||
if (con != null) {
|
||||
try {
|
||||
con.close();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while close the connection");
|
||||
}
|
||||
}
|
||||
currentConnection.remove();
|
||||
}
|
||||
|
||||
public static void rollbackTransaction() throws IotDeviceManagementDAOException {
|
||||
try {
|
||||
Connection conn = currentConnection.get();
|
||||
if (conn != null) {
|
||||
conn.rollback();
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Datasource connection associated with the current thread is null, hence rollback "
|
||||
+ "has not been attempted");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new IotDeviceManagementDAOException("Error occurred while rollback the transaction", e);
|
||||
} finally {
|
||||
closeConnection();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,210 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.DroneAnalyzerDAO;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceDAO;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.util.IotDeviceManagementDAOUtil;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dto.IotDevice;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO {
|
||||
|
||||
private static final Log log = LogFactory.getLog(DroneAnalyzerDeviceDAOImpl.class);
|
||||
|
||||
@Override
|
||||
public IotDevice getIotDevice(String iotDeviceId) throws IotDeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
IotDevice iotDevice = null;
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
conn = DroneAnalyzerDAO.getConnection();
|
||||
String selectDBQuery =
|
||||
"SELECT VIRTUAL_FIREALARM_DEVICE_ID, DEVICE_NAME" +
|
||||
" FROM VIRTUAL_FIREALARM_DEVICE WHERE VIRTUAL_FIREALARM_DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(selectDBQuery);
|
||||
stmt.setString(1, iotDeviceId);
|
||||
resultSet = stmt.executeQuery();
|
||||
|
||||
if (resultSet.next()) {
|
||||
iotDevice = new IotDevice();
|
||||
iotDevice.setIotDeviceName(resultSet.getString(
|
||||
DroneConstants.DEVICE_PLUGIN_DEVICE_NAME));
|
||||
Map<String, String> propertyMap = new HashMap<String, String>();
|
||||
iotDevice.setDeviceProperties(propertyMap);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Drone device " + iotDeviceId + " data has been fetched from " +
|
||||
"Drone database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching Drone device : '" + iotDeviceId + "'";
|
||||
log.error(msg, e);
|
||||
throw new IotDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
IotDeviceManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||
DroneAnalyzerDAO.closeConnection();
|
||||
}
|
||||
return iotDevice;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addIotDevice(IotDevice iotDevice) throws IotDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = DroneAnalyzerDAO.getConnection();
|
||||
String createDBQuery =
|
||||
"INSERT INTO VIRTUAL_FIREALARM_DEVICE(VIRTUAL_FIREALARM_DEVICE_ID, DEVICE_NAME) VALUES (?, ?)";
|
||||
|
||||
stmt = conn.prepareStatement(createDBQuery);
|
||||
stmt.setString(1, iotDevice.getIotDeviceId());
|
||||
stmt.setString(2,iotDevice.getIotDeviceName());
|
||||
if (iotDevice.getDeviceProperties() == null) {
|
||||
iotDevice.setDeviceProperties(new HashMap<String, String>());
|
||||
}
|
||||
|
||||
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Virtual Firealarm device " + iotDevice.getIotDeviceId() + " data has been" +
|
||||
" added to the Virtual Firealarm database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while adding the Virtual Firealarm device '" +
|
||||
iotDevice.getIotDeviceId() + "' to the Virtual Firealarm db.";
|
||||
log.error(msg, e);
|
||||
throw new IotDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
IotDeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateIotDevice(IotDevice iotDevice)
|
||||
throws IotDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = DroneAnalyzerDAO.getConnection();
|
||||
String updateDBQuery =
|
||||
"UPDATE VIRTUAL_FIREALARM_DEVICE SET DEVICE_NAME = ? WHERE VIRTUAL_FIREALARM_DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(updateDBQuery);
|
||||
if (iotDevice.getDeviceProperties() == null) {
|
||||
iotDevice.setDeviceProperties(new HashMap<String, String>());
|
||||
}
|
||||
stmt.setString(1, iotDevice.getIotDeviceName());
|
||||
stmt.setString(2, iotDevice.getIotDeviceId());
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Drone device " + iotDevice.getIotDeviceId() + " data has been" +
|
||||
" modified.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while modifying the Drone device '" +
|
||||
iotDevice.getIotDeviceId() + "' data.";
|
||||
log.error(msg, e);
|
||||
throw new IotDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
IotDeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteIotDevice(String iotDeviceId)
|
||||
throws IotDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = DroneAnalyzerDAO.getConnection();
|
||||
System.out.println("delete device ");
|
||||
/* String deleteDBQuery =
|
||||
"DELETE FROM VIRTUAL_FIREALARM_DEVICE WHERE VIRTUAL_FIREALARM_DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(deleteDBQuery);
|
||||
stmt.setString(1, iotDeviceId);
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Drone device " + iotDeviceId + " data has deleted" +
|
||||
" from the Virtual Drone database.");
|
||||
}
|
||||
}*/
|
||||
} /*catch (SQLException e) {
|
||||
String msg = "Error occurred while deleting Virtual Firealarm device " + iotDeviceId;
|
||||
log.error(msg, e);
|
||||
throw new IotDeviceManagementDAOException(msg, e);
|
||||
}*/ finally {
|
||||
IotDeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IotDevice> getAllIotDevices()
|
||||
throws IotDeviceManagementDAOException {
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet resultSet = null;
|
||||
IotDevice iotDevice;
|
||||
List<IotDevice> iotDevices = new ArrayList<IotDevice>();
|
||||
|
||||
try {
|
||||
conn = DroneAnalyzerDAO.getConnection();
|
||||
String selectDBQuery =
|
||||
"SELECT VIRTUAL_FIREALARM_DEVICE_ID, DEVICE_NAME " +
|
||||
"FROM VIRTUAL_FIREALARM_DEVICE";
|
||||
stmt = conn.prepareStatement(selectDBQuery);
|
||||
resultSet = stmt.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
iotDevice = new IotDevice();
|
||||
iotDevice.setIotDeviceId(resultSet.getString(DroneConstants.DEVICE_PLUGIN_DEVICE_ID));
|
||||
iotDevice.setIotDeviceName(resultSet.getString(DroneConstants.DEVICE_PLUGIN_DEVICE_NAME));
|
||||
|
||||
Map<String, String> propertyMap = new HashMap<String, String>();
|
||||
|
||||
iotDevice.setDeviceProperties(propertyMap);
|
||||
iotDevices.add(iotDevice);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("All Virtual Firealarm device details have fetched from Firealarm database.");
|
||||
}
|
||||
return iotDevices;
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching all Virtual Firealarm device data'";
|
||||
log.error(msg, e);
|
||||
throw new IotDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
IotDeviceManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||
DroneAnalyzerDAO.closeConnection();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.util;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerUtils {
|
||||
private static Log log = LogFactory.getLog(DroneAnalyzerUtils.class);
|
||||
|
||||
public static String getDeviceProperty(Map<String, String> deviceProperties, String property) {
|
||||
String deviceProperty = deviceProperties.get(property);
|
||||
if (deviceProperty == null) {
|
||||
return "";
|
||||
}
|
||||
return deviceProperty;
|
||||
}
|
||||
}
|
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.droneanalyzer.plugin.internal;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceRegistration;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.DroneAnalyzerManagerService;
|
||||
import org.wso2.carbon.device.mgt.iot.service.DeviceTypeService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @scr.component name="org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal
|
||||
* .VirtualFirealarmManagementServiceComponent"
|
||||
* immediate="true"
|
||||
* @scr.reference name="org.wso2.carbon.device.mgt.iot.service.DeviceTypeServiceImpl"
|
||||
* interface="org.wso2.carbon.device.mgt.iot.service.DeviceTypeService"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setDeviceTypeService"
|
||||
* unbind="unsetDeviceTypeService"
|
||||
*/
|
||||
public class DroneAnalyzerManagementServiceComponent {
|
||||
private ServiceRegistration firealarmServiceRegRef;
|
||||
|
||||
private static final Log log = LogFactory.getLog(
|
||||
DroneAnalyzerManagementServiceComponent.class);
|
||||
|
||||
protected void activate(ComponentContext ctx) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Activating Virtual Firealarm Device Management Service Component");
|
||||
}
|
||||
try {
|
||||
BundleContext bundleContext = ctx.getBundleContext();
|
||||
firealarmServiceRegRef =
|
||||
bundleContext.registerService(DeviceManagementService.class.getName(),
|
||||
new DroneAnalyzerManagerService(), null);
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(
|
||||
"Virtual Firealarm Device Management Service Component has been " +
|
||||
"successfully activated");
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
log.error(
|
||||
"Error occurred while activating Virtual Firealarm Device Management Service " +
|
||||
"Component",
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void deactivate(ComponentContext ctx) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("De-activating Virtual Firealarm Device Management Service Component");
|
||||
}
|
||||
try {
|
||||
if (firealarmServiceRegRef != null) {
|
||||
firealarmServiceRegRef.unregister();
|
||||
}
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(
|
||||
"Virtual Firealarm Device Management Service Component has been " +
|
||||
"successfully de-activated");
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
log.error(
|
||||
"Error occurred while de-activating Virtual Firealarm Device Management " +
|
||||
"bundle",
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setDeviceTypeService(DeviceTypeService deviceTypeService) {
|
||||
/* This is to avoid this component getting initialized before the common registered */
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Data source service set to mobile service component");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetDeviceTypeService(DeviceTypeService deviceTypeService) {
|
||||
//do nothing
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.impl;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerDeviceDAOImplTest {
|
||||
DroneAnalyzerDeviceDAOImpl dao;
|
||||
@Before
|
||||
public void init(){
|
||||
dao = new DroneAnalyzerDeviceDAOImpl();
|
||||
}
|
||||
|
||||
//@Test
|
||||
public void testDBConnenction(){
|
||||
try {
|
||||
dao.deleteIotDevice("device1");
|
||||
} catch (IotDeviceManagementDAOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,231 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<artifactId>device-mgt-iot-droneanalyzer</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - IoT Server Drone Analyzer API</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<dependencies>
|
||||
<!-- CDM -->
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.axis2.wso2</groupId>
|
||||
<artifactId>axis2-client</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.analytics</artifactId>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.axis2.wso2</groupId>
|
||||
<artifactId>axis2-client</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>commons-codec.wso2</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!--CXF -->
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-frontend-jaxws</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-transports-http</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!--MQTT -->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.paho</groupId>
|
||||
<artifactId>mqtt-client</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!--IOT -->
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpasyncclient</artifactId>
|
||||
<version>4.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!--JAX-RS -->
|
||||
<dependency>
|
||||
<groupId>org.codehaus.jackson</groupId>
|
||||
<artifactId>jackson-core-asl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.jackson</groupId>
|
||||
<artifactId>jackson-jaxrs</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax</groupId>
|
||||
<artifactId>javaee-web-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.ws.rs</groupId>
|
||||
<artifactId>jsr311-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-httpclient.wso2</groupId>
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.bouncycastle.wso2</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.user.api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.queuing</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.base</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.axis2.wso2</groupId>
|
||||
<artifactId>axis2</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.igniterealtime.smack.wso2</groupId>
|
||||
<artifactId>smack</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.igniterealtime.smack.wso2</groupId>
|
||||
<artifactId>smackx</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>jaxen</groupId>
|
||||
<artifactId>jaxen</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>commons-fileupload.wso2</groupId>
|
||||
<artifactId>commons-fileupload</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.ant.wso2</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.ant.wso2</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>commons-httpclient.wso2</groupId>
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.eclipse.equinox</groupId>
|
||||
<artifactId>javax.servlet</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.registry.api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.igniterealtime.smack.wso2</groupId>
|
||||
<artifactId>smack</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.igniterealtime.smack.wso2</groupId>
|
||||
<artifactId>smackx</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>${wso2.maven.compiler.source}</source>
|
||||
<target>${wso2.maven.compiler.target}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<!--<webXml>src/main/webapp/WEB-INF/web.xml</webXml>-->
|
||||
<warName>drone_analyzer</warName>
|
||||
<!--<outputDirectory>/home/geesara/wso2/products/wso2iot-1.0.0-SNAPSHOT/repository/deployment/server/webapps</outputDirectory>
|
||||
-->
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,85 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.service;
|
||||
|
||||
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneXMPPConnector;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer.MessageTransformer;
|
||||
|
||||
import javax.websocket.OnClose;
|
||||
import javax.websocket.OnMessage;
|
||||
import javax.websocket.OnOpen;
|
||||
import javax.websocket.Session;
|
||||
import javax.websocket.server.ServerEndpoint;
|
||||
import java.io.IOException;
|
||||
|
||||
@ServerEndpoint("/datastream/drone_status")
|
||||
public class DroneRealTimeService {
|
||||
|
||||
private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneRealTimeService.class);
|
||||
public MessageTransformer messageController;
|
||||
public DroneXMPPConnector xmppConn;
|
||||
Thread mqttStarterThread;
|
||||
|
||||
public DroneRealTimeService(){
|
||||
messageController = new MessageTransformer();
|
||||
xmppConn = new DroneXMPPConnector(messageController);
|
||||
Runnable mqttStarter = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
xmppConn.run();
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage()+ "\n", e);
|
||||
}
|
||||
}
|
||||
};
|
||||
mqttStarterThread = new Thread(mqttStarter);
|
||||
//mqttStarterThread.setDaemon(true);
|
||||
mqttStarterThread.start();
|
||||
}
|
||||
|
||||
@OnOpen
|
||||
public void onOpen(Session session){
|
||||
log.info(session.getId() + " has opened a connection");
|
||||
try {
|
||||
session.getBasicRemote().sendText("Connection Established");
|
||||
} catch (IOException e) {
|
||||
log.error( e.getMessage()+"\n"+ e);
|
||||
}
|
||||
}
|
||||
|
||||
@OnMessage
|
||||
public void onMessage(String message, Session session){
|
||||
try {
|
||||
while(true){
|
||||
if(!messageController.isEmptyQueue()){
|
||||
String message1 = messageController.getMessage();
|
||||
session.getBasicRemote().sendText(message1);
|
||||
}
|
||||
/*if((current_message = messageController.getCurrentMessage())!= null){
|
||||
session.getBasicRemote().sendText( current_message );
|
||||
}*/
|
||||
Thread.sleep(DroneConstants.MINIMUM_TIME_DURATION);
|
||||
}
|
||||
|
||||
} catch (IOException ex) {
|
||||
log.error(ex.getMessage() + "\n" + ex);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@OnClose
|
||||
public void onClose(Session session){
|
||||
try {
|
||||
session.getBasicRemote().sendText("Connection closed");
|
||||
xmppConn.disconnect();
|
||||
log.info("XMPP connection is disconnected");
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage()+"\n"+ e);
|
||||
}
|
||||
log.info("Session " + session.getId() + " has ended");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,744 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.service;/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
||||
import org.wso2.carbon.device.mgt.iot.DeviceManagement;
|
||||
import org.wso2.carbon.device.mgt.iot.apimgt.AccessTokenInfo;
|
||||
import org.wso2.carbon.device.mgt.iot.apimgt.TokenClient;
|
||||
import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppAccount;
|
||||
import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig;
|
||||
import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppServerClient;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector;
|
||||
import org.wso2.carbon.device.mgt.iot.exception.AccessTokenException;
|
||||
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
|
||||
import org.wso2.carbon.device.mgt.iot.util.ZipArchive;
|
||||
import org.wso2.carbon.device.mgt.iot.util.ZipUtil;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class DroneService {
|
||||
|
||||
private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneService.class);
|
||||
|
||||
//TODO; replace this tenant domain
|
||||
private static final String SUPER_TENANT = "carbon.super";
|
||||
@Context //injected response proxy supporting multiple thread
|
||||
private HttpServletResponse response;
|
||||
private ConcurrentHashMap<String, String> deviceToIpMap = new ConcurrentHashMap<>();
|
||||
//private DroneAnalyzerXMPPConnector xmppConnector;
|
||||
|
||||
/* ---------------------------------------------------------------------------------------
|
||||
Device management specific APIs
|
||||
Also contains utility methods required for the execution of these APIs
|
||||
--------------------------------------------------------------------------------------- */
|
||||
@Path("manager/device/register")
|
||||
@PUT
|
||||
public boolean register(@QueryParam("deviceId") String deviceId,
|
||||
@QueryParam("name") String name, @QueryParam("owner") String owner) {
|
||||
|
||||
|
||||
log.info( deviceId + name + owner);
|
||||
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setId(deviceId);
|
||||
deviceIdentifier.setType(DroneConstants.DEVICE_TYPE);
|
||||
try {
|
||||
if (deviceManagement.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
|
||||
response.setStatus(Response.Status.CONFLICT.getStatusCode());
|
||||
return false;
|
||||
}
|
||||
|
||||
Device device = new Device();
|
||||
device.setDeviceIdentifier(deviceId);
|
||||
EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
|
||||
|
||||
enrolmentInfo.setDateOfEnrolment(new Date().getTime());
|
||||
enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
|
||||
enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE);
|
||||
enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD);
|
||||
|
||||
device.setName(name);
|
||||
device.setType(DroneConstants.DEVICE_TYPE);
|
||||
enrolmentInfo.setOwner(owner);
|
||||
device.setEnrolmentInfo(enrolmentInfo);
|
||||
boolean added = deviceManagement.getDeviceManagementService().enrollDevice(device);
|
||||
|
||||
if (added) {
|
||||
response.setStatus(Response.Status.OK.getStatusCode());
|
||||
} else {
|
||||
response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode());
|
||||
}
|
||||
|
||||
return added;
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return false;
|
||||
} finally {
|
||||
deviceManagement.endTenantFlow();
|
||||
}
|
||||
}
|
||||
|
||||
@Path("manager/device/remove/{device_id}")
|
||||
@DELETE
|
||||
public void removeDevice(@PathParam("device_id") String deviceId, @Context HttpServletResponse response) {
|
||||
|
||||
|
||||
log.info(deviceId );
|
||||
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setId(deviceId);
|
||||
deviceIdentifier.setType(DroneConstants.DEVICE_TYPE);
|
||||
try {
|
||||
boolean removed = deviceManagement.getDeviceManagementService().disenrollDevice(
|
||||
deviceIdentifier);
|
||||
if (removed) {
|
||||
response.setStatus(Response.Status.OK.getStatusCode());
|
||||
|
||||
} else {
|
||||
response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode());
|
||||
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
} finally {
|
||||
deviceManagement.endTenantFlow();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Path("manager/device/update/{device_id}")
|
||||
@POST
|
||||
public boolean updateDevice(@PathParam("device_id") String deviceId,
|
||||
@QueryParam("name") String name,
|
||||
@Context HttpServletResponse response) {
|
||||
|
||||
log.info(deviceId + name );
|
||||
|
||||
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setId(deviceId);
|
||||
deviceIdentifier.setType(DroneConstants.DEVICE_TYPE);
|
||||
try {
|
||||
Device device = deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier);
|
||||
device.setDeviceIdentifier(deviceId);
|
||||
// device.setDeviceTypeId(deviceTypeId);
|
||||
device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime());
|
||||
device.setName(name);
|
||||
device.setType(DroneConstants.DEVICE_TYPE);
|
||||
boolean updated = deviceManagement.getDeviceManagementService().modifyEnrollment(device);
|
||||
if (updated) {
|
||||
response.setStatus(Response.Status.OK.getStatusCode());
|
||||
} else {
|
||||
response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode());
|
||||
}
|
||||
return updated;
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return false;
|
||||
} finally {
|
||||
deviceManagement.endTenantFlow();
|
||||
}
|
||||
}
|
||||
|
||||
@Path("manager/device/{device_id}")
|
||||
@GET
|
||||
@Consumes("application/json")
|
||||
@Produces("application/json")
|
||||
public Device getDevice(@PathParam("device_id") String deviceId) {
|
||||
|
||||
log.info(deviceId);
|
||||
|
||||
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setId(deviceId);
|
||||
deviceIdentifier.setType(DroneConstants.DEVICE_TYPE);
|
||||
|
||||
try {
|
||||
return deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier);
|
||||
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return null;
|
||||
} finally {
|
||||
deviceManagement.endTenantFlow();
|
||||
}
|
||||
}
|
||||
|
||||
@Path("manager/devices/{username}")
|
||||
@GET
|
||||
@Consumes("application/json")
|
||||
@Produces("application/json")
|
||||
public Device[] getDroneDevices(@PathParam("username") String username) {
|
||||
|
||||
/*@QueryParam("action") String action, @QueryParam("duration") String duration,
|
||||
@QueryParam("speed") String speed*/
|
||||
|
||||
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||
try {
|
||||
List<Device> userDevices = deviceManagement.getDeviceManagementService().getDevicesOfUser(username);
|
||||
ArrayList<Device> userDevicesforDrone = new ArrayList<>();
|
||||
for (Device device : userDevices) {
|
||||
if (device.getType().equals(DroneConstants.DEVICE_TYPE) &&
|
||||
device.getEnrolmentInfo().getStatus().equals(
|
||||
EnrolmentInfo.Status.ACTIVE)) {
|
||||
userDevicesforDrone.add(device);
|
||||
}
|
||||
}
|
||||
return userDevicesforDrone.toArray(new Device[]{});
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return null;
|
||||
} finally {
|
||||
deviceManagement.endTenantFlow();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Path("manager/device/{sketch_type}/download")
|
||||
@GET
|
||||
@Produces("application/octet-stream")
|
||||
public Response downloadSketch(@QueryParam("owner") String owner,
|
||||
@QueryParam("deviceName") String customDeviceName,
|
||||
@PathParam("sketch_type") String sketchType) {
|
||||
log.info(owner + customDeviceName + sketchType);
|
||||
try {
|
||||
ZipArchive zipFile = createDownloadFile(owner, customDeviceName, sketchType);
|
||||
Response.ResponseBuilder rb = Response.ok(zipFile.getZipFile());
|
||||
rb.header("Content-Disposition",
|
||||
"attachment; filename=\"" + zipFile.getFileName() + "\"");
|
||||
return rb.build();
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return Response.status(400).entity(ex.getMessage()).build();//bad request
|
||||
} catch (DeviceManagementException ex) {
|
||||
return Response.status(500).entity(ex.getMessage()).build();
|
||||
} catch (AccessTokenException ex) {
|
||||
return Response.status(500).entity(ex.getMessage()).build();
|
||||
} catch (DeviceControllerException ex) {
|
||||
return Response.status(500).entity(ex.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Path("manager/device/{sketch_type}/generate_link")
|
||||
@GET
|
||||
public Response generateSketchLink(@QueryParam("owner") String owner,
|
||||
@QueryParam("deviceName") String customDeviceName,
|
||||
@PathParam("sketch_type") String sketchType) {
|
||||
|
||||
log.info(owner + customDeviceName + sketchType);
|
||||
try {
|
||||
ZipArchive zipFile = createDownloadFile(owner, customDeviceName, sketchType);
|
||||
Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId());
|
||||
return rb.build();
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return Response.status(400).entity(ex.getMessage()).build();//bad request
|
||||
} catch (DeviceManagementException ex) {
|
||||
return Response.status(500).entity(ex.getMessage()).build();
|
||||
} catch (AccessTokenException ex) {
|
||||
return Response.status(500).entity(ex.getMessage()).build();
|
||||
} catch (DeviceControllerException ex) {
|
||||
return Response.status(500).entity(ex.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
private ZipArchive createDownloadFile(String owner, String customDeviceName, String sketchType)
|
||||
throws DeviceManagementException, AccessTokenException, DeviceControllerException {
|
||||
if (owner == null) {
|
||||
throw new IllegalArgumentException("Error on createDownloadFile() Owner is null!");
|
||||
}
|
||||
|
||||
//create new device id
|
||||
String deviceId = shortUUID();
|
||||
|
||||
TokenClient accessTokenClient = new TokenClient(DroneConstants.DEVICE_TYPE);
|
||||
AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId);
|
||||
|
||||
//create token
|
||||
String accessToken = accessTokenInfo.getAccess_token();
|
||||
String refreshToken = accessTokenInfo.getRefresh_token();
|
||||
//adding registering data
|
||||
|
||||
XmppAccount newXmppAccount = new XmppAccount();
|
||||
newXmppAccount.setAccountName(owner + "_" + deviceId);
|
||||
newXmppAccount.setUsername(deviceId);
|
||||
newXmppAccount.setPassword(accessToken);
|
||||
newXmppAccount.setEmail(deviceId + "@wso2.com");
|
||||
|
||||
XmppServerClient xmppServerClient = new XmppServerClient();
|
||||
xmppServerClient.initControlQueue();
|
||||
boolean status;
|
||||
|
||||
if (XmppConfig.getInstance().isEnabled()) {
|
||||
status = xmppServerClient.createXMPPAccount(newXmppAccount);
|
||||
if (!status) {
|
||||
String msg =
|
||||
"XMPP Account was not created for device - " + deviceId + " of owner - " +
|
||||
owner +
|
||||
".XMPP might have been disabled in org.wso2.carbon.device.mgt.iot" +
|
||||
".common.config.server.configs";
|
||||
log.warn(msg);
|
||||
throw new DeviceManagementException(msg);
|
||||
}
|
||||
}
|
||||
|
||||
//Register the device with CDMF
|
||||
String deviceName = customDeviceName + "_" + deviceId;
|
||||
status = register(deviceId, deviceName, owner);
|
||||
|
||||
if (!status) {
|
||||
String msg = "Error occurred while registering the device with " + "id: " + deviceId
|
||||
+ " owner:" + owner;
|
||||
throw new DeviceManagementException(msg);
|
||||
}
|
||||
|
||||
|
||||
ZipUtil ziputil = new ZipUtil();
|
||||
ZipArchive zipFile = ziputil.downloadSketch(owner, SUPER_TENANT, sketchType, deviceId, deviceName,
|
||||
accessToken, refreshToken);
|
||||
zipFile.setDeviceId(deviceId);
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String shortUUID() {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
long l = ByteBuffer.wrap(uuid.toString().getBytes(StandardCharsets.UTF_8)).getLong();
|
||||
return Long.toString(l, Character.MAX_RADIX);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------------------------
|
||||
Device specific APIs - Control APIs + Data-Publishing APIs
|
||||
Also contains utility methods required for the execution of these APIs
|
||||
--------------------------------------------------------------------------------------- */
|
||||
@Path("controller/register/{owner}/{deviceId}/{ip}/{port}")
|
||||
@POST
|
||||
public String registerDeviceIP(@PathParam("owner") String owner,
|
||||
@PathParam("deviceId") String deviceId,
|
||||
@PathParam("ip") String deviceIP,
|
||||
@PathParam("port") String devicePort,
|
||||
@Context HttpServletResponse response,
|
||||
@Context HttpServletRequest request) {
|
||||
|
||||
//TODO:: Need to get IP from the request itself
|
||||
String result;
|
||||
|
||||
log.info("Got register call from IP: " + deviceIP + " for Device ID: " + deviceId +
|
||||
" of owner: " + owner);
|
||||
|
||||
String deviceHttpEndpoint = deviceIP + ":" + devicePort;
|
||||
deviceToIpMap.put(deviceId, deviceHttpEndpoint);
|
||||
|
||||
result = "Device-IP Registered";
|
||||
response.setStatus(Response.Status.OK.getStatusCode());
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(result);
|
||||
}
|
||||
log.info(owner + deviceId + deviceIP + devicePort );
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/* Service to switch "ON" and "OFF" the Virtual FireAlarm bulb
|
||||
Called by an external client intended to control the Virtual FireAlarm bulb */
|
||||
@Path("controller/send_command")
|
||||
@POST
|
||||
public void droneController(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId,
|
||||
@QueryParam("action") String action,
|
||||
@QueryParam("duration") String duration,
|
||||
@QueryParam("speed") String speed,
|
||||
@Context HttpServletResponse response) {
|
||||
/*
|
||||
|
||||
|
||||
try {
|
||||
DeviceValidator deviceValidator = new DeviceValidator();
|
||||
if (!deviceValidator.isExist(owner, SUPER_TENANT, new DeviceIdentifier(deviceId,
|
||||
VirtualFireAlarmConstants
|
||||
.DEVICE_TYPE))) {
|
||||
response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode());
|
||||
return;
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
log.error("DeviceValidation Failed for deviceId: " + deviceId + " of user: " + owner);
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return;
|
||||
}
|
||||
|
||||
String switchToState = state.toUpperCase();
|
||||
|
||||
if (!switchToState.equals(VirtualFireAlarmConstants.STATE_ON) && !switchToState.equals(
|
||||
VirtualFireAlarmConstants.STATE_OFF)) {
|
||||
log.error("The requested state change shoud be either - 'ON' or 'OFF'");
|
||||
response.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
|
||||
return;
|
||||
}
|
||||
|
||||
String protocolString = protocol.toUpperCase();
|
||||
String callUrlPattern = VirtualFireAlarmConstants.BULB_CONTEXT + switchToState;
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Sending request to switch-bulb of device [" + deviceId + "] via " +
|
||||
protocolString);
|
||||
}
|
||||
|
||||
try {
|
||||
switch (protocolString) {
|
||||
case HTTP_PROTOCOL:
|
||||
String deviceHTTPEndpoint = deviceToIpMap.get(deviceId);
|
||||
if (deviceHTTPEndpoint == null) {
|
||||
response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode());
|
||||
return;
|
||||
}
|
||||
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaHTTP(deviceHTTPEndpoint, callUrlPattern, true);
|
||||
break;
|
||||
case MQTT_PROTOCOL:
|
||||
String mqttMessage = VirtualFireAlarmConstants.BULB_CONTEXT.replace("/", "");
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaMQTT(owner, deviceId, mqttMessage, switchToState);
|
||||
break;
|
||||
case XMPP_PROTOCOL:
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaXMPP(owner, deviceId,
|
||||
VirtualFireAlarmConstants.BULB_CONTEXT,
|
||||
switchToState, virtualFireAlarmXMPPConnector);
|
||||
break;
|
||||
default:
|
||||
response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode());
|
||||
return;
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
log.error("Failed to send switch-bulb request to device [" + deviceId + "] via " + protocolString);
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return;
|
||||
}
|
||||
|
||||
response.setStatus(Response.Status.OK.getStatusCode());*/
|
||||
}
|
||||
|
||||
|
||||
@Path("controller/readsonar")
|
||||
@GET
|
||||
public String requestSonarReading(@HeaderParam("owner") String owner,
|
||||
@HeaderParam("deviceId") String deviceId,
|
||||
@HeaderParam("protocol") String protocol,
|
||||
@Context HttpServletResponse response) {
|
||||
/*String replyMsg = "";
|
||||
|
||||
DeviceValidator deviceValidator = new DeviceValidator();
|
||||
try {
|
||||
if (!deviceValidator.isExist(owner, SUPER_TENANT, new DeviceIdentifier(deviceId,
|
||||
VirtualFireAlarmConstants
|
||||
.DEVICE_TYPE))) {
|
||||
response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode());
|
||||
return "Unauthorized Access";
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
replyMsg = e.getErrorMessage();
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return replyMsg;
|
||||
}
|
||||
|
||||
String protocolString = protocol.toUpperCase();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Sending request to read sonar value of device [" + deviceId + "] via " +
|
||||
protocolString);
|
||||
}
|
||||
|
||||
try {
|
||||
switch (protocolString) {
|
||||
case HTTP_PROTOCOL:
|
||||
String deviceHTTPEndpoint = deviceToIpMap.get(deviceId);
|
||||
if (deviceHTTPEndpoint == null) {
|
||||
replyMsg =
|
||||
"IP not registered for device: " + deviceId + " of owner: " + owner;
|
||||
response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode());
|
||||
return replyMsg;
|
||||
}
|
||||
|
||||
replyMsg = VirtualFireAlarmServiceUtils.sendCommandViaHTTP(deviceHTTPEndpoint,
|
||||
VirtualFireAlarmConstants.SONAR_CONTEXT,
|
||||
false);
|
||||
break;
|
||||
|
||||
case MQTT_PROTOCOL:
|
||||
String mqttMessage = VirtualFireAlarmConstants.BULB_CONTEXT.replace("/", "");
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaMQTT(owner, deviceId, mqttMessage, "");
|
||||
break;
|
||||
|
||||
case XMPP_PROTOCOL:
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaXMPP(owner, deviceId,
|
||||
VirtualFireAlarmConstants.SONAR_CONTEXT, "",
|
||||
virtualFireAlarmXMPPConnector);
|
||||
break;
|
||||
|
||||
default:
|
||||
replyMsg = "Requested protocol '" + protocolString + "' is not supported";
|
||||
response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode());
|
||||
return replyMsg;
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
replyMsg = e.getErrorMessage();
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
return replyMsg;
|
||||
}
|
||||
|
||||
response.setStatus(Response.Status.OK.getStatusCode());
|
||||
replyMsg = "The current sonar reading of the device is " + replyMsg;
|
||||
return replyMsg;*/
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Path("controller/readtemperature")
|
||||
@GET
|
||||
@Consumes("application/json")
|
||||
@Produces("application/json")
|
||||
public Response requestTemperature(@HeaderParam("owner") String owner,
|
||||
@HeaderParam("deviceId") String deviceId,
|
||||
@HeaderParam("protocol") String protocol,
|
||||
@Context HttpServletResponse response) {
|
||||
//SensorRecord sensorRecord = null;
|
||||
|
||||
/*DeviceValidator deviceValidator = new DeviceValidator();
|
||||
try {
|
||||
if (!deviceValidator.isExist(owner, SUPER_TENANT, new DeviceIdentifier(deviceId,
|
||||
VirtualFireAlarmConstants
|
||||
.DEVICE_TYPE))) {
|
||||
response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode());
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
}
|
||||
|
||||
String protocolString = protocol.toUpperCase();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(
|
||||
"Sending request to read virtual-firealarm-temperature of device [" + deviceId +
|
||||
"] via " + protocolString);
|
||||
}
|
||||
|
||||
try {
|
||||
switch (protocolString) {
|
||||
case HTTP_PROTOCOL:
|
||||
String deviceHTTPEndpoint = deviceToIpMap.get(deviceId);
|
||||
if (deviceHTTPEndpoint == null) {
|
||||
response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode());
|
||||
}
|
||||
|
||||
String temperatureValue = VirtualFireAlarmServiceUtils.sendCommandViaHTTP(deviceHTTPEndpoint,
|
||||
VirtualFireAlarmConstants.TEMPERATURE_CONTEXT,
|
||||
false);
|
||||
|
||||
*//* SensorDataManager.getInstance().setSensorRecord(deviceId,
|
||||
VirtualFireAlarmConstants.SENSOR_TEMPERATURE,
|
||||
temperatureValue,
|
||||
Calendar.getInstance().getTimeInMillis());*//*
|
||||
break;
|
||||
|
||||
case MQTT_PROTOCOL:
|
||||
String mqttMessage = VirtualFireAlarmConstants.BULB_CONTEXT.replace("/", "");
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaMQTT(owner, deviceId, mqttMessage, "");
|
||||
break;
|
||||
|
||||
case XMPP_PROTOCOL:
|
||||
VirtualFireAlarmServiceUtils.sendCommandViaXMPP(owner, deviceId,
|
||||
VirtualFireAlarmConstants.TEMPERATURE_CONTEXT, "",
|
||||
virtualFireAlarmXMPPConnector);
|
||||
break;
|
||||
|
||||
default:
|
||||
response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode());
|
||||
}
|
||||
*//*
|
||||
sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId,
|
||||
VirtualFireAlarmConstants
|
||||
.SENSOR_TEMPERATURE);
|
||||
*//*
|
||||
} catch (DeviceManagementException e) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
}
|
||||
|
||||
response.setStatus(Response.Status.OK.getStatusCode());*/
|
||||
return null;
|
||||
}
|
||||
|
||||
/*@Path("controller/push_temperature")
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
public void pushTemperatureData(final DeviceJSON dataMsg,
|
||||
@Context HttpServletResponse response) {
|
||||
String deviceId = dataMsg.deviceId;
|
||||
String deviceIp = dataMsg.reply;
|
||||
float temperature = dataMsg.value;
|
||||
|
||||
String registeredIp = deviceToIpMap.get(deviceId);
|
||||
|
||||
if (registeredIp == null) {
|
||||
log.warn("Unregistered IP: Temperature Data Received from an un-registered IP " +
|
||||
deviceIp + " for device ID - " + deviceId);
|
||||
response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode());
|
||||
return;
|
||||
} else if (!registeredIp.equals(deviceIp)) {
|
||||
log.warn("Conflicting IP: Received IP is " + deviceIp + ". Device with ID " +
|
||||
deviceId +
|
||||
" is already registered under some other IP. Re-registration " +
|
||||
"required");
|
||||
response.setStatus(Response.Status.CONFLICT.getStatusCode());
|
||||
return;
|
||||
}
|
||||
SensorDataManager.getInstance().setSensorRecord(deviceId,
|
||||
VirtualFireAlarmConstants
|
||||
.SENSOR_TEMPERATURE,
|
||||
String.valueOf(temperature),
|
||||
Calendar.getInstance().getTimeInMillis());
|
||||
|
||||
if (!VirtualFireAlarmServiceUtils.publishToDAS(dataMsg.owner, dataMsg.deviceId, dataMsg.value)) {
|
||||
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||
}
|
||||
|
||||
}*/
|
||||
|
||||
|
||||
/*@GET
|
||||
@Path("controller/scep")
|
||||
public Response scepRequest(@QueryParam("operation") String operation, @QueryParam("message") String message) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoking SCEP operation " + operation);
|
||||
}
|
||||
|
||||
if (SCEPOperation.GET_CA_CERT.getValue().equals(operation)) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoking GetCACert");
|
||||
}
|
||||
|
||||
try {
|
||||
CertificateManagementService certificateManagementService =
|
||||
VirtualFireAlarmServiceUtils.getCertificateManagementService();
|
||||
SCEPResponse scepResponse = certificateManagementService.getCACertSCEP();
|
||||
Response.ResponseBuilder responseBuilder;
|
||||
|
||||
switch (scepResponse.getResultCriteria()) {
|
||||
case CA_CERT_FAILED:
|
||||
log.error("CA cert failed");
|
||||
responseBuilder = Response.serverError();
|
||||
break;
|
||||
case CA_CERT_RECEIVED:
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("CA certificate received in GetCACert");
|
||||
}
|
||||
|
||||
responseBuilder = Response.ok(scepResponse.getEncodedResponse(),
|
||||
ContentType.X_X509_CA_CERT);
|
||||
break;
|
||||
case CA_RA_CERT_RECEIVED:
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("CA and RA certificates received in GetCACert");
|
||||
}
|
||||
|
||||
responseBuilder = Response.ok(scepResponse.getEncodedResponse(),
|
||||
ContentType.X_X509_CA_RA_CERT);
|
||||
break;
|
||||
default:
|
||||
log.error("Invalid SCEP request");
|
||||
responseBuilder = Response.serverError();
|
||||
break;
|
||||
}
|
||||
|
||||
return responseBuilder.build();
|
||||
} catch (VirtualFireAlarmException e) {
|
||||
log.error("Error occurred while enrolling the iOS device", e);
|
||||
} catch (KeystoreException e) {
|
||||
log.error("Keystore error occurred while enrolling the iOS device", e);
|
||||
}
|
||||
|
||||
} else if (SCEPOperation.GET_CA_CAPS.getValue().equals(operation)) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoking GetCACaps");
|
||||
}
|
||||
|
||||
try {
|
||||
CertificateManagementService certificateManagementService = VirtualFireAlarmServiceUtils.
|
||||
getCertificateManagementService();
|
||||
byte caCaps[] = certificateManagementService.getCACapsSCEP();
|
||||
|
||||
return Response.ok(caCaps, MediaType.TEXT_PLAIN).build();
|
||||
|
||||
} catch (VirtualFireAlarmException e) {
|
||||
log.error("Error occurred while enrolling the device", e);
|
||||
}
|
||||
|
||||
} else {
|
||||
log.error("Invalid SCEP operation " + operation);
|
||||
}
|
||||
|
||||
return Response.serverError().build();
|
||||
}*/
|
||||
|
||||
/*@POST
|
||||
@Path("controller/scep")
|
||||
public Response scepRequestPost(@QueryParam("operation") String operation, InputStream inputStream) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoking SCEP operation " + operation);
|
||||
}
|
||||
|
||||
if (SCEPOperation.PKI_OPERATION.getValue().equals(operation)) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Invoking PKIOperation");
|
||||
}
|
||||
|
||||
try {
|
||||
CertificateManagementService certificateManagementService = VirtualFireAlarmServiceUtils.
|
||||
getCertificateManagementService();
|
||||
byte pkiMessage[] = certificateManagementService.getPKIMessageSCEP(inputStream);
|
||||
|
||||
return Response.ok(pkiMessage, ContentType.X_PKI_MESSAGE).build();
|
||||
|
||||
} catch (VirtualFireAlarmException e) {
|
||||
log.error("Error occurred while enrolling the device", e);
|
||||
} catch (KeystoreException e) {
|
||||
log.error("Keystore error occurred while enrolling the device", e);
|
||||
}
|
||||
}
|
||||
return Response.serverError().build();
|
||||
}*/
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.droneanalyzer.service.exception;
|
||||
|
||||
public class DroneAnalyzerException extends Exception {
|
||||
private static final long serialVersionUID = 118512086958330189L;
|
||||
|
||||
public DroneAnalyzerException(String errorMessage) {
|
||||
super(errorMessage);
|
||||
}
|
||||
|
||||
public DroneAnalyzerException(String errorMessage, Throwable throwable) {
|
||||
super(errorMessage, throwable);
|
||||
}
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig;
|
||||
import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConnector;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.DroneAnalyzerServiceUtils;
|
||||
import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerXMPPConnector extends XmppConnector {
|
||||
private static Log log = LogFactory.getLog(DroneAnalyzerXMPPConnector.class);
|
||||
|
||||
private static String xmppServerIP;
|
||||
// private static int xmppServerPort;
|
||||
private static String xmppAdminUsername;
|
||||
private static String xmppAdminPassword;
|
||||
private static String xmppAdminAccountJID;
|
||||
|
||||
private DroneAnalyzerXMPPConnector() {
|
||||
super(XmppConfig.getInstance().getXmppServerIP(),
|
||||
XmppConfig.getInstance().getSERVER_CONNECTION_PORT());
|
||||
}
|
||||
|
||||
public void initConnector() {
|
||||
xmppServerIP = XmppConfig.getInstance().getXmppServerIP();
|
||||
xmppAdminUsername = XmppConfig.getInstance().getXmppUsername();
|
||||
xmppAdminPassword = XmppConfig.getInstance().getXmppPassword();
|
||||
xmppAdminAccountJID = xmppAdminUsername + "@" + xmppServerIP;
|
||||
}
|
||||
|
||||
public void connectAndLogin() {
|
||||
try {
|
||||
super.connectAndLogin(xmppAdminUsername, xmppAdminPassword, null);
|
||||
super.setMessageFilterOnReceiver(xmppAdminAccountJID);
|
||||
} catch (DeviceManagementException e) {
|
||||
log.error("Connect/Login attempt to XMPP Server at: " + xmppServerIP + " failed");
|
||||
retryXMPPConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processXMPPMessage(Message xmppMessage) {
|
||||
String from = xmppMessage.getFrom();
|
||||
String subject = xmppMessage.getSubject();
|
||||
String message = xmppMessage.getBody();
|
||||
|
||||
int indexOfAt = from.indexOf("@");
|
||||
int indexOfSlash = from.indexOf("/");
|
||||
|
||||
String deviceId = from.substring(0, indexOfAt);
|
||||
String owner = from.substring(indexOfSlash + 1, from.length());
|
||||
|
||||
log.info("Received XMPP message for: {OWNER-" + owner + "} & {DEVICE.ID-" + deviceId + "}");
|
||||
|
||||
if (subject.equals("PUBLISHER")) {
|
||||
log.info("XMPP: Publisher Message [" + message + "] from [" + from + "]");
|
||||
|
||||
float temperature = Float.parseFloat(message.split(":")[1]);
|
||||
if(!DroneAnalyzerServiceUtils.publishToDAS(owner, deviceId, temperature)) {
|
||||
log.error("XMPP Connector: Publishing data to DAS failed.");
|
||||
}
|
||||
|
||||
if(log.isDebugEnabled()) {
|
||||
log.debug("XMPP Connector: Published data to DAS successfully.");
|
||||
}
|
||||
} else if(subject.equals("CONTROL-REPLY")) {
|
||||
log.info("XMPP: Reply Message [" + message + "] from [" + from + "]");
|
||||
String temperature = message.split(":")[1];
|
||||
SensorDataManager.getInstance().setSensorRecord(deviceId, DroneConstants.SENSOR_TEMPERATURE, temperature, Calendar.getInstance().getTimeInMillis());
|
||||
} else {
|
||||
log.info("SOME XMPP Message [" + message + "] from " + from + "]");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void retryXMPPConnection() {
|
||||
Thread retryToConnect = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
if (!isConnected()) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Re-trying to reach XMPP Server....");
|
||||
}
|
||||
try {
|
||||
DroneAnalyzerXMPPConnector.super.connectAndLogin(xmppAdminUsername, xmppAdminPassword, null);
|
||||
DroneAnalyzerXMPPConnector.super.setMessageFilterOnReceiver(xmppAdminAccountJID);
|
||||
} catch (DeviceManagementException e1) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Attempt to re-connect to XMPP-Server failed");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException e1) {
|
||||
log.error("XMPP: Thread Sleep Interrupt Exception");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
retryToConnect.setDaemon(true);
|
||||
retryToConnect.start();
|
||||
}
|
||||
}
|
@ -0,0 +1,175 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.jivesoftware.smack.*;
|
||||
import org.jivesoftware.smack.filter.AndFilter;
|
||||
import org.jivesoftware.smack.filter.PacketFilter;
|
||||
import org.jivesoftware.smack.filter.PacketTypeFilter;
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.Packet;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer.MessageTransformer;
|
||||
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/7/15.
|
||||
*/
|
||||
public class DroneXMPPConnector {
|
||||
|
||||
private static Log log = LogFactory.getLog(DroneXMPPConnector.class);
|
||||
|
||||
// XmppManager xmppManager;
|
||||
|
||||
private MessageTransformer messageController;
|
||||
private static String xmppServerIP;
|
||||
private static int xmppServerPort;
|
||||
private static String xmppAdminUsername;
|
||||
private static String xmppAdminPassword;
|
||||
private static String xmppAdminAccountJID;
|
||||
|
||||
public DroneXMPPConnector(MessageTransformer messageController) {
|
||||
this.messageController = messageController;
|
||||
initConnector();
|
||||
}
|
||||
|
||||
|
||||
public void initConnector() {
|
||||
/* xmppServerIP = XmppConfig.getInstance().getXmppServerIP();
|
||||
xmppAdminUsername = XmppConfig.getInstance().getXmppUsername();
|
||||
xmppAdminPassword = XmppConfig.getInstance().getXmppPassword();
|
||||
xmppAdminAccountJID = xmppAdminUsername + "@" + xmppServerIP;*/
|
||||
xmppServerPort = 5222;
|
||||
xmppServerIP = "localhost";
|
||||
xmppAdminUsername = "admin";
|
||||
xmppAdminPassword = "admin";
|
||||
xmppAdminAccountJID = xmppAdminUsername + "@" + xmppServerIP;
|
||||
}
|
||||
|
||||
/*public void connectAndLogin() {
|
||||
try {
|
||||
super.connectAndLogin(xmppAdminUsername, xmppAdminPassword, null);
|
||||
super.setMessageFilterOnReceiver(xmppAdminAccountJID);
|
||||
} catch (DeviceManagementException e) {
|
||||
log.error("Connect/Login attempt to XMPP Server at: " + xmppServerIP + " failed");
|
||||
retryXMPPConnection();
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
private XMPPConnection xmppConnection;
|
||||
|
||||
public void connect(String server, int port) throws Exception {
|
||||
if(xmppConnection == null){
|
||||
xmppConnection = new XMPPConnection(new ConnectionConfiguration(server, port));
|
||||
xmppConnection.connect();
|
||||
}else{
|
||||
System.out.println("Already user is connected");
|
||||
}
|
||||
/*xmppConnection = new XMPPConnection(new ConnectionConfiguration(server, port));
|
||||
xmppConnection.connect();*/
|
||||
}
|
||||
|
||||
public void disconnect(){
|
||||
if(xmppConnection != null){
|
||||
xmppConnection.disconnect();
|
||||
//interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
public void login(String username, String password) throws Exception{
|
||||
printRoster();
|
||||
connect( xmppServerIP, xmppServerPort);
|
||||
xmppConnection.login(username, password);
|
||||
}
|
||||
|
||||
public void run(){
|
||||
try {
|
||||
System.out.println(xmppAdminAccountJID+xmppAdminPassword);
|
||||
login(xmppAdminAccountJID, xmppAdminPassword);
|
||||
System.out.println("Login successful");
|
||||
listeningForMessages();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void listeningForMessages() {
|
||||
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class));
|
||||
PacketCollector collector = xmppConnection.createPacketCollector(filter);
|
||||
while (true) {
|
||||
System.out.println("waiting ...");
|
||||
Packet packet = collector.nextResult();
|
||||
if (packet instanceof Message) {
|
||||
Message inbound_message = (Message) packet;
|
||||
if (inbound_message != null && inbound_message.getBody() != null){
|
||||
System.out.println(inbound_message.getBody());
|
||||
messageController.messageTranslater(inbound_message.getBody());
|
||||
}
|
||||
|
||||
} else {
|
||||
log.error("Message has been corrupted");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void printRoster() throws Exception {
|
||||
if(xmppConnection != null){
|
||||
Roster roster = xmppConnection.getRoster();
|
||||
if(roster !=null && roster.getEntries() != null){
|
||||
Collection<RosterEntry> entries = roster.getEntries();
|
||||
for (RosterEntry entry : entries) {
|
||||
System.out.println(String.format("Buddy:%1$s - Status:%2$s",
|
||||
entry.getName(), entry.getStatus()));
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
System.out.println("There are no users");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* private void retryXMPPConnection() {
|
||||
Thread retryToConnect = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
while (true) {
|
||||
if (!isConnected()) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Re-trying to reach XMPP Server....");
|
||||
}
|
||||
|
||||
try {
|
||||
VirtualFireAlarmXMPPConnector.super.connectAndLogin(xmppAdminUsername,
|
||||
xmppAdminPassword,
|
||||
null);
|
||||
VirtualFireAlarmXMPPConnector.super.setMessageFilterOnReceiver(
|
||||
xmppAdminAccountJID);
|
||||
} catch (DeviceManagementException e1) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Attempt to re-connect to XMPP-Server failed");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException e1) {
|
||||
log.error("XMPP: Thread Sleep Interrupt Exception");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
retryToConnect.setDaemon(true);
|
||||
retryToConnect.start();
|
||||
}*/
|
||||
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer;
|
||||
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.codehaus.jackson.JsonNode;
|
||||
import org.codehaus.jackson.map.ObjectMapper;
|
||||
import org.codehaus.jackson.node.ArrayNode;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.MessageConfig;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
public class MessageTransformer {
|
||||
|
||||
private Log log = LogFactory.getLog(MessageTransformer.class);
|
||||
|
||||
private Queue<String> sharedQueue;
|
||||
private String current_message = "";
|
||||
ObjectMapper mapper;
|
||||
boolean isOld = true;
|
||||
private String inbound_message_format = "{\"quatanium_val\":[%d, %d, %d, %d],\"accelerometer\":[%d, %d, %d]," +
|
||||
"\"gyroscope\":[%d, %d, %d],\"magnetometer\":[%d, %d, %d],\"basicParam\":[%d, %d, %d]}";
|
||||
private String outbound_message_format = "{\"quatanium_val\":[%f, %f, %f, %f],\"accelerometer\":[%f, %f, %f]," +
|
||||
"\"gyroscope\":[%f, %f, %f],\"magnetometer\":[%f, %f, %f],\"basicParam\":[%f, %f, %f]}";
|
||||
|
||||
public MessageTransformer(){
|
||||
mapper = new ObjectMapper();
|
||||
sharedQueue = new LinkedList<String>();
|
||||
}
|
||||
|
||||
public void messageTranslater(String inbound_message){
|
||||
JsonNode actualObj = null;
|
||||
String outbound_message;
|
||||
try {
|
||||
actualObj = mapper.readTree(inbound_message);
|
||||
ArrayNode quatannim_vals = (ArrayNode) actualObj.path(MessageConfig.IN_QUATANNIM_VAL);
|
||||
ArrayNode accelerometer_vals = (ArrayNode) actualObj.path(MessageConfig.IN_ACCELETOMETER_VAL);
|
||||
ArrayNode gyroscope_vals = (ArrayNode) actualObj.path(MessageConfig.IN_GYROSCOPE_VAL);
|
||||
ArrayNode magnetometer_vals = (ArrayNode) actualObj.path(MessageConfig.IN_GYROSCOPE_VAL);
|
||||
ArrayNode basicParam_vals = (ArrayNode) actualObj.path(MessageConfig.IN_BASIC_PARAM_VAL);
|
||||
outbound_message = String.format(outbound_message_format, sTd(quatannim_vals.get(0)), sTd(quatannim_vals.get(1)),
|
||||
sTd(quatannim_vals.get(2)), sTd(quatannim_vals.get(3)), sTd(accelerometer_vals.get(0)),
|
||||
sTd(accelerometer_vals.get(1)), sTd(accelerometer_vals.get(2)), sTd(gyroscope_vals.get(0)),
|
||||
sTd(gyroscope_vals.get(1)), sTd(gyroscope_vals.get(2)), sTd(magnetometer_vals.get(0)),
|
||||
sTd(magnetometer_vals.get(1)), sTd(magnetometer_vals.get(2)), sTd(basicParam_vals.get(0)),
|
||||
sTd(basicParam_vals.get(1)), sTd(basicParam_vals.get(2)));
|
||||
|
||||
synchronized(current_message){
|
||||
isOld = false;
|
||||
current_message = outbound_message;
|
||||
}
|
||||
sharedQueue.add(outbound_message);
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage()+",\n"+ e);
|
||||
}catch (Exception e) {
|
||||
log.error(e.getMessage()+",\n"+ e);
|
||||
}
|
||||
}
|
||||
|
||||
private double sTd(JsonNode s)
|
||||
{
|
||||
return Double.parseDouble(s.toString());
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
if(sharedQueue.isEmpty()){
|
||||
return null;
|
||||
}
|
||||
else{
|
||||
return sharedQueue.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public String getCurrentMessage(){
|
||||
synchronized(current_message) {
|
||||
current_message = isOld == false ? current_message : null;
|
||||
isOld = true;
|
||||
}
|
||||
return current_message;
|
||||
}
|
||||
|
||||
public boolean isCurrentMessageEmpty()
|
||||
{
|
||||
return isOld;
|
||||
}
|
||||
|
||||
public boolean isEmptyQueue(){
|
||||
return sharedQueue.isEmpty();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util;
|
||||
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.analytics.exception.DataPublisherConfigurationException;
|
||||
import org.wso2.carbon.device.mgt.analytics.service.DeviceAnalyticsService;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants;
|
||||
import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by geesara on 12/9/15.
|
||||
*/
|
||||
public class DroneAnalyzerServiceUtils {
|
||||
|
||||
private static final String SUPER_TENANT = "carbon.super";
|
||||
private static final String TEMPERATURE_STREAM_DEFINITION = "org.wso2.iot.devices.temperature";
|
||||
|
||||
public static void sendCommandViaXMPP(String deviceOwner, String deviceId, String resource,
|
||||
String state, DroneAnalyzerXMPPConnector droneXMPPConnector)
|
||||
throws DeviceManagementException {
|
||||
|
||||
String xmppServerDomain = XmppConfig.getInstance().getXmppEndpoint();
|
||||
int indexOfChar = xmppServerDomain.lastIndexOf(File.separator);
|
||||
if (indexOfChar != -1) {
|
||||
xmppServerDomain = xmppServerDomain.substring((indexOfChar + 1),
|
||||
xmppServerDomain.length());
|
||||
}
|
||||
|
||||
indexOfChar = xmppServerDomain.indexOf(":");
|
||||
if (indexOfChar != -1) {
|
||||
xmppServerDomain = xmppServerDomain.substring(0, indexOfChar);
|
||||
}
|
||||
|
||||
String clientToConnect = deviceId + "@" + xmppServerDomain + File.separator + deviceOwner;
|
||||
String message = resource.replace("/", "") + ":" + state;
|
||||
|
||||
droneXMPPConnector.sendXMPPMessage(clientToConnect, message, "CONTROL-REQUEST");
|
||||
}
|
||||
|
||||
public static boolean publishToDAS(String owner, String deviceId, float temperature) {
|
||||
PrivilegedCarbonContext.startTenantFlow();
|
||||
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
ctx.setTenantDomain(SUPER_TENANT, true);
|
||||
DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
|
||||
DeviceAnalyticsService.class, null);
|
||||
Object metdaData[] = {owner, DroneConstants.DEVICE_TYPE, deviceId,
|
||||
System.currentTimeMillis()};
|
||||
Object payloadData[] = {temperature};
|
||||
|
||||
try {
|
||||
deviceAnalyticsService.publishEvent(TEMPERATURE_STREAM_DEFINITION, "1.0.0", metdaData,
|
||||
new Object[0], payloadData);
|
||||
} catch (DataPublisherConfigurationException e) {
|
||||
return false;
|
||||
} finally {
|
||||
PrivilegedCarbonContext.endTenantFlow();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<!-- This file contains the list of permissions that are associated with URL end points
|
||||
of the web app. Each permission should contain the name, permission path ,API path
|
||||
(URL) , HTTP method and OAUTH2 authorization scope (not-required).
|
||||
When defining dynamic paths for APIs, path variables are denoted by '*' notation.
|
||||
For ex:
|
||||
Actual API endpoint: mdm-admin/1.0.0/devices/{device-id}
|
||||
URL to be represented here: /devices/*
|
||||
NOTE: All the endpoints of the web app should be available in this file. Otherwise
|
||||
it will result 403 error at the runtime.
|
||||
-->
|
||||
<ResourceConfiguration>
|
||||
<!-- Device related APIs -->
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>PUT</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/device/register</Uri>
|
||||
<UriTemplate>/manager/device/register/*</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>DELETE</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/device/remove</Uri>
|
||||
<UriTemplate>/manager/device/remove/*</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>POST</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/device/update</Uri>
|
||||
<UriTemplate>/manager/device/update/*</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>GET</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/device</Uri>
|
||||
<UriTemplate>/manager/device/*</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>GET</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/devices</Uri>
|
||||
<UriTemplate>/manager/devices/*</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>GET</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/device/{sketch_type}/download</Uri>
|
||||
<UriTemplate>/manager/device/{sketch_type}/download</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>GET</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/manager/device/{sketch_type}/generate_link</Uri>
|
||||
<UriTemplate>/manager/device/{sketch_type}/generate_link</UriTemplate>
|
||||
</Resource>
|
||||
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>POST</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/controller/register/{owner}/{deviceId}/{ip}/{port}</Uri>
|
||||
<UriTemplate>/controller/register/{owner}/{deviceId}/{ip}/{port}</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>POST</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/controller/controller/bulb/{state}</Uri>
|
||||
<UriTemplate>/controller/bulb/{state}</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>GET</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/controller/send_command</Uri>
|
||||
<UriTemplate>/controller/send_command</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>GET</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/controller/controller/readtemperature</Uri>
|
||||
<UriTemplate>/controller/readtemperature</UriTemplate>
|
||||
</Resource>
|
||||
<Resource>
|
||||
<AuthType>Any</AuthType>
|
||||
<HttpVerb>POST</HttpVerb>
|
||||
<Uri>http://localhost:9763/drone_analyzer/controller/controller/push_temperature</Uri>
|
||||
<UriTemplate>/controller/push_temperature</UriTemplate>
|
||||
</Resource>
|
||||
</ResourceConfiguration>
|
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
~ Copyright 2005-2013 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed 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.
|
||||
-->
|
||||
|
||||
<!--
|
||||
This file defines class loading policy of the whole container. But this behaviour can be overridden by individual webapps by putting this file into the META-INF/ directory.
|
||||
-->
|
||||
<Classloading xmlns="http://wso2.org/projects/as/classloading">
|
||||
|
||||
<!-- Parent-first or child-first. Default behaviour is child-first.-->
|
||||
<ParentFirst>false</ParentFirst>
|
||||
|
||||
<!--
|
||||
Default environments that contains provides to all the webapps. This can be overridden by individual webapps by specifing required environments
|
||||
Tomcat environment is the default and every webapps gets it even if they didn't specify it.
|
||||
e.g. If a webapps requires CXF, they will get both Tomcat and CXF.
|
||||
-->
|
||||
<Environments>CXF,Carbon</Environments>
|
||||
</Classloading>
|
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
||||
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
|
||||
|
||||
|
||||
<!--<jaxrs:server id="VirtualFireAlarmController" address="/controller">-->
|
||||
<!--<jaxrs:serviceBeans>-->
|
||||
<!--<bean id="VirtualFireAlarmControllerService"-->
|
||||
<!--class="org.wso2.carbon.device.mgt.iot.sample.virtual.firealarm.service.impl.VirtualFireAlarmControllerService">-->
|
||||
<!--<property name="virtualFireAlarmMQTTSubscriber" ref="mqttSubscriberBean"/>-->
|
||||
<!--<property name="virtualFireAlarmXMPPConnector" ref="xmppConnectorBean"/>-->
|
||||
<!--</bean>-->
|
||||
<!--</jaxrs:serviceBeans>-->
|
||||
<!--<jaxrs:providers>-->
|
||||
<!--<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />-->
|
||||
<!--</jaxrs:providers>-->
|
||||
<!--</jaxrs:server>-->
|
||||
|
||||
<jaxrs:server id="VirtualFireAlarm" address="/">
|
||||
<jaxrs:serviceBeans>
|
||||
<bean id="DroneService"
|
||||
class="org.wso2.carbon.device.mgt.iot.droneanalyzer.service.DroneService">
|
||||
|
||||
<!--<property name="DroneXMPPConnector" ref="xmppConnectorBean"/>-->
|
||||
</bean>
|
||||
</jaxrs:serviceBeans>
|
||||
<jaxrs:providers>
|
||||
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
|
||||
</jaxrs:providers>
|
||||
</jaxrs:server>
|
||||
|
||||
<!--<bean id="xmppConnectorBean"
|
||||
class="org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector">
|
||||
</bean>-->
|
||||
|
||||
</beans>
|
||||
|
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<web-app version="2.5"
|
||||
xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
|
||||
metadata-complete="true">
|
||||
<display-name>WSO2 IoT Server</display-name>
|
||||
<description>WSO2 IoT Server</description>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>CXFServlet</servlet-name>
|
||||
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>CXFServlet</servlet-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<context-param>
|
||||
<param-name>isAdminService</param-name>
|
||||
<param-value>false</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>doAuthentication</param-name>
|
||||
<param-value>false</param-value>
|
||||
</context-param>
|
||||
|
||||
<!--publish to apim-->
|
||||
<context-param>
|
||||
<param-name>managed-api-enabled</param-name>
|
||||
<param-value>false</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-owner</param-name>
|
||||
<param-value>admin</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-name</param-name>
|
||||
<param-value>drone_analyzer</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-endpoint</param-name>
|
||||
<param-value>http://localhost:9763/drone_analyzer</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-version</param-name>
|
||||
<param-value>1.0.0</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-context</param-name>
|
||||
<param-value>/drone_analyzer</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-context-template</param-name>
|
||||
<param-value>/drone_analyzer/{version}</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-application</param-name>
|
||||
<param-value>drone_analyzer</param-value>
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>managed-api-isSecured</param-name>
|
||||
<param-value>true</param-value>
|
||||
</context-param>
|
||||
|
||||
<!-- Below configuration is used to redirect http requests to https -->
|
||||
<!--<security-constraint>-->
|
||||
<!--<web-resource-collection>-->
|
||||
<!--<web-resource-name>IoT</web-resource-name>-->
|
||||
<!--<url-pattern>/*</url-pattern>-->
|
||||
<!--</web-resource-collection>-->
|
||||
<!--<user-data-constraint>-->
|
||||
<!--<transport-guarantee>CONFIDENTIAL</transport-guarantee>-->
|
||||
<!--</user-data-constraint>-->
|
||||
<!--</security-constraint>-->
|
||||
|
||||
|
||||
</web-app>
|
@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>device-mgt-iot-droneanalyzer</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<modules>
|
||||
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl</module>
|
||||
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl</module>
|
||||
</modules>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - IoT Device Drone Analyzer Management Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
<version>1.7.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-scr-scrdescriptor</id>
|
||||
<goals>
|
||||
<goal>scr</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1,124 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>device-mgt-iot-droneanalyzer-feature</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.feature</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<name>WSO2 Carbon - IoT Server Drone Analyzer Feature</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
<description>This feature contains the Drone Device type specific implementations for the IoT Server
|
||||
</description>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl</artifactId>
|
||||
<type>war</type>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-resources</id>
|
||||
<phase>generate-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>src/main/resources</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>resources</directory>
|
||||
<includes>
|
||||
<include>build.properties</include>
|
||||
<include>p2.inf</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-jaxrs-war</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl
|
||||
</artifactId>
|
||||
<type>war</type>
|
||||
<overWrite>true</overWrite>
|
||||
<outputDirectory>${basedir}/src/main/resources/webapps/</outputDirectory>
|
||||
<destFileName>drone_analyzer.war</destFileName>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.wso2.maven</groupId>
|
||||
<artifactId>carbon-p2-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>p2-feature-generation</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>p2-feature-gen</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<id>org.wso2.carbon.device.mgt.iot.droneanalyzer</id>
|
||||
<propertiesFile>../../../features/etc/feature.properties</propertiesFile>
|
||||
<adviceFile>
|
||||
<properties>
|
||||
<propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
|
||||
<propertyDef>org.eclipse.equinox.p2.type.group:false</propertyDef>
|
||||
</properties>
|
||||
</adviceFile>
|
||||
<bundles>
|
||||
<bundleDef>
|
||||
org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl:${carbon.iot.device.mgt.version}
|
||||
</bundleDef>
|
||||
</bundles>
|
||||
<importFeatures>
|
||||
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}
|
||||
</importFeatureDef>
|
||||
<importFeatureDef>org.wso2.carbon.device.mgt.server:${carbon.device.mgt.version}
|
||||
</importFeatureDef>
|
||||
</importFeatures>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1 @@
|
||||
custom = true
|
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<DeviceTypeConfigurations>
|
||||
|
||||
|
||||
</DeviceTypeConfigurations>
|
@ -0,0 +1,11 @@
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `FIREALARM_DEVICE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `VIRTUAL_FIREALARM_DEVICE` (
|
||||
`VIRTUAL_FIREALARM_DEVICE_ID` VARCHAR(45) NOT NULL ,
|
||||
`DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`VIRTUAL_FIREALARM_DEVICE_ID`) );
|
||||
|
||||
|
||||
|
@ -0,0 +1,12 @@
|
||||
-- -----------------------------------------------------
|
||||
-- Table `FIREALARM_DEVICE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `VIRTUAL_FIREALARM_DEVICE` (
|
||||
`VIRTUAL_FIREALARM_DEVICE_ID` VARCHAR(45) NOT NULL ,
|
||||
`DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`VIRTUAL_FIREALARM_DEVICE_ID`) )
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,36 @@
|
||||
<div id="device_overview">
|
||||
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
|
||||
{{unit "cdmf.unit.device.overview.droneanalyzer-display-image"}}
|
||||
</div>
|
||||
<div class="media-body asset-desc add-padding-left-5x">
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Device Overview - Virtual Firealarm</div>
|
||||
{{#defineZone "device-detail-properties"}}
|
||||
<table class="table table-responsive table-striped" id="members">
|
||||
<tbody>
|
||||
<tr role="row" class="even"><td class="sorting_1" style="padding:10px 15px; width: 1%;;">Device</td><td style="padding:10px 15px;">{{device.viewModel.vendor}} {{device.properties.model}}</td></tr>
|
||||
<tr role="row" class="odd"><td class="sorting_1" style="padding:10px 15px;">Model</td><td style="padding:10px 15px;">{{device.viewModel.model}}</td></tr>
|
||||
<tr role="row" class="even"><td class="sorting_1" style="padding:10px 15px;">IMEI</td><td style="padding:10px 15px;">{{device.viewModel.imei}}</td></tr>
|
||||
{{#if device.viewModel.udid}}
|
||||
<tr role="row" class="even"><td class="sorting_1" style="padding:10px 15px;">UDID</td><td style="padding:10px 15px;">{{device.viewModel.udid}}</td></tr>
|
||||
{{/if}}
|
||||
{{#if device.viewModel.phoneNumber}}
|
||||
<tr role="row" class="even"><td class="sorting_1" style="padding:10px 15px;">Phone Number</td><td style="padding:10px 15px;">{{device.viewModel.phoneNumber}}</td></tr>
|
||||
{{/if}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px;">Status</td>
|
||||
<td style="padding:10px 15px;">
|
||||
{{#equal device.status "ACTIVE"}}<span><i class="fw fw-ok icon-success"></i> Active</span>{{/equal}}
|
||||
{{#equal device.status "INACTIVE"}}<span><i class="fw fw-warning icon-warning"></i> Inactive</span>{{/equal}}
|
||||
{{#equal device.status "BLOCKED"}}<span><i class="fw fw-remove icon-danger"></i> Blocked</span>{{/equal}}
|
||||
{{#equal device.status "REMOVED"}}<span><i class="fw fw-delete icon-danger"></i> Removed</span>{{/equal}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{{/defineZone}}
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Operations</div>
|
||||
<div class="add-margin-top-4x">
|
||||
{{unit "cdmf.unit.device.iot-operation" deviceType=device.type}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,25 @@
|
||||
function onRequest (context) {
|
||||
var log = new Log("detail.js");
|
||||
var deviceType = request.getParameter("type");
|
||||
var deviceId = request.getParameter("id");
|
||||
|
||||
if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) {
|
||||
var deviceModule = require("/modules/device.js").deviceModule;
|
||||
var device = deviceModule.viewDevice(deviceType, deviceId);
|
||||
|
||||
if (device) {
|
||||
var viewModel = {};
|
||||
var deviceInfo = device.properties.DEVICE_INFO;
|
||||
if (deviceInfo != undefined && String(deviceInfo.toString()).length > 0) {
|
||||
deviceInfo = parse(stringify(deviceInfo));
|
||||
viewModel.system = device.properties.IMEI;
|
||||
viewModel.machine = "Virtual Firealarm";
|
||||
viewModel.vendor = device.properties.VENDOR;
|
||||
}
|
||||
device.viewModel = viewModel;
|
||||
}
|
||||
context.device = device;
|
||||
|
||||
return context;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"version": "1.0.0"
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>device-mgt-iot-droneanalyzer-feature</artifactId>
|
||||
<version>1.9.2-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - IoT Server Drone Device Feature</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
<modules>
|
||||
<module>org.wso2.carbon.device.mgt.iot.droneanalyzer.feature</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
Loading…
Reference in new issue