mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
working on ui features
This commit is contained in:
parent
4eb66f4e6b
commit
d3eb32b5cc
@ -35,11 +35,7 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementConstants.GeoServices;
|
|||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
|
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
|
||||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
|
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
|
||||||
import org.wso2.carbon.device.mgt.common.geo.service.Alert;
|
import org.wso2.carbon.device.mgt.common.geo.service.*;
|
||||||
import org.wso2.carbon.device.mgt.common.geo.service.Event;
|
|
||||||
import org.wso2.carbon.device.mgt.common.geo.service.GeoFence;
|
|
||||||
import org.wso2.carbon.device.mgt.common.geo.service.GeoLocationBasedServiceException;
|
|
||||||
import org.wso2.carbon.device.mgt.common.geo.service.GeoLocationProviderService;
|
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants;
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
||||||
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
|
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
|
||||||
@ -48,26 +44,15 @@ import org.wso2.carbon.device.mgt.core.geo.GeoGrid;
|
|||||||
import org.wso2.carbon.device.mgt.core.geo.GeoRectangle;
|
import org.wso2.carbon.device.mgt.core.geo.GeoRectangle;
|
||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
|
||||||
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderServiceImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.DeviceManagementService;
|
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.GeoLocationBasedService;
|
import org.wso2.carbon.device.mgt.jaxrs.service.api.GeoLocationBasedService;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.GroupManagementService;
|
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
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.DeviceMgtAPIUtils;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil;
|
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil;
|
||||||
import org.wso2.carbon.user.api.UserStoreException;
|
import org.wso2.carbon.user.api.UserStoreException;
|
||||||
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.*;
|
||||||
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;
|
import javax.ws.rs.core.Response;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -81,6 +66,15 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
|
|
||||||
private static Log log = LogFactory.getLog(GeoLocationBasedServiceImpl.class);
|
private static Log log = LogFactory.getLog(GeoLocationBasedServiceImpl.class);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
@Path("stats/{deviceType}/{deviceId}")
|
@Path("stats/{deviceType}/{deviceId}")
|
||||||
@GET
|
@GET
|
||||||
@Consumes("application/json")
|
@Consumes("application/json")
|
||||||
@ -163,7 +157,7 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
Map<Integer, DeviceLocation> locationHashMap = new HashMap<>();
|
Map<Integer, DeviceLocation> locationHashMap = new HashMap<>();
|
||||||
|
|
||||||
for (Device device : devices) {
|
for (Device device : devices) {
|
||||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(device.getDeviceIdentifier(),device.getType());
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(device.getDeviceIdentifier(), device.getType());
|
||||||
|
|
||||||
locationHashMap.put(device.getId(), deviceInformationManagerService.getDeviceLocation(deviceIdentifier));
|
locationHashMap.put(device.getId(), deviceInformationManagerService.getDeviceLocation(deviceIdentifier));
|
||||||
}
|
}
|
||||||
@ -173,8 +167,8 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
|
||||||
} catch (DeviceDetailsMgtException e) {
|
} catch (DeviceDetailsMgtException e) {
|
||||||
String msg = "Exception occurred while retrieving device location."+groupId;
|
String msg = "Exception occurred while retrieving device location." + groupId;
|
||||||
log.error(msg,e);
|
log.error(msg, e);
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,39 +185,44 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
@QueryParam("minLong") double minLong,
|
@QueryParam("minLong") double minLong,
|
||||||
@QueryParam("maxLong") double maxLong) {
|
@QueryParam("maxLong") double maxLong) {
|
||||||
|
|
||||||
try {
|
|
||||||
if (!DeviceManagerUtil.isPublishOperationResponseEnabled()) {
|
|
||||||
return Response.status(Response.Status.BAD_REQUEST.getStatusCode())
|
|
||||||
.entity("Operation publishing does not exists").build();
|
|
||||||
}
|
|
||||||
} catch (DeviceManagementException e) {
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(e.getMessage()).build();
|
|
||||||
}
|
|
||||||
DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService();
|
DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||||
DeviceInformationManager deviceInformationManagerService = DeviceMgtAPIUtils.getDeviceInformationManagerService();
|
GeoGrid geoGrid = new GeoGrid(horizontalDivisions, verticalDivisions, minLat, maxLat, minLong, maxLong);
|
||||||
GeoGrid geoGrid = new GeoGrid(horizontalDivisions,verticalDivisions,minLat,maxLat,minLong,maxLong);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<Device> devices =deviceManagementService.getAllDevices();
|
List<Device> devices = deviceManagementService.getAllDevices();
|
||||||
ArrayList<Device> devicesInGeoGrid =geoGrid.getDevicesInGeoGrid(devices);
|
ArrayList<Device> devicesInGeoGrid = geoGrid.getDevicesInGeoGrid(devices);
|
||||||
List<GeoRectangle> geoRectangles=geoGrid.placeDevicesInGeoRectangles(devicesInGeoGrid);
|
List<GeoRectangle> geoRectangles = geoGrid.placeDevicesInGeoRectangles(devicesInGeoGrid);
|
||||||
Map<Map<String,Double>,Map<String,String>> details = new HashMap<>();
|
Map<String, Map<String, String>> details = new HashMap<>();
|
||||||
for(GeoRectangle geoRectangle:geoRectangles){
|
for (GeoRectangle geoRectangle : geoRectangles) {
|
||||||
Map<String,Double> center = geoRectangle.getCenter();
|
Map<String, String> rectangleDetails = new HashMap<>();
|
||||||
if(geoRectangle.getDeviceCount()==0){
|
Map<String, Double> rectangleCoordinates = geoRectangle.getCoordinates();
|
||||||
details.put(center,null);
|
String rectangleLat = rectangleCoordinates.get("Lat").toString();
|
||||||
}else if(geoRectangle.getDeviceCount()==1){
|
String rectangleLong = rectangleCoordinates.get("Long").toString();
|
||||||
Map<String,String> deviceDetails = new HashMap<>();
|
String minRectangleLat = geoRectangle.getMinLat().toString();
|
||||||
Device device=geoRectangle.getDevices().get(0);
|
String maxRectangleLat = geoRectangle.getMaxLat().toString();
|
||||||
deviceDetails.put("deviceID",device.getDeviceIdentifier());
|
String minRectangleLong = geoRectangle.getMinLong().toString();
|
||||||
details.put(center,deviceDetails);
|
String maxRectangleLong = geoRectangle.getMaxLong().toString();
|
||||||
}else{
|
rectangleDetails.put("rectangleLat", rectangleLat);
|
||||||
Map<String,String> deviceCountDetails = new HashMap<>();
|
rectangleDetails.put("rectangleLong", rectangleLong);
|
||||||
int deviceCount=geoRectangle.getDeviceCount();
|
rectangleDetails.put("minLat",minRectangleLat);
|
||||||
deviceCountDetails.put("count",Integer.toString(deviceCount));
|
rectangleDetails.put("maxLat",maxRectangleLat);
|
||||||
details.put(center,deviceCountDetails);
|
rectangleDetails.put("minLong",minRectangleLong);
|
||||||
}
|
rectangleDetails.put("maxLong",maxRectangleLong);
|
||||||
|
if (geoRectangle.getDeviceCount() == 0) {
|
||||||
|
|
||||||
|
rectangleDetails.put("count", "0");
|
||||||
|
rectangleDetails.put("deviceId", null);
|
||||||
|
|
||||||
|
} else if (geoRectangle.getDeviceCount() == 1) {
|
||||||
|
Device device = geoRectangle.getDevices().get(0);
|
||||||
|
rectangleDetails.put("count", "1");
|
||||||
|
rectangleDetails.put("deviceID", device.getDeviceIdentifier());
|
||||||
|
} else {
|
||||||
|
int deviceCount = geoRectangle.getDeviceCount();
|
||||||
|
rectangleDetails.put("count", Integer.toString(deviceCount));
|
||||||
|
rectangleDetails.put("deviceID", null);
|
||||||
|
}
|
||||||
|
details.put(geoRectangle.getId().toString(), rectangleDetails);
|
||||||
}
|
}
|
||||||
return Response.ok().entity(details).build();
|
return Response.ok().entity(details).build();
|
||||||
} catch (DeviceManagementException e) {
|
} catch (DeviceManagementException e) {
|
||||||
@ -234,7 +233,6 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Path("alerts/{alertType}/{deviceType}/{deviceId}")
|
@Path("alerts/{alertType}/{deviceType}/{deviceId}")
|
||||||
@POST
|
@POST
|
||||||
@Consumes("application/json")
|
@Consumes("application/json")
|
||||||
@ -475,13 +473,4 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
}
|
}
|
||||||
return ids;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,6 +48,7 @@ public class GeoGrid {
|
|||||||
double maxRectangleLat;
|
double maxRectangleLat;
|
||||||
double minRectangleLong;
|
double minRectangleLong;
|
||||||
double maxRectangleLong;
|
double maxRectangleLong;
|
||||||
|
Integer id = 0;
|
||||||
|
|
||||||
for (int i = 0; i < verticalDivisions; i++) {
|
for (int i = 0; i < verticalDivisions; i++) {
|
||||||
minRectangleLong = this.minLong + i * longIncrement;
|
minRectangleLong = this.minLong + i * longIncrement;
|
||||||
@ -59,7 +60,11 @@ public class GeoGrid {
|
|||||||
|
|
||||||
for (int m = 0; m < horizontalDivisions; m++) {
|
for (int m = 0; m < horizontalDivisions; m++) {
|
||||||
minRectangleLat = this.minLat + m * latIncrement;
|
minRectangleLat = this.minLat + m * latIncrement;
|
||||||
maxRectangleLat = this.minLat + (m + 1) * latIncrement;
|
if(m+1==horizontalDivisions){
|
||||||
|
maxRectangleLat=this.maxLat;
|
||||||
|
}else {
|
||||||
|
maxRectangleLat = this.minLat + (m + 1) * latIncrement;
|
||||||
|
}
|
||||||
geoRectangles.add(new GeoRectangle(minRectangleLat, maxRectangleLat, minRectangleLong, maxRectangleLong));
|
geoRectangles.add(new GeoRectangle(minRectangleLat, maxRectangleLat, minRectangleLong, maxRectangleLong));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,68 +33,93 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class GeoRectangle{
|
public class GeoRectangle {
|
||||||
|
|
||||||
|
private static int count = 0;
|
||||||
|
private static Log log = LogFactory.getLog(GeoRectangle.class);
|
||||||
|
DeviceInformationManager deviceInformationManagerService = new DeviceInformationManagerImpl();
|
||||||
private double minLat;
|
private double minLat;
|
||||||
private double maxLat;
|
private double maxLat;
|
||||||
private double minLong;
|
private double minLong;
|
||||||
private double maxLong;
|
private double maxLong;
|
||||||
private ArrayList<Device> devices=new ArrayList<>();
|
private double centerLat;
|
||||||
|
private double centerLong;
|
||||||
|
private double rectangleLat;
|
||||||
|
private double rectangleLong;
|
||||||
|
private double deviantLatValue = 1000;
|
||||||
|
private double deviantLongValue = 1000;
|
||||||
|
private int id;
|
||||||
|
private ArrayList<Device> devices = new ArrayList<>();
|
||||||
|
|
||||||
|
public GeoRectangle(double minLat, double maxLat, double minLong, double maxLong) {
|
||||||
DeviceInformationManager deviceInformationManagerService = new DeviceInformationManagerImpl();
|
this.minLat = minLat;
|
||||||
private static Log log = LogFactory.getLog(GeoRectangle.class);
|
this.maxLat = maxLat;
|
||||||
|
this.minLong = minLong;
|
||||||
public GeoRectangle(double minLat, double maxLat, double minLong, double maxLong){
|
this.maxLong = maxLong;
|
||||||
this.minLat=minLat;
|
this.centerLat = (this.minLat + this.maxLat) / 2;
|
||||||
this.maxLat=maxLat;
|
this.centerLong = (this.minLong + this.maxLong) / 2;
|
||||||
this.minLong=minLong;
|
this.rectangleLat = this.centerLat;
|
||||||
this.maxLong=maxLong;
|
this.rectangleLong = this.centerLong;
|
||||||
|
count++;
|
||||||
|
this.id = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Double> getCenter(){
|
public Map<String, Double> getCoordinates() {
|
||||||
Map<String,Double> centerCordinates = new HashMap<String,Double>();
|
Map<String, Double> rectangleCoordinates = new HashMap<String, Double>();
|
||||||
double centerLat = (minLat+maxLat)/2;
|
|
||||||
double centerLong = (minLong+maxLong)/2;
|
rectangleCoordinates.put("Lat", rectangleLat);
|
||||||
centerCordinates.put("Lat",centerLat);
|
rectangleCoordinates.put("Long", rectangleLong);
|
||||||
centerCordinates.put("Long",centerLong);
|
return rectangleCoordinates;
|
||||||
return centerCordinates;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDeviceInGeoRectangle(Device device){
|
public boolean isDeviceInGeoRectangle(Device device) {
|
||||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(device.getDeviceIdentifier(),device.getType());
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(device.getDeviceIdentifier(), device.getType());
|
||||||
try {
|
try {
|
||||||
DeviceLocation location = deviceInformationManagerService.getDeviceLocation(deviceIdentifier);
|
DeviceLocation location = deviceInformationManagerService.getDeviceLocation(deviceIdentifier);
|
||||||
double locationLat = location.getLatitude();
|
double locationLat = location.getLatitude();
|
||||||
double locationLong = location.getLongitude();
|
double locationLong = location.getLongitude();
|
||||||
if(locationLat >= minLat && locationLat < maxLat && locationLong >= minLong && locationLong<maxLong){
|
if (locationLat >= minLat && locationLat < maxLat && locationLong >= minLong && locationLong < maxLong) {
|
||||||
|
checkLocationDeviants(locationLat, locationLong);
|
||||||
return true;
|
return true;
|
||||||
}else{
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (DeviceDetailsMgtException e) {
|
} catch (DeviceDetailsMgtException e) {
|
||||||
String msg = "Exception occurred while retrieving device location."+deviceIdentifier;
|
String msg = "Exception occurred while retrieving device location." + deviceIdentifier;
|
||||||
log.error(msg,e);
|
log.error(msg, e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addDevice(Device device){
|
private void checkLocationDeviants(double locationLat, double locationLong) {
|
||||||
|
double latDeviant = Math.abs(centerLat - locationLat);
|
||||||
|
double longDeviant = Math.abs(centerLong - locationLong);
|
||||||
|
if (latDeviant <= deviantLatValue) {
|
||||||
|
deviantLatValue = latDeviant;
|
||||||
|
rectangleLat = locationLat;
|
||||||
|
}
|
||||||
|
if (longDeviant <= deviantLongValue) {
|
||||||
|
deviantLongValue = longDeviant;
|
||||||
|
rectangleLong = locationLong;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDevice(Device device) {
|
||||||
devices.add(device);
|
devices.add(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Device> getDevices(){
|
|
||||||
|
public List<Device> getDevices() {
|
||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDeviceCount(){
|
public int getDeviceCount() {
|
||||||
return devices.size();
|
return devices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getMinLat() {
|
public Double getMinLat() {
|
||||||
return minLat;
|
return minLat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +127,7 @@ public class GeoRectangle{
|
|||||||
this.minLat = minLat;
|
this.minLat = minLat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getMaxLat() {
|
public Double getMaxLat() {
|
||||||
return maxLat;
|
return maxLat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +135,7 @@ public class GeoRectangle{
|
|||||||
this.maxLat = maxLat;
|
this.maxLat = maxLat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getMinLong() {
|
public Double getMinLong() {
|
||||||
return minLong;
|
return minLong;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +143,7 @@ public class GeoRectangle{
|
|||||||
this.minLong = minLong;
|
this.minLong = minLong;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getMaxLong() {
|
public Double getMaxLong() {
|
||||||
return maxLong;
|
return maxLong;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,4 +151,8 @@ public class GeoRectangle{
|
|||||||
this.maxLong = maxLong;
|
this.maxLong = maxLong;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -105,7 +105,6 @@ function updateAttribution(e) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var attributionControl;
|
var attributionControl;
|
||||||
var geoAlertsBar;
|
var geoAlertsBar;
|
||||||
var groupedOverlays;
|
var groupedOverlays;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user