forked from community/device-mgt-plugins
parent
1d288c6d94
commit
083dddcfca
@ -0,0 +1,127 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<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-androidsense</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.androidsense.api</artifactId>
|
||||||
|
<version>1.9.2-SNAPSHOT</version>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
<name>WSO2 Carbon - Android Sense API</name>
|
||||||
|
<description>WSO2 Carbon - Android Sense Service API Implementation</description>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- CDM -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||||
|
</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>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--IOT -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpasyncclient</artifactId>
|
||||||
|
<version>4.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.iot.androidsense</artifactId>
|
||||||
|
<version>1.9.2-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.device.mgt.iot</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.iot.common</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
</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>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.analytics</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-httpclient.wso2</groupId>
|
||||||
|
<artifactId>commons-httpclient</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||||
|
</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>
|
||||||
|
<warName>android_sense</warName>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,396 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.service.impl;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
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.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.androidsense.service.impl.util.DeviceJSON;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.androidsense.service.impl.util.SensorJSON;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.DeviceManagement;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.exception.DeviceControllerException;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.sensormgt.SensorDataManager;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.sensormgt.SensorRecord;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.androidsense.plugin.constants.AndroidSenseConstants;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import javax.ws.rs.core.Context;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class AndroidSenseService {
|
||||||
|
|
||||||
|
private static final String BATTERY_STREAM_DEFINITION = "org.wso2.iot.devices.battery";
|
||||||
|
private static final String LIGHT_STREAM_DEFINITION = "org.wso2.iot.devices.light";
|
||||||
|
private static final String GPS_STREAM_DEFINITION = "org.wso2.iot.devices.gps";
|
||||||
|
private static final String MAGNETIC_STREAM_DEFINITION = "org.wso2.iot.devices.magnetic";
|
||||||
|
|
||||||
|
/*Definetions for other sensor types.
|
||||||
|
* Accelerometer
|
||||||
|
* Gyroscope
|
||||||
|
* Pressure
|
||||||
|
* Proximity
|
||||||
|
* Gravity
|
||||||
|
* Rotation Vector
|
||||||
|
* */
|
||||||
|
|
||||||
|
private static final String ACCELEROMETER_STREAM_DEFINITION = "org.wso2.iot.devices.accelerometer";
|
||||||
|
private static final String GYROSCOPE_STREAM_DEFINITION = "org.wso2.iot.devices.gyroscope";
|
||||||
|
private static final String PRESSURE_STREAM_DEFINITION = "org.wso2.iot.devices.pressure";
|
||||||
|
private static final String GRAVITY_STREAM_DEFINITION = "org.wso2.iot.devices.gravity";
|
||||||
|
private static final String ROTATION_STREAM_DEFINITION = "org.wso2.iot.devices.rotation";
|
||||||
|
|
||||||
|
private static final String SENSOR_ACCELEROMETER = "accelerometer";
|
||||||
|
private static final String SENSOR_GYROSCOPE = "gyroscope";
|
||||||
|
private static final String SENSOR_PRESSURE = "pressure";
|
||||||
|
private static final String SENSOR_GRVITY = "gravity";
|
||||||
|
private static final String SENSOR_ROTATION = "rotation";
|
||||||
|
private static final String SENSOR_LIGHT = "light";
|
||||||
|
private static final String SENSOR_GPS = "gps";
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
private static final String SENSOR_BATTERY = "battery";
|
||||||
|
private static final String SENSOR_MAGNETIC = "magnetic";
|
||||||
|
private static Log log = LogFactory.getLog(AndroidSenseService.class);
|
||||||
|
|
||||||
|
//TODO; replace this tenant domain
|
||||||
|
private final String SUPER_TENANT = "carbon.super";
|
||||||
|
|
||||||
|
@Context //injected response proxy supporting multiple thread
|
||||||
|
private HttpServletResponse response;
|
||||||
|
|
||||||
|
@Path("manager/device") @PUT public boolean register(@FormParam("deviceId") String deviceId,
|
||||||
|
@FormParam("owner") String owner) {
|
||||||
|
|
||||||
|
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||||
|
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(deviceId);
|
||||||
|
deviceIdentifier.setType(AndroidSenseConstants.DEVICE_TYPE);
|
||||||
|
try {
|
||||||
|
if (deviceManagement.getDeviceManagementService().isEnrolled(deviceIdentifier)) {
|
||||||
|
response.setStatus(Response.Status.CONFLICT.getStatusCode());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
String name = owner + " android " + deviceId;
|
||||||
|
device.setName(name);
|
||||||
|
device.setType(AndroidSenseConstants.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) {
|
||||||
|
|
||||||
|
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(deviceId);
|
||||||
|
deviceIdentifier.setType(AndroidSenseConstants.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) {
|
||||||
|
|
||||||
|
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||||
|
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(deviceId);
|
||||||
|
deviceIdentifier.setType(AndroidSenseConstants.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(AndroidSenseConstants.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) {
|
||||||
|
|
||||||
|
DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT);
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(deviceId);
|
||||||
|
deviceIdentifier.setType(AndroidSenseConstants.DEVICE_TYPE);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier);
|
||||||
|
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
deviceManagement.endTenantFlow();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Service to push all the sensor data collected by the Android
|
||||||
|
Called by the Android device */
|
||||||
|
@Path("controller/sensordata") @POST @Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
public void pushSensorData(final DeviceJSON dataMsg, @Context HttpServletResponse response) {
|
||||||
|
|
||||||
|
PrivilegedCarbonContext.startTenantFlow();
|
||||||
|
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||||
|
ctx.setTenantDomain("carbon.super", true);
|
||||||
|
DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx
|
||||||
|
.getOSGiService(DeviceAnalyticsService.class, null);
|
||||||
|
|
||||||
|
SensorJSON[] sensorData = dataMsg.values;
|
||||||
|
String streamDef = null;
|
||||||
|
Object payloadData[] = null;
|
||||||
|
String sensorName = null;
|
||||||
|
|
||||||
|
for (SensorJSON sensor : sensorData) {
|
||||||
|
switch (sensor.key) {
|
||||||
|
case "battery":
|
||||||
|
streamDef = BATTERY_STREAM_DEFINITION;
|
||||||
|
payloadData = new Object[] { Float.parseFloat(sensor.value) };
|
||||||
|
sensorName = SENSOR_BATTERY;
|
||||||
|
break;
|
||||||
|
case "GPS":
|
||||||
|
streamDef = GPS_STREAM_DEFINITION;
|
||||||
|
String gpsValue = sensor.value;
|
||||||
|
String gpsValues[] = gpsValue.split(",");
|
||||||
|
Float gpsValuesF[] = new Float[2];
|
||||||
|
gpsValuesF[0] = Float.parseFloat(gpsValues[0]);
|
||||||
|
gpsValuesF[1] = Float.parseFloat(gpsValues[0]);
|
||||||
|
payloadData = gpsValuesF;
|
||||||
|
sensorName = SENSOR_GPS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
try {
|
||||||
|
int androidSensorId = Integer.parseInt(sensor.key);
|
||||||
|
|
||||||
|
if (androidSensorId == 2) {
|
||||||
|
streamDef = MAGNETIC_STREAM_DEFINITION;
|
||||||
|
String value = sensor.value;
|
||||||
|
String valuesM[] = value.split(",");
|
||||||
|
Float gValuesF[] = new Float[1];
|
||||||
|
gValuesF[0] = Float.parseFloat(valuesM[0]) * Float.parseFloat(valuesM[0]) * Float
|
||||||
|
.parseFloat(valuesM[0]);
|
||||||
|
payloadData = gValuesF;
|
||||||
|
sensorName = SENSOR_MAGNETIC;
|
||||||
|
} else if (androidSensorId == 5) {
|
||||||
|
streamDef = LIGHT_STREAM_DEFINITION;
|
||||||
|
sensorName = SENSOR_LIGHT;
|
||||||
|
payloadData = new Object[] { Float.parseFloat(sensor.value) };
|
||||||
|
}else if(androidSensorId == 1){
|
||||||
|
streamDef = ACCELEROMETER_STREAM_DEFINITION;
|
||||||
|
String value = sensor.value;
|
||||||
|
String valuesM[] = value.split(",");
|
||||||
|
Float gValuesF[] = new Float[1];
|
||||||
|
gValuesF[0] = Float.parseFloat(valuesM[0]) * Float.parseFloat(valuesM[0]) * Float
|
||||||
|
.parseFloat(valuesM[0]);
|
||||||
|
payloadData = gValuesF;
|
||||||
|
sensorName = SENSOR_ACCELEROMETER;
|
||||||
|
}
|
||||||
|
//Add the remaining sensor types.
|
||||||
|
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Object metdaData[] = { dataMsg.owner, AndroidSenseConstants.DEVICE_TYPE, dataMsg.deviceId, sensor.time };
|
||||||
|
|
||||||
|
if (streamDef != null && payloadData != null && payloadData.length > 0) {
|
||||||
|
try {
|
||||||
|
SensorDataManager.getInstance()
|
||||||
|
.setSensorRecord(dataMsg.deviceId, sensorName, sensor.value, sensor.time);
|
||||||
|
deviceAnalyticsService.publishEvent(streamDef, "1.0.0", metdaData, new Object[0], payloadData);
|
||||||
|
} catch (DataPublisherConfigurationException e) {
|
||||||
|
response.setStatus(Response.Status.UNSUPPORTED_MEDIA_TYPE.getStatusCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO below endpoints needs to be removed and cep websocket have to be added
|
||||||
|
@Path("controller/readlight")
|
||||||
|
@GET
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public SensorRecord readLight(
|
||||||
|
@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId,
|
||||||
|
@Context HttpServletResponse response) {
|
||||||
|
SensorRecord sensorRecord = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, SENSOR_LIGHT);
|
||||||
|
} catch (DeviceControllerException e) {
|
||||||
|
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setStatus(Response.Status.OK.getStatusCode());
|
||||||
|
return sensorRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("controller/readbattery")
|
||||||
|
@GET
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public SensorRecord readBattery(
|
||||||
|
@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId,
|
||||||
|
@Context HttpServletResponse response) {
|
||||||
|
SensorRecord sensorRecord = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, SENSOR_BATTERY);
|
||||||
|
} catch (DeviceControllerException e) {
|
||||||
|
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setStatus(Response.Status.OK.getStatusCode());
|
||||||
|
return sensorRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("controller/readgps")
|
||||||
|
@GET
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public SensorRecord readGPS(
|
||||||
|
@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId,
|
||||||
|
@Context HttpServletResponse response) {
|
||||||
|
SensorRecord sensorRecord = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, SENSOR_GPS);
|
||||||
|
} catch (DeviceControllerException e) {
|
||||||
|
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setStatus(Response.Status.OK.getStatusCode());
|
||||||
|
return sensorRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Path("controller/readmagnetic")
|
||||||
|
@GET
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public SensorRecord readMagnetic(@HeaderParam("owner") String owner,
|
||||||
|
@HeaderParam("deviceId") String deviceId,
|
||||||
|
@Context HttpServletResponse response) {
|
||||||
|
SensorRecord sensorRecord = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, SENSOR_MAGNETIC);
|
||||||
|
} catch (DeviceControllerException e) {
|
||||||
|
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setStatus(Response.Status.OK.getStatusCode());
|
||||||
|
return sensorRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Menaka
|
||||||
|
* Adding Accelerometer
|
||||||
|
* */
|
||||||
|
|
||||||
|
@Path("controller/readaccelerometer")
|
||||||
|
@GET
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public SensorRecord readAccelerometer(@HeaderParam("owner") String owner,
|
||||||
|
@HeaderParam("deviceId") String deviceId,
|
||||||
|
@Context HttpServletResponse response) {
|
||||||
|
SensorRecord sensorRecord = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, SENSOR_ACCELEROMETER);
|
||||||
|
} catch (DeviceControllerException e) {
|
||||||
|
response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setStatus(Response.Status.OK.getStatusCode());
|
||||||
|
return sensorRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.service.impl.util;
|
||||||
|
|
||||||
|
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
@XmlRootElement
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class DeviceJSON {
|
||||||
|
@XmlElement(required = true) public String owner;
|
||||||
|
@XmlElement(required = true) public String deviceId;
|
||||||
|
@XmlElement public SensorJSON[] values;
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.service.impl.util;
|
||||||
|
|
||||||
|
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
@XmlRootElement
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class SensorJSON {
|
||||||
|
|
||||||
|
@XmlElement public Long time;
|
||||||
|
@XmlElement public String key;
|
||||||
|
@XmlElement public String value;
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
<?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/android_sense/manager/device/register</Uri>
|
||||||
|
<UriTemplate>/manager/device/register/*</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>DELETE</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/manager/device/remove</Uri>
|
||||||
|
<UriTemplate>/manager/device/remove/*</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>POST</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/manager/device/update</Uri>
|
||||||
|
<UriTemplate>/manager/device/update/*</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/manager/device/{device_id}</Uri>
|
||||||
|
<UriTemplate>/manager/device/{device_id}</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/controller/sensordata</Uri>
|
||||||
|
<UriTemplate>/controller/sensordata</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/controller/readbattery</Uri>
|
||||||
|
<UriTemplate>/controller/readbattery</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/controller/readlight</Uri>
|
||||||
|
<UriTemplate>/controller/readlight</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/controller/readgps</Uri>
|
||||||
|
<UriTemplate>/controller/readgps</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/controller/readmagnetic</Uri>
|
||||||
|
<UriTemplate>/controller/readmagnetic</UriTemplate>
|
||||||
|
</Resource>
|
||||||
|
<Resource>
|
||||||
|
<AuthType>Any</AuthType>
|
||||||
|
<HttpVerb>GET</HttpVerb>
|
||||||
|
<Uri>http://localhost:9763/android_sense/controller/readaccelerometer</Uri>
|
||||||
|
<UriTemplate>/controller/readaccelerometer</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,39 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<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="AndroidSense" address="/">
|
||||||
|
<jaxrs:serviceBeans>
|
||||||
|
<bean id="AndroidSenseService"
|
||||||
|
class="org.wso2.carbon.device.mgt.iot.androidsense.service.impl.AndroidSenseService"/>
|
||||||
|
</jaxrs:serviceBeans>
|
||||||
|
<jaxrs:providers>
|
||||||
|
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
|
||||||
|
</jaxrs:providers>
|
||||||
|
</jaxrs:server>
|
||||||
|
|
||||||
|
</beans>
|
||||||
|
|
@ -0,0 +1,73 @@
|
|||||||
|
<?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>Android Sense</display-name>
|
||||||
|
<description>Android Sense</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>true</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>android_sense</param-value>
|
||||||
|
</context-param>
|
||||||
|
<context-param>
|
||||||
|
<param-name>managed-api-endpoint</param-name>
|
||||||
|
<param-value>http://localhost:9763/android_sense</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>/android_sense</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,120 @@
|
|||||||
|
<?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>
|
||||||
|
<artifactId>device-mgt-iot-androidsense</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.androidsense</artifactId>
|
||||||
|
<version>${carbon.iot.device.mgt.version}</version>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
<name>WSO2 Carbon - Android Sense Management Impl</name>
|
||||||
|
<description>WSO2 Carbon - Android Sense Management and Control Implementation</description>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<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.androidsense.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.common.*,
|
||||||
|
</Import-Package>
|
||||||
|
|
||||||
|
<Export-Package>
|
||||||
|
!org.wso2.carbon.device.mgt.iot.androidsense.plugin.internal,
|
||||||
|
org.wso2.carbon.device.mgt.iot.androidsense.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.device.mgt.iot</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.iot.common</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.plugin.constants;
|
||||||
|
|
||||||
|
public class AndroidSenseConstants {
|
||||||
|
|
||||||
|
public final static String DEVICE_TYPE = "android_sense";
|
||||||
|
public final static String DEVICE_PLUGIN_DEVICE_NAME = "DEVICE_NAME";
|
||||||
|
public final static String DEVICE_PLUGIN_DEVICE_ID = "ANDROID_DEVICE_ID";
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,278 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.plugin.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
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.DeviceManager;
|
||||||
|
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
||||||
|
import org.wso2.carbon.device.mgt.common.FeatureManager;
|
||||||
|
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.androidsense.plugin.impl.dao.AndroidSenseDAO;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dto.IotDevice;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.util.IotDeviceManagementUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This represents the Android implementation of DeviceManagerService.
|
||||||
|
*/
|
||||||
|
public class AndroidSenseManager implements DeviceManager {
|
||||||
|
|
||||||
|
private static final IotDeviceManagementDAOFactory iotDeviceManagementDAOFactory = new AndroidSenseDAO();
|
||||||
|
private static final Log log = LogFactory.getLog(AndroidSenseManager.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 Android device : " + device.getDeviceIdentifier());
|
||||||
|
}
|
||||||
|
AndroidSenseDAO.beginTransaction();
|
||||||
|
status = iotDeviceManagementDAOFactory.getIotDeviceDAO().addIotDevice(
|
||||||
|
iotDevice);
|
||||||
|
AndroidSenseDAO.commitTransaction();
|
||||||
|
} catch (IotDeviceManagementDAOException e) {
|
||||||
|
try {
|
||||||
|
AndroidSenseDAO.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 Android 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 Android device enrollment data");
|
||||||
|
}
|
||||||
|
AndroidSenseDAO.beginTransaction();
|
||||||
|
status = iotDeviceManagementDAOFactory.getIotDeviceDAO()
|
||||||
|
.updateIotDevice(iotDevice);
|
||||||
|
AndroidSenseDAO.commitTransaction();
|
||||||
|
} catch (IotDeviceManagementDAOException e) {
|
||||||
|
try {
|
||||||
|
AndroidSenseDAO.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 Android 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 Android device : " + deviceId);
|
||||||
|
}
|
||||||
|
AndroidSenseDAO.beginTransaction();
|
||||||
|
status = iotDeviceManagementDAOFactory.getIotDeviceDAO()
|
||||||
|
.deleteIotDevice(deviceId.getId());
|
||||||
|
AndroidSenseDAO.commitTransaction();
|
||||||
|
} catch (IotDeviceManagementDAOException e) {
|
||||||
|
try {
|
||||||
|
AndroidSenseDAO.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 Android 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 Android 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 Android 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 Android device : " + deviceId.getId());
|
||||||
|
}
|
||||||
|
IotDevice iotDevice = iotDeviceManagementDAOFactory.getIotDeviceDAO().
|
||||||
|
getIotDevice(deviceId.getId());
|
||||||
|
device = IotDeviceManagementUtil.convertToDevice(iotDevice);
|
||||||
|
} catch (IotDeviceManagementDAOException e) {
|
||||||
|
String msg = "Error while fetching the Android 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 requireDeviceAuthorization() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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 Android device : " + deviceIdentifier);
|
||||||
|
}
|
||||||
|
AndroidSenseDAO.beginTransaction();
|
||||||
|
status = iotDeviceManagementDAOFactory.getIotDeviceDAO()
|
||||||
|
.updateIotDevice(iotDevice);
|
||||||
|
AndroidSenseDAO.commitTransaction();
|
||||||
|
} catch (IotDeviceManagementDAOException e) {
|
||||||
|
try {
|
||||||
|
AndroidSenseDAO.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 Android 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 Android 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 Android devices.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementException(msg, e);
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.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.androidsense.plugin.constants.AndroidSenseConstants;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AndroidSenseManagerService implements DeviceManagementService {
|
||||||
|
private DeviceManager deviceManager;
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return AndroidSenseConstants.DEVICE_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getProviderTenantDomain() {
|
||||||
|
return "carbon.super";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSharedWithAllTenants() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getSharedTenantsDomain() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() throws DeviceManagementException {
|
||||||
|
this.deviceManager=new AndroidSenseManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
@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 domain, int pageNumber, int size)
|
||||||
|
throws ApplicationManagementException {
|
||||||
|
return new Application[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateApplicationStatus(DeviceIdentifier deviceId, Application application,
|
||||||
|
String status) throws ApplicationManagementException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getApplicationStatus(DeviceIdentifier deviceId, 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 {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.plugin.impl.dao;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.androidsense.plugin.constants.AndroidSenseConstants;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.androidsense.plugin.impl.dao.impl.AndroidSenseDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceDAO;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceManagementDAOFactoryInterface;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class AndroidSenseDAO extends IotDeviceManagementDAOFactory implements IotDeviceManagementDAOFactoryInterface {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(AndroidSenseDAO.class);
|
||||||
|
static DataSource dataSource;
|
||||||
|
private static ThreadLocal<Connection> currentConnection = new ThreadLocal<Connection>();
|
||||||
|
|
||||||
|
public AndroidSenseDAO() {
|
||||||
|
initAndroidDAO();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initAndroidDAO() {
|
||||||
|
dataSource = getDataSourceMap().get(AndroidSenseConstants.DEVICE_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public IotDeviceDAO getIotDeviceDAO() {
|
||||||
|
return new AndroidSenseDAOImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
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.get() == null) {
|
||||||
|
try {
|
||||||
|
currentConnection.set(dataSource.getConnection());
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new IotDeviceManagementDAOException("Error occurred while retrieving data source connection", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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,236 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.plugin.impl.dao.impl;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.androidsense.plugin.constants.AndroidSenseConstants;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.androidsense.plugin.impl.dao.AndroidSenseDAO;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceDAO;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.IotDeviceManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.util.iotdevice.dao.util.IotDeviceManagementDAOUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements IotDeviceDAO for android Devices.
|
||||||
|
*/
|
||||||
|
public class AndroidSenseDAOImpl implements IotDeviceDAO{
|
||||||
|
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(AndroidSenseDAOImpl.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IotDevice getIotDevice(String iotDeviceId)
|
||||||
|
throws IotDeviceManagementDAOException {
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
IotDevice iotDevice = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
try {
|
||||||
|
conn = AndroidSenseDAO.getConnection();
|
||||||
|
String selectDBQuery =
|
||||||
|
"SELECT ANDROID_DEVICE_ID, DEVICE_NAME" +
|
||||||
|
" FROM ANDROID_SENSE_DEVICE WHERE ANDROID_DEVICE_ID = ?";
|
||||||
|
stmt = conn.prepareStatement(selectDBQuery);
|
||||||
|
stmt.setString(1, iotDeviceId);
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
|
||||||
|
if (resultSet.next()) {
|
||||||
|
iotDevice = new IotDevice();
|
||||||
|
iotDevice.setIotDeviceName(resultSet.getString(
|
||||||
|
AndroidSenseConstants.DEVICE_PLUGIN_DEVICE_NAME));
|
||||||
|
Map<String, String> propertyMap = new HashMap<String, String>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
iotDevice.setDeviceProperties(propertyMap);
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Android device " + iotDeviceId + " data has been fetched from " +
|
||||||
|
"Android database.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while fetching Android device : '" + iotDeviceId + "'";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new IotDeviceManagementDAOException(msg, e);
|
||||||
|
} finally {
|
||||||
|
IotDeviceManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
AndroidSenseDAO.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
return iotDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addIotDevice(IotDevice iotDevice)
|
||||||
|
throws IotDeviceManagementDAOException {
|
||||||
|
boolean status = false;
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
conn = AndroidSenseDAO.getConnection();
|
||||||
|
String createDBQuery =
|
||||||
|
"INSERT INTO ANDROID_SENSE_DEVICE(ANDROID_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("Android device " + iotDevice.getIotDeviceId() + " data has been" +
|
||||||
|
" added to the Android database.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while adding the Android device '" +
|
||||||
|
iotDevice.getIotDeviceId() + "' to the Android 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 = AndroidSenseDAO.getConnection();
|
||||||
|
String updateDBQuery =
|
||||||
|
"UPDATE ANDROID_SENSE_DEVICE SET DEVICE_NAME = ? WHERE ANDROID_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("Android device " + iotDevice.getIotDeviceId() + " data has been" +
|
||||||
|
" modified.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while modifying the Android 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 = AndroidSenseDAO.getConnection();
|
||||||
|
String deleteDBQuery =
|
||||||
|
"DELETE FROM ANDROID_SENSE_DEVICE WHERE ANDROID_DEVICE_ID = ?";
|
||||||
|
stmt = conn.prepareStatement(deleteDBQuery);
|
||||||
|
stmt.setString(1, iotDeviceId);
|
||||||
|
int rows = stmt.executeUpdate();
|
||||||
|
if (rows > 0) {
|
||||||
|
status = true;
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Android device " + iotDeviceId + " data has deleted" +
|
||||||
|
" from the Android database.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while deleting Android 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 = AndroidSenseDAO.getConnection();
|
||||||
|
String selectDBQuery =
|
||||||
|
"SELECT ANDROID_DEVICE_ID, DEVICE_NAME " +
|
||||||
|
"FROM ANDROID_SENSE_DEVICE";
|
||||||
|
stmt = conn.prepareStatement(selectDBQuery);
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
iotDevice = new IotDevice();
|
||||||
|
iotDevice.setIotDeviceId(resultSet.getString(AndroidSenseConstants.DEVICE_PLUGIN_DEVICE_ID));
|
||||||
|
iotDevice.setIotDeviceName(resultSet.getString(AndroidSenseConstants.DEVICE_PLUGIN_DEVICE_NAME));
|
||||||
|
|
||||||
|
Map<String, String> propertyMap = new HashMap<String, String>();
|
||||||
|
|
||||||
|
iotDevice.setDeviceProperties(propertyMap);
|
||||||
|
iotDevices.add(iotDevice);
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("All Android device details have fetched from Android database.");
|
||||||
|
}
|
||||||
|
return iotDevices;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while fetching all Android device data'";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new IotDeviceManagementDAOException(msg, e);
|
||||||
|
} finally {
|
||||||
|
IotDeviceManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
AndroidSenseDAO.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.plugin.impl.util;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains utility methods used by Android plugin.
|
||||||
|
*/
|
||||||
|
public class AndroidSenseUtils {
|
||||||
|
|
||||||
|
private static Log log = LogFactory.getLog(AndroidSenseUtils.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,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.iot.androidsense.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.androidsense.plugin.impl.AndroidSenseManagerService;
|
||||||
|
import org.wso2.carbon.device.mgt.iot.common.service.DeviceTypeService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @scr.component name="org.wso2.carbon.device.mgt.iot.android.internal.AndroidSenseManagementServiceComponent"
|
||||||
|
* immediate="true"
|
||||||
|
* @scr.reference name="wso2.carbon.device.mgt.iot.common.DeviceTypeService"
|
||||||
|
* interface="org.wso2.carbon.device.mgt.iot.common.service.DeviceTypeService"
|
||||||
|
* cardinality="1..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setDeviceTypeService"
|
||||||
|
* unbind="unsetDeviceTypeService"
|
||||||
|
*/
|
||||||
|
public class AndroidSenseManagementServiceComponent {
|
||||||
|
|
||||||
|
|
||||||
|
private ServiceRegistration androidServiceRegRef;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(AndroidSenseManagementServiceComponent.class);
|
||||||
|
protected void activate(ComponentContext ctx) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Activating Android Device Management Service Component");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
BundleContext bundleContext = ctx.getBundleContext();
|
||||||
|
|
||||||
|
|
||||||
|
androidServiceRegRef =
|
||||||
|
bundleContext.registerService(DeviceManagementService.class.getName(), new AndroidSenseManagerService(), null);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Android Device Management Service Component has been successfully activated");
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("Error occurred while activating Android Device Management Service Component", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void deactivate(ComponentContext ctx) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("De-activating Android Device Management Service Component");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (androidServiceRegRef != null) {
|
||||||
|
androidServiceRegRef.unregister();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug(
|
||||||
|
"Android Device Management Service Component has been successfully de-activated");
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("Error occurred while de-activating Android 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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue