- {{#if geoServicesEnabled}}
-
-
-
- Alerts Stream
- Spatial Stream
-
-
- {{else}}
-
- {{/if}}
+
@@ -693,13 +679,6 @@
Information
- {{#if geoServicesEnabled}}
-
Speed km/h
-
Heading
-
-
-
- {{/if}}
@@ -891,10 +870,6 @@
{{js "js/typeahead.bundle.min.js" }}
{{js "js/geo_remote.js" }}
{{js "js/app.js" }}
- {{js "js/geo_exit_fence.js" }}
- {{js "js/geo_within.js" }}
- {{js "js/geo_stationary.js" }}
- {{js "js/geo_speed.js" }}
{{!js "js/jquery/jquery-ui.min.js" }}
@@ -913,46 +888,12 @@
{{js "js/geo_fencing.js" }}
+
{{/zone}}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/geo_remote.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/geo_remote.js
index af47b6db21..ce78a0a66b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/geo_remote.js
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/geo_remote.js
@@ -165,7 +165,9 @@ function setSpeedAlert() {
noty({text: message, type: 'error'});
} else {
data = {
- 'parseData': JSON.stringify({'speedAlertValue': speedAlertValue, 'deviceId': deviceId}), // parseKey : parseValue pair , this key pair is replace with the key in the template file
+ 'parseData': JSON.stringify({
+ 'speedAlertValue': speedAlertValue,
+ 'deviceId': deviceId}), // parseKey : parseValue pair , this key pair is replace with the key in the template file
'executionPlan': 'Speed',
'customName': null,
'cepAction': 'edit',
@@ -221,7 +223,6 @@ function setWithinAlert(leafletId) {
var data = {
'parseData': JSON.stringify({
'geoFenceGeoJSON': selectedAreaGeoJson,
- 'executionPlanName': createExecutionPlanName(queryName, "WithIn", deviceId),
'areaName': areaName,
'deviceId': deviceId
}),
@@ -280,7 +281,6 @@ function setExitAlert(leafletId) {
var data = {
'parseData': JSON.stringify({
'geoFenceGeoJSON': selectedAreaGeoJson,
- 'executionPlanName': createExecutionPlanName(queryName, "Exit", deviceId),
'areaName': areaName,
'deviceId': deviceId
}),
@@ -352,7 +352,6 @@ function setStationeryAlert(leafletId) {
var data = {
'parseData': JSON.stringify({
'geoFenceGeoJSON': selectedProcessedAreaGeoJson,
- 'executionPlanName': createExecutionPlanName(queryName, "Stationery", deviceId),
'stationeryName': stationeryName,
'stationeryTime': time,
'fluctuationRadius': fluctuationRadius
@@ -427,7 +426,6 @@ function setTrafficAlert(leafletId) {
var data = {
'parseData': JSON.stringify({
'geoFenceGeoJSON': selectedProcessedAreaGeoJson,
- 'executionPlanName': createExecutionPlanName(queryName, "Traffic", deviceId),
'areaName': areaName
}),
'executionPlan': 'Traffic',
@@ -569,21 +567,6 @@ function setProximityAlert() {
}
}
-// TODO:this is not a remote call , move this to application.js
-function createExecutionPlanName(queryName, id) {
-
- if (id == "WithIn") {
- return 'Geo-ExecutionPlan-Within' + (queryName ? '_' + queryName : '') + "---" + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
- } else if (id == "Exit") {
- return 'Geo-ExecutionPlan-Exit' + (queryName ? '_' + queryName : '') + "---" + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
- } else if (id == "Stationery") {
- return 'Geo-ExecutionPlan-Stationery' + (queryName ? '_' + queryName : '') + "---" + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
- } else if (id == "Traffic") {
- return 'Geo-ExecutionPlan-Traffic' + (queryName ? '_' + queryName : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
- }
-
-}
-
// TODO:this is not a remote call , move this to application.js
function closeAll() {
$('.modal').modal('hide');
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/websocket.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/websocket.js
index 83f0fbd0c3..d25e5dab81 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/websocket.js
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.geo-devices/public/js/websocket.js
@@ -68,25 +68,21 @@ function initializeOnAlertWebSocket() {
}
function initializeGeoLocation(geoFencingEnabled) {
- if (true) {
- var geoCharts = $("#geo-charts");
- var wsEndPoint = geoCharts.data("ws-endpoint");
- wsToken = geoCharts.data("ws-token");
- geoPublicUri = geoCharts.data("geo-public-uri");
- geoPublicUri = geoCharts.data("geo-public-uri");
- webSocketURL = wsEndPoint + "iot.per.device.stream.geo.FusedSpatialEvent/1.0.0?" + "&websocketToken=" + wsToken;
- alertWebSocketURL = wsEndPoint + "iot.per.device.stream.geo.AlertsNotifications/1.0.0?" + "&websocketToken=" + wsToken;
- $("#proximity_alert").hide();
-
- if (geoFencingEnabled) {
- disconnect();
- initializeSpatialStreamWebSocket();
- initializeOnAlertWebSocket();
- }
- initialLoad(geoFencingEnabled);
- } else {
- noty({text: 'Invalid Access! No device information provided to track!', type: 'error'});
+ var geoCharts = $("#geo-charts");
+ var wsEndPoint = geoCharts.data("ws-endpoint");
+ wsToken = geoCharts.data("ws-token");
+ geoPublicUri = geoCharts.data("geo-public-uri");
+ geoPublicUri = geoCharts.data("geo-public-uri");
+ webSocketURL = wsEndPoint + "iot.per.device.stream.geo.FusedSpatialEvent/1.0.0?" + "&websocketToken=" + wsToken;
+ alertWebSocketURL = wsEndPoint + "iot.per.device.stream.geo.AlertNotifications/1.0.0?" + "&websocketToken=" + wsToken;
+ $("#proximity_alert").hide();
+
+ if (geoFencingEnabled) {
+ disconnect();
+ initializeSpatialStreamWebSocket();
+ initializeOnAlertWebSocket();
}
+ initialLoad(geoFencingEnabled);
}
function disconnect(){
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GeoLocationBasedService.java b/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GeoLocationBasedService.java
deleted file mode 100644
index 76796bbeb6..0000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GeoLocationBasedService.java
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * Copyright (c) 2017, 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.jaxrs.service.api;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.Extension;
-import io.swagger.annotations.ExtensionProperty;
-import io.swagger.annotations.Info;
-import io.swagger.annotations.ResponseHeader;
-import io.swagger.annotations.SwaggerDefinition;
-import io.swagger.annotations.Tag;
-import org.wso2.carbon.apimgt.annotations.api.Scope;
-import org.wso2.carbon.apimgt.annotations.api.Scopes;
-import org.wso2.carbon.device.mgt.common.geo.service.Alert;
-import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
-
-import javax.validation.Valid;
-import javax.validation.constraints.Size;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Response;
-
-@SwaggerDefinition(
- info = @Info(
- version = "0.9.0",
- title = "",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = "name", value = "geo_services"),
- @ExtensionProperty(name = "context", value = "/api/device-mgt/v0.9/geo-services"),
- })
- }
- ),
- tags = {
- @Tag(name = "device_management", description = "")
- }
-)
-@Scopes(
- scopes = {
- @Scope(
- name = "View Analytics",
- description = "",
- key = "perm:geo-service:analytics-view",
- permissions = {"/device-mgt/devices/owning-device/view-analytics"}
- ),
- @Scope(
- name = "Manage Alerts",
- description = "",
- key = "perm:geo-service:alerts-manage",
- permissions = {"/device-mgt/devices/owning-device/manage-alerts"}
- )
- }
-)
-@Path("/geo-services")
-@Api(value = "Geo Service",
- description = "This carries all the resources related to the geo service functionalities.")
-public interface GeoLocationBasedService {
- /**
- * Retrieve Analytics for the device type
- */
- @GET
- @Path("stats/{deviceType}/{deviceId}")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "GET",
- value = "Retrieve Analytics for the device type",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:analytics-view")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body"),
- @ResponseHeader(
- name = "Last-Modified",
- description = "Date and time the resource was last modified.\n" +
- "Used by caches, or in conditional requests."),
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid Device Identifiers found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response getGeoDeviceStats(
- @ApiParam(
- name = "deviceId",
- value = "The registered device Id.",
- required = true)
- @PathParam("deviceId") String deviceId,
- @ApiParam(
- name = "device-type",
- value = "The device type, such as ios, android or windows.",
- required = true)
- @PathParam("deviceType")
- @Size(max = 45)
- String deviceType,
- @ApiParam(
- name = "from",
- value = "Get stats from what time",
- required = true)
- @QueryParam("from") long from,
- @ApiParam(
- name = "to",
- value = "Get stats up to what time",
- required = true)
- @QueryParam("to") long to);
-
- /**
- * Get data to show device locations in a map
- */
- @GET
- @Path("stats/device-locations")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "GET",
- value = "Retrieve locations of devices",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:analytics-view")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body"),
- @ResponseHeader(
- name = "Last-Modified",
- description = "Date and time the resource was last modified.\n" +
- "Used by caches, or in conditional requests."),
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid parameters found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response getGeoDeviceLocations(
- @ApiParam(
- name = "minLat",
- value = "minimum latitude",
- required = true)
- @QueryParam("minLat") double minLat,
- @ApiParam(
- name = "maxLat",
- value = "maxmimum latitude",
- required = true)
- @QueryParam("maxLat") double maxLat,
- @ApiParam(
- name = "minLong",
- value = "minimum longitude",
- required = true)
- @QueryParam("minLong") double minLong,
- @ApiParam(
- name = "maxLong",
- value = "maximum longitudeude",
- required = true)
- @QueryParam("maxLong") double maxLong,
- @ApiParam(
- name = "zoom",
- value = "zoom level",
- required = true)
- @QueryParam("zoom") int zoom);
-
-
- /**
- * Create Geo alerts
- */
- @POST
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "GET",
- value = "Create Geo alerts for the device",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:alerts-manage")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body")
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid Device Identifiers found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response createGeoAlerts(
- @ApiParam(
- name = "alert",
- value = "The alert object",
- required = true)
- @Valid Alert alert,
- @ApiParam(
- name = "deviceId",
- value = "The registered device Id.",
- required = true)
- @PathParam("deviceId") String deviceId,
- @ApiParam(
- name = "device-type",
- value = "The device type, such as ios, android or windows.",
- required = true)
- @PathParam("deviceType")
- @Size(max = 45)
- String deviceType,
- @ApiParam(
- name = "alertType",
- value = "The alert type, such as Within, Speed, Stationary",
- required = true)
- @PathParam("alertType") String alertType);
-
- /**
- * Update Geo alerts
- */
- @PUT
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "GET",
- value = "Update Geo alerts for the device",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:alerts-manage")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body")
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid Device Identifiers found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response updateGeoAlerts(
- @ApiParam(
- name = "alert",
- value = "The alert object",
- required = true)
- @Valid Alert alert,
- @ApiParam(
- name = "deviceId",
- value = "The registered device Id.",
- required = true)
- @PathParam("deviceId") String deviceId,
- @ApiParam(
- name = "device-type",
- value = "The device type, such as ios, android or windows.",
- required = true)
- @PathParam("deviceType")
- @Size(max = 45)
- String deviceType,
- @ApiParam(
- name = "alertType",
- value = "The alert type, such as Within, Speed, Stationary",
- required = true)
- @PathParam("alertType") String alertType);
-
- /**
- * Retrieve Geo alerts
- */
- @GET
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "GET",
- value = "Retrieve Geo alerts for the device",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:alerts-manage")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body"),
- @ResponseHeader(
- name = "Last-Modified",
- description = "Date and time the resource was last modified.\n" +
- "Used by caches, or in conditional requests.")
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid Device Identifiers found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response getGeoAlerts(
- @ApiParam(
- name = "deviceId",
- value = "The registered device Id.",
- required = true)
- @PathParam("deviceId") String deviceId,
- @ApiParam(
- name = "device-type",
- value = "The device type, such as ios, android or windows.",
- required = true)
- @PathParam("deviceType")
- @Size(max = 45)
- String deviceType,
- @ApiParam(
- name = "alertType",
- value = "The alert type, such as Within, Speed, Stationary",
- required = true)
- @PathParam("alertType") String alertType);
-
- /**
- * Retrieve Geo alerts history
- */
- @GET
- @Path("alerts/history/{deviceType}/{deviceId}")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "GET",
- value = "Retrieve Geo alerts history for the device",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:alerts-manage")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body"),
- @ResponseHeader(
- name = "Last-Modified",
- description = "Date and time the resource was last modified.\n" +
- "Used by caches, or in conditional requests.")
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid Device Identifiers found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response getGeoAlertsHistory(
- @ApiParam(
- name = "deviceId",
- value = "The registered device Id.",
- required = true)
- @PathParam("deviceId") String deviceId,
- @ApiParam(
- name = "device-type",
- value = "The device type, such as ios, android or windows.",
- required = true)
- @PathParam("deviceType")
- @Size(max = 45)
- String deviceType,
- @ApiParam(
- name = "from",
- value = "Get stats from what time",
- required = true)
- @QueryParam("from") long from,
- @ApiParam(
- name = "to",
- value = "Get stats up to what time",
- required = true)
- @QueryParam("to") long to);
-
- @DELETE
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @ApiOperation(
- consumes = "application/json",
- produces = "application/json",
- httpMethod = "DELETE",
- value = "Deletes Geo alerts for the device",
- notes = "",
- response = Response.class,
- tags = "Geo Service Management",
- extensions = {
- @Extension(properties = {
- @ExtensionProperty(name = Constants.SCOPE, value = "perm:geo-service:alerts-manage")
- })
- }
- )
- @ApiResponses(value = {
- @ApiResponse(
- code = 200,
- message = "OK.",
- response = Response.class,
- responseHeaders = {
- @ResponseHeader(
- name = "Content-Type",
- description = "The content type of the body")
- }),
- @ApiResponse(
- code = 400,
- message = "Bad Request. \n Invalid Device Identifiers found.",
- response = Response.class),
- @ApiResponse(
- code = 401,
- message = "Unauthorized. \n Unauthorized request."),
- @ApiResponse(
- code = 500,
- message = "Internal Server Error. \n Error on retrieving stats",
- response = Response.class)
- })
- Response removeGeoAlerts(
- @ApiParam(
- name = "deviceId",
- value = "The registered device Id.",
- required = true)
- @PathParam("deviceId") String deviceId,
- @ApiParam(
- name = "deviceType",
- value = "The device type, such as ios, android or windows.",
- required = true)
- @PathParam("deviceType") String deviceType,
- @ApiParam(
- name = "alertType",
- value = "The alert type, such as Within, Speed, Stationary",
- required = true)
- @PathParam("alertType") String alertType,
- @ApiParam(
- name = "queryName",
- value = "The query name.",
- required = true)
- @QueryParam("queryName") String queryName);
-}
-
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GeoLocationBasedServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GeoLocationBasedServiceImpl.java
deleted file mode 100644
index 34fbaae517..0000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GeoLocationBasedServiceImpl.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright (c) 2017, 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.jaxrs.service.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
-import org.wso2.carbon.analytics.api.AnalyticsDataAPIUtil;
-import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
-import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
-import org.wso2.carbon.analytics.dataservice.commons.SortByField;
-import org.wso2.carbon.analytics.dataservice.commons.SortType;
-import org.wso2.carbon.analytics.datasource.commons.Record;
-import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
-import org.wso2.carbon.context.CarbonContext;
-import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
-import org.wso2.carbon.device.mgt.common.DeviceManagementConstants.GeoServices;
-import org.wso2.carbon.device.mgt.common.DeviceManagementException;
-import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
-import org.wso2.carbon.device.mgt.common.geo.service.*;
-import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants;
-import org.wso2.carbon.device.mgt.core.geo.GeoCluster;
-import org.wso2.carbon.device.mgt.core.geo.geoHash.GeoCoordinate;
-import org.wso2.carbon.device.mgt.core.geo.geoHash.geoHashStrategy.GeoHashLengthStrategy;
-import org.wso2.carbon.device.mgt.core.geo.geoHash.geoHashStrategy.ZoomGeoHashLengthStrategy;
-import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
-import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
-import org.wso2.carbon.device.mgt.jaxrs.service.api.GeoLocationBasedService;
-import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
-import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
-import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil;
-import org.wso2.carbon.user.api.UserStoreException;
-import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * The api for
- */
-public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
-
- private static Log log = LogFactory.getLog(GeoLocationBasedServiceImpl.class);
-
- @Path("stats/{deviceType}/{deviceId}")
- @GET
- @Consumes("application/json")
- @Produces("application/json")
- public Response getGeoDeviceStats(@PathParam("deviceId") String deviceId,
- @PathParam("deviceType") String deviceType,
- @QueryParam("from") long from, @QueryParam("to") long to) {
- try {
- if (!DeviceManagerUtil.isPublishLocationResponseEnabled()) {
- return Response.status(Response.Status.BAD_REQUEST.getStatusCode())
- .entity("Unable to retrive Geo Device stats. Geo Data publishing does not enabled.").build();
- }
- } catch (DeviceManagementException e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(e.getMessage()).build();
- }
- String tableName = "IOT_PER_DEVICE_STREAM_GEO_FUSEDSPATIALEVENT";
- String fromDate = String.valueOf(from);
- String toDate = String.valueOf(to);
- String query = "id:" + deviceId + " AND type:" + deviceType;
- if (from != 0 || to != 0) {
- query += " AND timeStamp : [" + fromDate + " TO " + toDate + "]";
- }
- try {
- if (!DeviceMgtAPIUtils.getDeviceAccessAuthorizationService().isUserAuthorized(
- new DeviceIdentifier(deviceId, deviceType),
- DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- }
- List
sortByFields = new ArrayList<>();
- SortByField sortByField = new SortByField("timeStamp", SortType.ASC);
- sortByFields.add(sortByField);
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername());
-
- try {
- String tenantDomain = MultitenantUtils.getTenantDomain(authorizedUser);
- int tenantId = DeviceMgtAPIUtils.getRealmService().getTenantManager().getTenantId(tenantDomain);
- AnalyticsDataAPI analyticsDataAPI = DeviceMgtAPIUtils.getAnalyticsDataAPI();
- List searchResults = analyticsDataAPI.search(tenantId, tableName, query,
- 0,
- 100,
- sortByFields);
- List events = getEventBeans(analyticsDataAPI, tenantId, tableName, new ArrayList(),
- searchResults);
- return Response.ok().entity(events).build();
- } catch (AnalyticsException | UserStoreException e) {
- log.error("Failed to perform search on table: " + tableName + " : " + e.getMessage(), e);
- throw DeviceMgtUtil.buildBadRequestException(
- Constants.ErrorMessages.STATUS_BAD_REQUEST_MESSAGE_DEFAULT);
- }
- } catch (DeviceAccessAuthorizationException e) {
- log.error(e.getErrorMessage());
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- }
-
- @Path("stats/device-locations")
- @GET
- @Consumes("application/json")
- @Produces("application/json")
- public Response getGeoDeviceLocations(
- @QueryParam("minLat") double minLat,
- @QueryParam("maxLat") double maxLat,
- @QueryParam("minLong") double minLong,
- @QueryParam("maxLong") double maxLong,
- @QueryParam("zoom") int zoom) {
-
- GeoHashLengthStrategy geoHashLengthStrategy = new ZoomGeoHashLengthStrategy();
- GeoCoordinate southWest = new GeoCoordinate(minLat, minLong);
- GeoCoordinate northEast = new GeoCoordinate(maxLat, maxLong);
- int geohashLength = geoHashLengthStrategy.getGeohashLength(southWest, northEast, zoom);
- DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService();
- List geoClusters;
- try {
- geoClusters = deviceManagementService.findGeoClusters(southWest, northEast, geohashLength);
- } catch (DeviceManagementException e) {
- String msg = "Error occurred while retrieving geo clusters ";
- log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- return Response.ok().entity(geoClusters).build();
-
- }
-
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @POST
- @Consumes("application/json")
- @Produces("application/json")
- public Response createGeoAlerts(Alert alert, @PathParam("deviceId") String deviceId,
- @PathParam("deviceType") String deviceType,
- @PathParam("alertType") String alertType) {
- try {
- if (!DeviceMgtAPIUtils.getDeviceAccessAuthorizationService().isUserAuthorized(
- new DeviceIdentifier(deviceId, deviceType),
- DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- }
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- DeviceIdentifier identifier = new DeviceIdentifier();
- identifier.setId(deviceId);
- identifier.setType(deviceType);
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
- geoService.createGeoAlert(alert, identifier, alertType);
- return Response.ok().build();
- } catch (DeviceAccessAuthorizationException | GeoLocationBasedServiceException e) {
- String error = "Error occurred while creating the geo alert for " + deviceType + " with id: " + deviceId;
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- } catch (AlertAlreadyExistException e) {
- String error = "A geo alert with this name already exists.";
- log.error(error,e);
- return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
- }
- }
-
-
- @Path("alerts/{alertType}")
- @POST
- @Consumes("application/json")
- @Produces("application/json")
- public Response createGeoAlertsForGeoClusters(Alert alert, @PathParam("alertType") String alertType) {
- try {
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
- geoService.createGeoAlert(alert, alertType);
- return Response.ok().build();
- } catch (GeoLocationBasedServiceException e) {
- String error = "Error occurred while creating " + alertType + " alert";
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- } catch (AlertAlreadyExistException e) {
- String error = "A geo alert with this name already exists.";
- log.error(error,e);
- return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
- }
- }
-
-
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @PUT
- @Consumes("application/json")
- @Produces("application/json")
- public Response updateGeoAlerts(Alert alert, @PathParam("deviceId") String deviceId,
- @PathParam("deviceType") String deviceType,
- @PathParam("alertType") String alertType) {
- try {
- if (!DeviceMgtAPIUtils.getDeviceAccessAuthorizationService().isUserAuthorized(
- new DeviceIdentifier(deviceId, deviceType),
- DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- }
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- DeviceIdentifier identifier = new DeviceIdentifier();
- identifier.setId(deviceId);
- identifier.setType(deviceType);
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
- geoService.updateGeoAlert(alert, identifier, alertType);
- return Response.ok().build();
- } catch (DeviceAccessAuthorizationException | GeoLocationBasedServiceException e) {
- String error = "Error occurred while creating the geo alert for " + deviceType + " with id: " + deviceId;
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- } catch (AlertAlreadyExistException e) {
- String error = "A geo alert with this name already exists.";
- log.error(error,e);
- return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
- }
- }
-
- @Path("alerts/{alertType}")
- @PUT
- @Consumes("application/json")
- @Produces("application/json")
- public Response updateGeoAlertsForGeoClusters(Alert alert, @PathParam("alertType") String alertType) {
- try {
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
- geoService.updateGeoAlert(alert, alertType);
- return Response.ok().build();
- } catch (GeoLocationBasedServiceException e) {
- String error = "Error occurred while updating the geo alert for geo clusters";
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- } catch (AlertAlreadyExistException e) {
- String error = "A geo alert with this name already exists.";
- log.error(error,e);
- return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
- }
- }
-
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @DELETE
- @Consumes("application/json")
- @Produces("application/json")
- public Response removeGeoAlerts(@PathParam("deviceId") String deviceId,
- @PathParam("deviceType") String deviceType,
- @PathParam("alertType") String alertType,
- @QueryParam("queryName") String queryName) {
- try {
- if (!DeviceMgtAPIUtils.getDeviceAccessAuthorizationService().isUserAuthorized(
- new DeviceIdentifier(deviceId, deviceType),
- DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- }
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- DeviceIdentifier identifier = new DeviceIdentifier();
- identifier.setId(deviceId);
- identifier.setType(deviceType);
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
- geoService.removeGeoAlert(alertType, identifier, queryName);
- return Response.ok().build();
- } catch (DeviceAccessAuthorizationException | GeoLocationBasedServiceException e) {
- String error = "Error occurred while removing the geo alert for " + deviceType + " with id: " + deviceId;
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- }
- }
-
- @Path("alerts/{alertType}")
- @DELETE
- @Consumes("application/json")
- @Produces("application/json")
- public Response removeGeoAlertsForGeoClusters(@PathParam("alertType") String alertType, @QueryParam("queryName") String queryName) {
- try {
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
- geoService.removeGeoAlert(alertType, queryName);
- return Response.ok().build();
- } catch (GeoLocationBasedServiceException e) {
- String error = "Error occurred while removing the geo alert for geo clusters";
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- }
- }
-
- @Path("alerts/{alertType}/{deviceType}/{deviceId}")
- @GET
- @Consumes("application/json")
- @Produces("application/json")
- public Response getGeoAlerts(@PathParam("deviceId") String deviceId,
- @PathParam("deviceType") String deviceType,
- @PathParam("alertType") String alertType) {
- try {
- if (!DeviceMgtAPIUtils.getDeviceAccessAuthorizationService().isUserAuthorized(
- new DeviceIdentifier(deviceId, deviceType),
- DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- }
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- DeviceIdentifier identifier = new DeviceIdentifier();
- identifier.setId(deviceId);
- identifier.setType(deviceType);
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
-
- if (GeoServices.ALERT_TYPE_WITHIN.equals(alertType)) {
- List alerts = geoService.getWithinAlerts(identifier);
- return Response.ok().entity(alerts).build();
- } else if (GeoServices.ALERT_TYPE_EXIT.equals(alertType)) {
- List alerts = geoService.getExitAlerts(identifier);
- return Response.ok().entity(alerts).build();
- } else if (GeoServices.ALERT_TYPE_SPEED.equals(alertType)) {
- String result = geoService.getSpeedAlerts(identifier);
- return Response.ok().entity(result).build();
- } else if (GeoServices.ALERT_TYPE_PROXIMITY.equals(alertType)) {
- String result = geoService.getProximityAlerts(identifier);
- return Response.ok().entity(result).build();
- } else if (GeoServices.ALERT_TYPE_STATIONARY.equals(alertType)) {
- List alerts = geoService.getStationaryAlerts(identifier);
- return Response.ok().entity(alerts).build();
- } else if (GeoServices.ALERT_TYPE_TRAFFIC.equals(alertType)) {
- List alerts = geoService.getTrafficAlerts(identifier);
- return Response.ok().entity(alerts).build();
- }
- return null;
- } catch (DeviceAccessAuthorizationException | GeoLocationBasedServiceException e) {
- String error = "Error occurred while getting the geo alerts for " + deviceType + " with id: " + deviceId;
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- }
- }
-
- @Path("alerts/{alertType}")
- @GET
- @Consumes("application/json")
- @Produces("application/json")
- public Response getGeoAlertsForGeoClusters(@PathParam("alertType") String alertType) {
- try {
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername()
- );
-
- GeoLocationProviderService geoService = DeviceMgtAPIUtils.getGeoService();
-
- if (GeoServices.ALERT_TYPE_WITHIN.equals(alertType)) {
- List alerts = geoService.getWithinAlerts();
- return Response.ok().entity(alerts).build();
- } else if (GeoServices.ALERT_TYPE_EXIT.equals(alertType)) {
- List alerts = geoService.getExitAlerts();
- return Response.ok().entity(alerts).build();
- } else if (GeoServices.ALERT_TYPE_SPEED.equals(alertType)) {
- String result = geoService.getSpeedAlerts();
- return Response.ok().entity(result).build();
- } else if (GeoServices.ALERT_TYPE_PROXIMITY.equals(alertType)) {
- String result = geoService.getProximityAlerts();
- return Response.ok().entity(result).build();
- } else if (GeoServices.ALERT_TYPE_STATIONARY.equals(alertType)) {
- List alerts = geoService.getStationaryAlerts();
- return Response.ok().entity(alerts).build();
- } else if (GeoServices.ALERT_TYPE_TRAFFIC.equals(alertType)) {
- List alerts = geoService.getTrafficAlerts();
- return Response.ok().entity(alerts).build();
- }
- return null;
- } catch (GeoLocationBasedServiceException e) {
- String error = "Error occurred while getting the geo alerts for " + alertType + " alert";
- log.error(error, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
- }
- }
-
- @Path("alerts/history/{deviceType}/{deviceId}")
- @GET
- @Consumes("application/json")
- @Produces("application/json")
- public Response getGeoAlertsHistory(@PathParam("deviceId") String deviceId,
- @PathParam("deviceType") String deviceType,
- @QueryParam("from") long from, @QueryParam("to") long to) {
- String tableName = "IOT_PER_DEVICE_STREAM_GEO_ALERTNOTIFICATIONS";
- String fromDate = String.valueOf(from);
- String toDate = String.valueOf(to);
- String query = "id:" + deviceId + " AND type:" + deviceType;
- if (from != 0 || to != 0) {
- query += " AND timeStamp : [" + fromDate + " TO " + toDate + "]";
- }
- try {
- if (!DeviceMgtAPIUtils.getDeviceAccessAuthorizationService().isUserAuthorized(
- new DeviceIdentifier(deviceId, deviceType),
- DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS)) {
- return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build();
- }
- List sortByFields = new ArrayList<>();
- SortByField sortByField = new SortByField("timeStamp", SortType.ASC);
- sortByFields.add(sortByField);
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername());
-
- try {
- String tenantDomain = MultitenantUtils.getTenantDomain(authorizedUser);
- int tenantId = DeviceMgtAPIUtils.getRealmService().getTenantManager().getTenantId(tenantDomain);
- AnalyticsDataAPI analyticsDataAPI = DeviceMgtAPIUtils.getAnalyticsDataAPI();
- List searchResults = analyticsDataAPI.search(tenantId, tableName, query,
- 0,
- 100,
- sortByFields);
- List events = getEventBeans(analyticsDataAPI, tenantId, tableName, new ArrayList(),
- searchResults);
- return Response.ok().entity(events).build();
- } catch (AnalyticsException | UserStoreException e) {
- log.error("Failed to perform search on table: " + tableName + " : " + e.getMessage(), e);
- throw DeviceMgtUtil.buildBadRequestException(
- Constants.ErrorMessages.STATUS_BAD_REQUEST_MESSAGE_DEFAULT);
- }
- } catch (DeviceAccessAuthorizationException e) {
- log.error(e.getErrorMessage());
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- }
-
- @Path("alerts/history")
- @GET
- @Consumes("application/json")
- @Produces("application/json")
- public Response getGeoAlertsHistoryForGeoClusters(@QueryParam("from") long from, @QueryParam("to") long to) {
- String tableName = "IOT_PER_DEVICE_STREAM_GEO_ALERTNOTIFICATIONS";
- String fromDate = String.valueOf(from);
- String toDate = String.valueOf(to);
- String query = "";
- if (from != 0 || to != 0) {
- query = "timeStamp : [" + fromDate + " TO " + toDate + "]";
- }
- try {
- List sortByFields = new ArrayList<>();
- SortByField sortByField = new SortByField("timeStamp", SortType.ASC);
- sortByFields.add(sortByField);
-
- // this is the user who initiates the request
- String authorizedUser = MultitenantUtils.getTenantAwareUsername(
- CarbonContext.getThreadLocalCarbonContext().getUsername());
-
- try {
- String tenantDomain = MultitenantUtils.getTenantDomain(authorizedUser);
- int tenantId = DeviceMgtAPIUtils.getRealmService().getTenantManager().getTenantId(tenantDomain);
- AnalyticsDataAPI analyticsDataAPI = DeviceMgtAPIUtils.getAnalyticsDataAPI();
- List searchResults = analyticsDataAPI.search(tenantId, tableName, query,
- 0,
- 100,
- sortByFields);
- List events = getEventBeans(analyticsDataAPI, tenantId, tableName, new ArrayList(),
- searchResults);
- return Response.ok().entity(events).build();
- } catch (AnalyticsException | UserStoreException e) {
- log.error("Failed to perform search on table: " + tableName + " : " + e.getMessage(), e);
- throw DeviceMgtUtil.buildBadRequestException(
- Constants.ErrorMessages.STATUS_BAD_REQUEST_MESSAGE_DEFAULT);
- }
- } catch (Exception e) {
- log.error(e.getMessage());
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
- }
- }
-
- private List getEventBeans(AnalyticsDataAPI analyticsDataAPI, int tenantId, String tableName,
- List columns,
- List searchResults) throws AnalyticsException {
- List ids = getIds(searchResults);
- List requiredColumns = (columns == null || columns.isEmpty()) ? null : columns;
- AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, requiredColumns, ids);
- List records = AnalyticsDataAPIUtil.listRecords(analyticsDataAPI, response);
- Map eventBeanMap = getEventBeanKeyedWithIds(records);
- return getSortedEventBeans(eventBeanMap, searchResults);
- }
-
- private List getSortedEventBeans(Map eventBeanMap,
- List searchResults) {
- List sortedRecords = new ArrayList<>();
- for (SearchResultEntry entry : searchResults) {
- sortedRecords.add(eventBeanMap.get(entry.getId()));
- }
- return sortedRecords;
- }
-
- private Map getEventBeanKeyedWithIds(List records) {
- Map eventBeanMap = new HashMap<>();
- for (Record record : records) {
- Event event = getEventBean(record);
- eventBeanMap.put(event.getId(), event);
- }
- return eventBeanMap;
- }
-
- private List getIds(List searchResults) {
- List ids = new ArrayList<>();
- if (searchResults != null) {
- for (SearchResultEntry resultEntry : searchResults) {
- ids.add(resultEntry.getId());
- }
- }
- return ids;
- }
-
- private static Event getEventBean(Record record) {
- Event eventBean = new Event();
- eventBean.setId(record.getId());
- eventBean.setTableName(record.getTableName());
- eventBean.setTimestamp(record.getTimestamp());
- eventBean.setValues(record.getValues());
- return eventBean;
- }
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/webapp/WEB-INF/cxf-servlet.xml
index e4bea07957..06da04568e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/webapp/WEB-INF/cxf-servlet.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/main/webapp/WEB-INF/cxf-servlet.xml
@@ -37,7 +37,6 @@
-
@@ -81,7 +80,6 @@
-
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/test/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GeoLocationBasedServiceImplTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/test/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GeoLocationBasedServiceImplTest.java
deleted file mode 100644
index 0d33938c09..0000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.v09.api/src/test/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GeoLocationBasedServiceImplTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2017, 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.jaxrs.service.impl;
-
-
-import org.mockito.Mockito;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
-import org.wso2.carbon.device.mgt.common.DeviceManagementException;
-import org.wso2.carbon.device.mgt.core.geo.GeoCluster;
-import org.wso2.carbon.device.mgt.core.geo.geoHash.GeoCoordinate;
-import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
-import org.wso2.carbon.device.mgt.jaxrs.service.api.GeoLocationBasedService;
-
-import javax.ws.rs.core.Response;
-import java.util.ArrayList;
-import java.util.List;
-
-public class GeoLocationBasedServiceImplTest {
- private DeviceManagementProviderService deviceManagementProviderService;
- private PrivilegedCarbonContext context;
- private GeoLocationBasedService geoLocationBasedService;
-
- @BeforeClass
- public void init() {
- deviceManagementProviderService = Mockito.mock(DeviceManagementProviderService.class);
- geoLocationBasedService = new GeoLocationBasedServiceImpl();
- context = Mockito.mock(PrivilegedCarbonContext.class);
- Mockito.doReturn("admin").when(context).getUsername();
- }
-
- @Test(description = "This method tests the behaviour of getGeoDeviceLocations when there are no devices" +
- "in the given map boundaries")
- public void testGetGeoDeviceLocations1() throws DeviceManagementException {
- Mockito.doReturn(new ArrayList()).when(deviceManagementProviderService)
- .findGeoClusters(Mockito.any(GeoCoordinate.class), Mockito.any(GeoCoordinate.class), Mockito.anyInt());
- Response response = geoLocationBasedService.getGeoDeviceLocations(0.4, 15, 75.6,
- 90.1, 6);
- Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode(),
- "getGeoDeviceLocations request failed with valid parameters");
- }
-
- @Test(description = "This method tests the behaviour of getGeoDeviceLocations when there are devices" +
- "in the given map boundaries")
- public void testGetGeoDeviceLocations2() throws DeviceManagementException {
- List geoClusters = new ArrayList<>();
- geoClusters.add(new GeoCluster(new GeoCoordinate(1.5, 80.7),
- new GeoCoordinate(1.1, 79.5), new GeoCoordinate(1.9, 82.1), 3,
- "tb32", "aegtew234", "android", "1234"));
- geoClusters.add(new GeoCluster(new GeoCoordinate(10.2, 86.1),
- new GeoCoordinate(9.8, 84.7), new GeoCoordinate(11.1, 88.1), 4,
- "t1gd", "swerty12s", "android", "1234"));
- Mockito.doReturn(geoClusters).when(deviceManagementProviderService)
- .findGeoClusters(Mockito.any(GeoCoordinate.class), Mockito.any(GeoCoordinate.class), Mockito.anyInt());
- Response response = geoLocationBasedService.getGeoDeviceLocations(0.4, 15, 75.6,
- 90.1, 6);
- Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode(),
- "getGeoDeviceLocations request failed with valid parameters");
- }
-}
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql
index 9601b77742..6117eff996 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/h2.sql
@@ -396,16 +396,14 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_APPLICATION_MAPPING (
CREATE TABLE IF NOT EXISTS DM_NOTIFICATION (
NOTIFICATION_ID INTEGER AUTO_INCREMENT NOT NULL,
DEVICE_ID INTEGER NOT NULL,
- OPERATION_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NULL,
TENANT_ID INTEGER NOT NULL,
STATUS VARCHAR(10) NULL,
DESCRIPTION VARCHAR(1000) NULL,
LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL,
PRIMARY KEY (NOTIFICATION_ID),
CONSTRAINT fk_dm_device_notification FOREIGN KEY (DEVICE_ID) REFERENCES
- DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
- CONSTRAINT fk_dm_operation_notification FOREIGN KEY (OPERATION_ID) REFERENCES
- DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
);
-- NOTIFICATION TABLE END --
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql
index 204fedd387..7d0427a304 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mssql.sql
@@ -439,16 +439,14 @@ IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[D
CREATE TABLE DM_NOTIFICATION (
NOTIFICATION_ID INTEGER IDENTITY(1,1) NOT NULL,
DEVICE_ID INTEGER NOT NULL,
- OPERATION_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NULL,
TENANT_ID INTEGER NOT NULL,
STATUS VARCHAR(10) NULL,
DESCRIPTION VARCHAR(1000) NULL,
LAST_UPDATED_TIMESTAMP DATETIME2 NOT NULL,
PRIMARY KEY (NOTIFICATION_ID),
CONSTRAINT FL_DM_NOTIFICATION FOREIGN KEY (DEVICE_ID) REFERENCES
- DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
- CONSTRAINT FK_DM_OPERATION_NOTIFICATION FOREIGN KEY (OPERATION_ID) REFERENCES
- DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
);
-- NOTIFICATION TABLE END --
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql
index b79a23f79e..ce2379f621 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/mysql.sql
@@ -454,16 +454,14 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_POLICY (
CREATE TABLE IF NOT EXISTS DM_NOTIFICATION (
NOTIFICATION_ID INTEGER AUTO_INCREMENT NOT NULL,
DEVICE_ID INTEGER NOT NULL,
- OPERATION_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NULL,
TENANT_ID INTEGER NOT NULL,
STATUS VARCHAR(10) NULL,
DESCRIPTION VARCHAR(1000) NULL,
LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL,
PRIMARY KEY (NOTIFICATION_ID),
CONSTRAINT fk_dm_device_notification FOREIGN KEY (DEVICE_ID) REFERENCES
- DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
- CONSTRAINT fk_dm_operation_notification FOREIGN KEY (OPERATION_ID) REFERENCES
- DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
)ENGINE = InnoDB;
-- END NOTIFICATION TABLES --
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql
index cc89ec76f3..c0007256b8 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/oracle.sql
@@ -749,16 +749,14 @@ WHEN (NEW.ID IS NULL)
CREATE TABLE DM_NOTIFICATION (
NOTIFICATION_ID NUMBER(10) NOT NULL,
DEVICE_ID NUMBER(10) NOT NULL,
- OPERATION_ID NUMBER(10) NOT NULL,
+ OPERATION_ID NUMBER(10) NULL,
TENANT_ID NUMBER(10) NOT NULL,
STATUS VARCHAR2(10) NULL,
DESCRIPTION VARCHAR2(1000) NULL,
LAST_UPDATED_TIMESTAMP TIMESTAMP(0) NOT NULL,
CONSTRAINT PK_DM_NOTIFICATION PRIMARY KEY (NOTIFICATION_ID),
CONSTRAINT FK_DM_DEVICE_NOTIFICATION FOREIGN KEY (DEVICE_ID) REFERENCES
- DM_DEVICE (ID),
- CONSTRAINT FK_DM_OPERATION_NOTIFICATION FOREIGN KEY (OPERATION_ID) REFERENCES
- DM_OPERATION (ID)
+ DM_DEVICE (ID)
)
/
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql
index 7f74ab5246..83a85c6bb2 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/dbscripts/cdm/postgresql.sql
@@ -397,15 +397,13 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_POLICY (
CREATE TABLE IF NOT EXISTS DM_NOTIFICATION (
NOTIFICATION_ID BIGSERIAL NOT NULL PRIMARY KEY,
DEVICE_ID INTEGER NOT NULL,
- OPERATION_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NULL,
TENANT_ID INTEGER NOT NULL,
STATUS VARCHAR(10) NULL,
DESCRIPTION VARCHAR(1000) NULL,
LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL,
CONSTRAINT fk_dm_device_notification FOREIGN KEY (DEVICE_ID) REFERENCES
- DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
- CONSTRAINT fk_dm_operation_notification FOREIGN KEY (OPERATION_ID) REFERENCES
- DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
);
-- NOTIFICATION TABLE END --
diff --git a/pom.xml b/pom.xml
index 2fdc35bf48..a0459caccc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1243,6 +1243,11 @@
okhttp
${squareup.okhttp3.version}
+
+ com.squareup.okio
+ okio
+ ${okio.version}
+
io.github.openfeign
feign-okhttp
@@ -1982,6 +1987,7 @@
1.3
2.3.1
3.8.1
+ 1.13.0
9.3.1
1.1.1
1.2