forked from community/device-mgt-core
feature/traccar-sync
parent
74adeda997
commit
515e826711
@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.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.jaxrs.beans.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.beans.OperationList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.common.ActivityIdList;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* traccar related REST-API. This can be used to manipulated traccar related details.
|
||||||
|
*/
|
||||||
|
@SwaggerDefinition(
|
||||||
|
info = @Info(
|
||||||
|
version = "1.0.0",
|
||||||
|
title = "",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = "name", value = "TraccarService"),
|
||||||
|
@ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/traccar"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tags = {
|
||||||
|
@Tag(name = "traccar_service", description = "")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Scopes(
|
||||||
|
scopes = {
|
||||||
|
@Scope(
|
||||||
|
name = "Return Traccar User token ",
|
||||||
|
description = "Enroll a Traccar User if not exist and return the token",
|
||||||
|
key = "perm:traccar:user",
|
||||||
|
roles = {"Internal/devicemgt-user"},
|
||||||
|
permissions = {"/device-mgt/traccar/manage"}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@Path("/traccar")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Api(value = "Traccar Service", description = "Traccar Service")
|
||||||
|
public interface TraccarService {
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Path("/generate-token")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Return Traccar User Token",
|
||||||
|
tags = "Traccar Service",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:traccar:user")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(code = 200, message = "OK. \n Successfully retrieved the operations.",
|
||||||
|
response = OperationList.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last " +
|
||||||
|
"time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. \n Empty body because the client already has the latest version of " +
|
||||||
|
"the requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "The incoming request has more than one selection criteria defined via the query parameters.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "The search criteria did not match any device registered with the server.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching the device list.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getUser(
|
||||||
|
@ApiParam(
|
||||||
|
name = "userName",
|
||||||
|
value = "The user name.",
|
||||||
|
required = true)
|
||||||
|
@QueryParam("userName") String userName);
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.jaxrs.service.impl;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.api.service.impl.DeviceAPIClientServiceImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.util.HttpReportingUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.service.api.TraccarService;
|
||||||
|
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
@Path("/traccar")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public class TraccarServiceImpl implements TraccarService {
|
||||||
|
private static final Log log = LogFactory.getLog(TraccarServiceImpl.class);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/generate-token")
|
||||||
|
@Override
|
||||||
|
public Response getUser(@QueryParam("userName") String userName) {
|
||||||
|
if (HttpReportingUtil.isTrackerEnabled()) {
|
||||||
|
JSONObject obj = new JSONObject(DeviceAPIClientServiceImpl.returnUser(userName));
|
||||||
|
|
||||||
|
log.info("=================");
|
||||||
|
log.info(obj.toString());
|
||||||
|
log.info("==================");
|
||||||
|
if(obj.has("error")){
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(obj.getString("error")).build();
|
||||||
|
}else{
|
||||||
|
return Response.status(Response.Status.OK).entity(obj.getString("token")).build();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).entity("Traccar is not enabled").build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.common;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class TrackerPermissionInfo implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1998101712L;
|
||||||
|
|
||||||
|
private int traccarUserId;
|
||||||
|
private int traccarDeviceId;
|
||||||
|
|
||||||
|
public TrackerPermissionInfo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TrackerPermissionInfo(int traccarUserId, int traccarDeviceId) {
|
||||||
|
this.traccarUserId = traccarUserId;
|
||||||
|
this.traccarDeviceId = traccarDeviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getTraccarUserId() {
|
||||||
|
return traccarUserId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTraccarUserId(int traccarUserId) {
|
||||||
|
this.traccarUserId = traccarUserId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTraccarDeviceId() {
|
||||||
|
return traccarDeviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTraccarDeviceId(int traccarDeviceId) {
|
||||||
|
this.traccarDeviceId = traccarDeviceId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.mgt.common;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@ApiModel(value = "User", description = "This class carries all information related to a managed Traccar User.")
|
||||||
|
public class TrackerUserInfo implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1998101712L;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "userName", value = "The user's name that can be set on the device by the device user.",
|
||||||
|
required = true)
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
public TrackerUserInfo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserName(String UserName) {
|
||||||
|
this.userName = UserName;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,777 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
|
||||||
|
*
|
||||||
|
* Licensed under the Entgra Commercial License, Version 1.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://entgra.io/licenses/entgra-commercial/1.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.core.traccar.api.service.addons;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import okhttp3.ConnectionPool;
|
||||||
|
import okhttp3.MediaType;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.Response;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
|
import org.wso2.carbon.device.mgt.common.TrackerDeviceInfo;
|
||||||
|
import org.wso2.carbon.device.mgt.common.TrackerGroupInfo;
|
||||||
|
import org.wso2.carbon.device.mgt.common.exceptions.TrackerAlreadyExistException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.exceptions.TransactionManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.TrackerDAO;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.TrackerManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.TrackerManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.api.service.TraccarClient;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.TraccarHandlerConstants;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.beans.TraccarDevice;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.beans.TraccarGroups;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.beans.TraccarPosition;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.beans.TraccarUser;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.config.TraccarConfigurationException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.config.TraccarGateway;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.util.TraccarUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.core.config.TraccarConfigurationManager;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class TraccarClientImplCopy /*implements TraccarClient*/ {
|
||||||
|
private static final Log log = LogFactory.getLog(TraccarClientImplCopy.class);
|
||||||
|
private static final int THREAD_POOL_SIZE = 50;
|
||||||
|
private final OkHttpClient client;
|
||||||
|
private final ExecutorService executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
|
||||||
|
final TraccarGateway traccarGateway = getTraccarGateway();
|
||||||
|
final String endpoint = traccarGateway.getPropertyByName(TraccarHandlerConstants.TraccarConfig.ENDPOINT).getValue();
|
||||||
|
final String authorization = traccarGateway.getPropertyByName(TraccarHandlerConstants.TraccarConfig.AUTHORIZATION).getValue();
|
||||||
|
final String authorizationKey = traccarGateway.getPropertyByName(TraccarHandlerConstants.TraccarConfig.AUTHORIZATION_KEY).getValue();
|
||||||
|
final String defaultPort = traccarGateway.getPropertyByName(TraccarHandlerConstants.TraccarConfig.DEFAULT_PORT).getValue();
|
||||||
|
final String locationUpdatePort = traccarGateway.getPropertyByName(TraccarHandlerConstants.TraccarConfig.LOCATION_UPDATE_PORT).getValue();
|
||||||
|
|
||||||
|
final String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
|
private final TrackerDAO trackerDAO;
|
||||||
|
|
||||||
|
public TraccarClientImplCopy() {
|
||||||
|
client = new OkHttpClient.Builder()
|
||||||
|
.connectTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.writeTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.readTimeout(45, TimeUnit.SECONDS)
|
||||||
|
.connectionPool(new ConnectionPool(50,30,TimeUnit.SECONDS))
|
||||||
|
.build();
|
||||||
|
this.trackerDAO = TrackerManagementDAOFactory.getTrackerDAO();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TrackerExecutor implements Runnable {
|
||||||
|
final int deviceId;
|
||||||
|
final int groupId;
|
||||||
|
final int tenantId;
|
||||||
|
final JSONObject payload;
|
||||||
|
final String context;
|
||||||
|
final String publisherUrl;
|
||||||
|
private final String method;
|
||||||
|
private final String type;
|
||||||
|
|
||||||
|
private TrackerExecutor(int id, int tenantId, String publisherUrl, String context, JSONObject payload,
|
||||||
|
String method, String type) {
|
||||||
|
this.deviceId = id;
|
||||||
|
this.groupId = id;
|
||||||
|
this.tenantId = tenantId;
|
||||||
|
this.payload = payload;
|
||||||
|
this.context = context;
|
||||||
|
this.publisherUrl = publisherUrl;
|
||||||
|
this.method = method;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
RequestBody requestBody;
|
||||||
|
Request.Builder builder = new Request.Builder();
|
||||||
|
Request request;
|
||||||
|
Response response;
|
||||||
|
|
||||||
|
if(Objects.equals(method, TraccarHandlerConstants.Methods.POST)){
|
||||||
|
requestBody = RequestBody.create(payload.toString(), MediaType.parse("application/json; charset=utf-8"));
|
||||||
|
builder = builder.post(requestBody);
|
||||||
|
}else if(Objects.equals(method, TraccarHandlerConstants.Methods.PUT)){
|
||||||
|
requestBody = RequestBody.create(payload.toString(), MediaType.parse("application/json; charset=utf-8"));
|
||||||
|
builder = builder.put(requestBody);
|
||||||
|
}else if(Objects.equals(method, TraccarHandlerConstants.Methods.DELETE)){
|
||||||
|
builder = builder.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
request = builder.url(publisherUrl + context).addHeader(authorization, authorizationKey).build();
|
||||||
|
String msg;
|
||||||
|
try {
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
if(Objects.equals(method, TraccarHandlerConstants.Methods.POST)){
|
||||||
|
String result = response.body().string();
|
||||||
|
log.info(result);
|
||||||
|
if(Objects.equals(type, TraccarHandlerConstants.Types.PERMISSION)){
|
||||||
|
if(result.equals("")){
|
||||||
|
msg ="Successfully the device is assigned to the user";
|
||||||
|
}else{
|
||||||
|
msg = "Error occurred while fetching users .";
|
||||||
|
}
|
||||||
|
log.info(msg);
|
||||||
|
}else if(result.charAt(0)=='{'){
|
||||||
|
JSONObject obj = new JSONObject(result);
|
||||||
|
if (obj.has("id")){
|
||||||
|
int traccarId = obj.getInt("id");
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.beginTransaction();
|
||||||
|
if(Objects.equals(type, TraccarHandlerConstants.Types.DEVICE)){
|
||||||
|
trackerDAO.addTrackerDevice(traccarId, deviceId, tenantId);
|
||||||
|
TrackerDeviceInfo res = trackerDAO.getTrackerDevice(deviceId, tenantId);
|
||||||
|
if(res.getStatus()==0){
|
||||||
|
trackerDAO.updateTrackerDeviceIdANDStatus(res.getTraccarDeviceId(), deviceId, tenantId, 1);
|
||||||
|
|
||||||
|
TraccarUser traccarUser = new TraccarUser();
|
||||||
|
traccarUser.setName(username);
|
||||||
|
traccarUser.setLogin(username);
|
||||||
|
traccarUser.setEmail(username);
|
||||||
|
traccarUser.setPassword(generateRandomString(10));
|
||||||
|
traccarUser.setToken(generateRandomString(32));
|
||||||
|
traccarUser.setDeviceLimit(-1);
|
||||||
|
|
||||||
|
log.info("=============="+new Gson().toJson(traccarUser)+"==============");
|
||||||
|
//device is available
|
||||||
|
//device is not available
|
||||||
|
//user is available
|
||||||
|
//user is not available
|
||||||
|
fetchAllUsers(TraccarHandlerConstants.Types.USER_CREATE_WITH_INSERT_DEVICE, traccarUser, traccarId);
|
||||||
|
}
|
||||||
|
}else if(Objects.equals(type, TraccarHandlerConstants.Types.GROUP)){
|
||||||
|
trackerDAO.addTrackerGroup(traccarId, groupId, tenantId);
|
||||||
|
TrackerGroupInfo res = trackerDAO.getTrackerGroup(groupId, tenantId);
|
||||||
|
if(res.getStatus()==0){
|
||||||
|
trackerDAO.updateTrackerGroupIdANDStatus(res.getTraccarGroupId(), groupId, tenantId, 1);
|
||||||
|
}
|
||||||
|
}else if(Objects.equals(type, TraccarHandlerConstants.Types.USER_CREATE)){
|
||||||
|
log.info("=============User inserted=============");
|
||||||
|
}else if(Objects.equals(type, TraccarHandlerConstants.Types.USER_CREATE_WITH_INSERT_DEVICE)){
|
||||||
|
int userId = traccarId;
|
||||||
|
log.info("=============User inserted and setting to create session=============");
|
||||||
|
setPermission(userId, deviceId);
|
||||||
|
}
|
||||||
|
TrackerManagementDAOFactory.commitTransaction();
|
||||||
|
} catch (JSONException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
msg = "Error occurred on JSON object .";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
msg = null;
|
||||||
|
switch (type) {
|
||||||
|
case TraccarHandlerConstants.Types.DEVICE:
|
||||||
|
msg = "Already device with deviceId " + deviceId + " exists";
|
||||||
|
break;
|
||||||
|
case TraccarHandlerConstants.Types.GROUP:
|
||||||
|
msg = "Already the group with groupId - " + groupId + " exists!";
|
||||||
|
break;
|
||||||
|
case TraccarHandlerConstants.Types.USER:
|
||||||
|
msg = "Error occurred while fetching users.";
|
||||||
|
break;
|
||||||
|
case TraccarHandlerConstants.Types.PERMISSION:
|
||||||
|
msg = "Error occurred while assigning the device to the user." + traccarId + deviceId;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally {
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.close();
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Successfully the request is proceed and communicated with Traccar");
|
||||||
|
}
|
||||||
|
}else if(Objects.equals(method, TraccarHandlerConstants.Methods.GET)){
|
||||||
|
if(!Objects.equals(type, TraccarHandlerConstants.Types.DEVICE)){
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
String result = response.body().string();
|
||||||
|
|
||||||
|
JSONArray fetchAllUsers = new JSONArray(result);
|
||||||
|
int userAvailability = 0;
|
||||||
|
int userId = 0;
|
||||||
|
for(int i=0; i<fetchAllUsers.length();i++){
|
||||||
|
if(fetchAllUsers.getJSONObject(i).getString("login").equals(username)){
|
||||||
|
|
||||||
|
//TODO :: when user is available then assgin the device to the user
|
||||||
|
|
||||||
|
userAvailability=1;
|
||||||
|
log.info(fetchAllUsers.getJSONObject(i));
|
||||||
|
log.info(new Gson().toJson(fetchAllUsers.getJSONObject(i)));
|
||||||
|
log.info("Token: "+fetchAllUsers.getJSONObject(i).getString("token"));
|
||||||
|
userId = fetchAllUsers.getJSONObject(i).getInt("id");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Objects.equals(type, TraccarHandlerConstants.Types.USER_CREATE_WITH_INSERT_DEVICE)){
|
||||||
|
if(userAvailability==0){
|
||||||
|
log.info("============");
|
||||||
|
log.info("Creating User");
|
||||||
|
TraccarUser traccarUser = (TraccarUser) payload.get("data");
|
||||||
|
log.info(traccarUser);
|
||||||
|
log.info("============");
|
||||||
|
createUser(traccarUser, type, deviceId);
|
||||||
|
}else{
|
||||||
|
if(userId!=0){
|
||||||
|
log.info("=============");
|
||||||
|
log.info("User inserted and setting to create session");
|
||||||
|
log.info("=============");
|
||||||
|
setPermission(userId, deviceId);
|
||||||
|
}else{
|
||||||
|
log.info("UserId is null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else if(Objects.equals(type, TraccarHandlerConstants.Types.USER_CREATE)){
|
||||||
|
/*if(userAvailability==1){
|
||||||
|
log.info("Update User");
|
||||||
|
log.info(payload);
|
||||||
|
log.info(new Gson().toJson(payload));
|
||||||
|
updateUser(payload);
|
||||||
|
log.info("Update User");
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException | TraccarConfigurationException e) {
|
||||||
|
log.error("Couldnt connect to traccar.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Traccar Device operation.
|
||||||
|
* @param deviceInfo with DeviceName UniqueId, Status, Disabled LastUpdate, PositionId, GroupId
|
||||||
|
* Model, Contact, Category, fenceIds
|
||||||
|
* @throws TraccarConfigurationException Failed while add Traccar Device the operation
|
||||||
|
*/
|
||||||
|
public void addDevice(TraccarDevice deviceInfo, int tenantId) throws TraccarConfigurationException, TrackerAlreadyExistException {
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.openConnection();
|
||||||
|
TrackerDeviceInfo res = trackerDAO.getTrackerDevice(deviceInfo.getId(), tenantId);
|
||||||
|
if(res!=null){
|
||||||
|
String msg = "The device already exist";
|
||||||
|
log.error(msg);
|
||||||
|
throw new TrackerAlreadyExistException(msg);
|
||||||
|
}
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
String msg = "Error occurred while mapping with deviceId .";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} finally {
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject payload = TraccarUtil.TraccarDevicePayload(deviceInfo);
|
||||||
|
String context = defaultPort+"/api/devices";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(deviceInfo.getId(), tenantId, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.POST, TraccarHandlerConstants.Types.DEVICE);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update Traccar Device operation.
|
||||||
|
* @param deviceInfo with DeviceName UniqueId, Status, Disabled LastUpdate, PositionId, GroupId
|
||||||
|
* Model, Contact, Category, fenceIds
|
||||||
|
* @throws TraccarConfigurationException Failed while add Traccar Device the operation
|
||||||
|
*/
|
||||||
|
public void updateDevice(TraccarDevice deviceInfo, int tenantId) throws TraccarConfigurationException, TrackerAlreadyExistException {
|
||||||
|
TrackerDeviceInfo res = null;
|
||||||
|
String msg;
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.openConnection();
|
||||||
|
res = trackerDAO.getTrackerDevice(deviceInfo.getId(), tenantId);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
msg = "Error occurred while mapping with deviceId .";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} finally {
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((res==null) || (res.getTraccarDeviceId()==0)){
|
||||||
|
try {
|
||||||
|
String lastUpdatedTime = String.valueOf((new Date().getTime()));
|
||||||
|
deviceInfo.setLastUpdate(lastUpdatedTime);
|
||||||
|
addDevice(deviceInfo, tenantId);
|
||||||
|
} catch (TraccarConfigurationException e) {
|
||||||
|
msg = "Error occurred while mapping with groupId";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} catch (TrackerAlreadyExistException e) {
|
||||||
|
msg = "The group already exist";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TrackerAlreadyExistException(msg, e);
|
||||||
|
}
|
||||||
|
}else if (res!=null && (res.getTraccarDeviceId()!=0 && res.getStatus()==0)){
|
||||||
|
//update the traccarGroupId and status
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.beginTransaction();
|
||||||
|
trackerDAO.updateTrackerDeviceIdANDStatus(res.getTraccarDeviceId(), deviceInfo.getId(), tenantId, 1);
|
||||||
|
TrackerManagementDAOFactory.commitTransaction();
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
msg="Could not add the traccar group";
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally{
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
JSONObject payload = TraccarUtil.TraccarDevicePayload(deviceInfo);
|
||||||
|
String context = defaultPort+"/api/devices";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(deviceInfo.getId(), tenantId, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.PUT, TraccarHandlerConstants.Types.DEVICE);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*private JSONObject TraccarDevicePayload(TraccarDevice deviceInfo){
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("name", deviceInfo.getDeviceName());
|
||||||
|
payload.put("uniqueId", deviceInfo.getUniqueId());
|
||||||
|
payload.put("status", deviceInfo.getStatus());
|
||||||
|
payload.put("disabled", deviceInfo.getDisabled());
|
||||||
|
payload.put("lastUpdate", deviceInfo.getLastUpdate());
|
||||||
|
payload.put("positionId", deviceInfo.getPositionId());
|
||||||
|
payload.put("groupId", deviceInfo.getGroupId());
|
||||||
|
payload.put("phone", deviceInfo.getPhone());
|
||||||
|
payload.put("model", deviceInfo.getModel());
|
||||||
|
payload.put("contact", deviceInfo.getContact());
|
||||||
|
payload.put("category", deviceInfo.getCategory());
|
||||||
|
List<String> geoFenceIds = new ArrayList<>();
|
||||||
|
payload.put("geofenceIds", geoFenceIds);
|
||||||
|
payload.put("attributes", new JSONObject());
|
||||||
|
return payload;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Device GPS Location operation.
|
||||||
|
* @param deviceInfo with DeviceIdentifier, Timestamp, Lat, Lon, Bearing, Speed, ignition
|
||||||
|
*/
|
||||||
|
public void updateLocation(TraccarDevice device, TraccarPosition deviceInfo, int tenantId) throws TraccarConfigurationException, TrackerAlreadyExistException {
|
||||||
|
TrackerDeviceInfo res = null;
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.openConnection();
|
||||||
|
res = trackerDAO.getTrackerDevice(device.getId(), tenantId);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
String msg="Could add new device location";
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally{
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res == null){
|
||||||
|
try {
|
||||||
|
addDevice(device, tenantId);
|
||||||
|
} catch (TraccarConfigurationException e) {
|
||||||
|
String msg = "Error occurred add the new device";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} catch (TrackerAlreadyExistException e) {
|
||||||
|
String msg = "The device already exist";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TrackerAlreadyExistException(msg, e);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
String context = locationUpdatePort+"/?id="+deviceInfo.getDeviceIdentifier()+"×tamp="+deviceInfo.getTimestamp()+
|
||||||
|
"&lat="+deviceInfo.getLat()+"&lon="+deviceInfo.getLon()+"&bearing="+deviceInfo.getBearing()+
|
||||||
|
"&speed="+deviceInfo.getSpeed()+"&ignition=true";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(0, 0, endpoint, context, null,
|
||||||
|
TraccarHandlerConstants.Methods.GET, TraccarHandlerConstants.Types.DEVICE);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
log.info("Device GPS location added on traccar");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dis-enroll a Device operation.
|
||||||
|
* @param deviceId identified via deviceIdentifier
|
||||||
|
* @throws TraccarConfigurationException Failed while dis-enroll a Traccar Device operation
|
||||||
|
*/
|
||||||
|
public void disEndrollDevice(int deviceId, int tenantId) throws TraccarConfigurationException {
|
||||||
|
TrackerDeviceInfo res = null;
|
||||||
|
JSONObject obj = null;
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.beginTransaction();
|
||||||
|
res = trackerDAO.getTrackerDevice(deviceId, tenantId);
|
||||||
|
if(res!=null){
|
||||||
|
obj = new JSONObject(res);
|
||||||
|
if(obj!=null){
|
||||||
|
trackerDAO.removeTrackerDevice(deviceId, tenantId);
|
||||||
|
TrackerManagementDAOFactory.commitTransaction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
String msg = "Error occurred establishing the DB connection";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
String msg = "Error occurred while mapping with deviceId";
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally {
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(obj != null){
|
||||||
|
String context = defaultPort+"/api/devices/"+obj.getInt("traccarDeviceId");
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(obj.getInt("traccarDeviceId"), tenantId, endpoint, context, null,
|
||||||
|
TraccarHandlerConstants.Methods.DELETE, TraccarHandlerConstants.Types.DEVICE);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Traccar Device operation.
|
||||||
|
* @param groupInfo with groupName
|
||||||
|
* @throws TraccarConfigurationException Failed while add Traccar Device the operation
|
||||||
|
*/
|
||||||
|
public void addGroup(TraccarGroups groupInfo, int groupId, int tenantId) throws TraccarConfigurationException, TrackerAlreadyExistException {
|
||||||
|
TrackerGroupInfo res = null;
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.openConnection();
|
||||||
|
res = trackerDAO.getTrackerGroup(groupId, tenantId);
|
||||||
|
if (res!=null){
|
||||||
|
String msg = "The group already exit";
|
||||||
|
log.error(msg);
|
||||||
|
throw new TrackerAlreadyExistException(msg);
|
||||||
|
}
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
String msg = "Error occurred while mapping with deviceId .";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} finally {
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
log.info("response.body().string()");
|
||||||
|
try {
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
|
.build();
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url("http://localhost/?token=b2zNFM9CvXAaHVxaQcLw22GgCXnaluy9")
|
||||||
|
.method("GET", null)
|
||||||
|
.build();
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
log.info(response.body().string());
|
||||||
|
|
||||||
|
/*Desktop desktop = java.awt.Desktop.getDesktop();
|
||||||
|
URI oURL = new URI("http://localhost:8085");
|
||||||
|
desktop.browse(oURL);*/
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.info("IOException e" +e);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info("Exception e" +e );
|
||||||
|
}
|
||||||
|
log.info("response.body().string()");
|
||||||
|
|
||||||
|
|
||||||
|
if (res==null){
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("name", groupInfo.getName());
|
||||||
|
payload.put("attributes", new JSONObject());
|
||||||
|
|
||||||
|
String context = defaultPort+"/api/groups";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(groupId, tenantId, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.POST, TraccarHandlerConstants.Types.GROUP);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update Traccar Group operation.
|
||||||
|
* @param groupInfo with groupName
|
||||||
|
* @throws TraccarConfigurationException Failed while add Traccar Device the operation
|
||||||
|
*/
|
||||||
|
public void updateGroup(TraccarGroups groupInfo, int groupId, int tenantId) throws TraccarConfigurationException, TrackerAlreadyExistException {
|
||||||
|
TrackerGroupInfo res = null;
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.openConnection();
|
||||||
|
res = trackerDAO.getTrackerGroup(groupId, tenantId);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
String msg="Could not find traccar group details";
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally{
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((res==null) || (res.getTraccarGroupId()==0)){
|
||||||
|
//add a new traccar group
|
||||||
|
try {
|
||||||
|
addGroup(groupInfo, groupId, tenantId);
|
||||||
|
} catch (TraccarConfigurationException e) {
|
||||||
|
String msg = "Error occurred while mapping with groupId";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TraccarConfigurationException(msg, e);
|
||||||
|
} catch (TrackerAlreadyExistException e) {
|
||||||
|
String msg = "The group already exist";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new TrackerAlreadyExistException(msg, e);
|
||||||
|
}
|
||||||
|
}else if (res!=null && (res.getTraccarGroupId()!=0 && res.getStatus()==0)){
|
||||||
|
//update the traccargroupId and status
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.beginTransaction();
|
||||||
|
trackerDAO.updateTrackerGroupIdANDStatus(res.getTraccarGroupId(), groupId, tenantId, 1);
|
||||||
|
TrackerManagementDAOFactory.commitTransaction();
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
String msg = "Error occurred establishing the DB connection .";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
String msg="Could not add the traccar group";
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally{
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
JSONObject obj = new JSONObject(res);
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("id", obj.getInt("traccarGroupId"));
|
||||||
|
payload.put("name", groupInfo.getName());
|
||||||
|
payload.put("attributes", new JSONObject());
|
||||||
|
|
||||||
|
String context = defaultPort+"/api/groups/"+obj.getInt("traccarGroupId");
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(groupId, tenantId, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.PUT, TraccarHandlerConstants.Types.GROUP);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Traccar Device operation.
|
||||||
|
* @param groupId
|
||||||
|
* @throws TraccarConfigurationException Failed while add Traccar Device the operation
|
||||||
|
*/
|
||||||
|
public void deleteGroup(int groupId, int tenantId) throws TraccarConfigurationException {
|
||||||
|
TrackerGroupInfo res = null;
|
||||||
|
JSONObject obj = null;
|
||||||
|
try {
|
||||||
|
TrackerManagementDAOFactory.beginTransaction();
|
||||||
|
res = trackerDAO.getTrackerGroup(groupId, tenantId);
|
||||||
|
if(res!=null){
|
||||||
|
obj = new JSONObject(res);
|
||||||
|
if(obj!=null){
|
||||||
|
trackerDAO.removeTrackerGroup(obj.getInt("id"));
|
||||||
|
TrackerManagementDAOFactory.commitTransaction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
String msg = "Error occurred establishing the DB connection";
|
||||||
|
log.error(msg, e);
|
||||||
|
} catch (TrackerManagementDAOException e) {
|
||||||
|
TrackerManagementDAOFactory.rollbackTransaction();
|
||||||
|
String msg = "Error occurred while mapping with groupId";
|
||||||
|
log.error(msg, e);
|
||||||
|
} finally {
|
||||||
|
TrackerManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(obj!=null){
|
||||||
|
String context = defaultPort+"/api/groups/"+obj.getInt("traccarGroupId");
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(obj.getInt("traccarGroupId"), tenantId, endpoint, context,
|
||||||
|
null, TraccarHandlerConstants.Methods.DELETE, TraccarHandlerConstants.Types.GROUP);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fetchAllUsers(String type, TraccarUser traccarUser, int deviceId) throws TraccarConfigurationException {
|
||||||
|
String context = defaultPort+"/api/users/";
|
||||||
|
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("data", traccarUser);
|
||||||
|
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(deviceId, 0, endpoint, context,
|
||||||
|
payload, TraccarHandlerConstants.Methods.GET, type);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*private JSONObject TraccarUserPayload(TraccarUser traccarUser){
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("id", traccarUser.getId());
|
||||||
|
payload.put("name", traccarUser.getName());
|
||||||
|
payload.put("login", traccarUser.getLogin());
|
||||||
|
payload.put("email", traccarUser.getEmail());
|
||||||
|
payload.put("password", traccarUser.getPassword());
|
||||||
|
payload.put("token", traccarUser.getToken());
|
||||||
|
payload.put("administrator", traccarUser.getAdministrator());
|
||||||
|
payload.put("deviceLimit", traccarUser.getDeviceLimit());
|
||||||
|
payload.put("userLimit", traccarUser.getUserLimit());
|
||||||
|
payload.put("disabled", traccarUser.getDisabled());
|
||||||
|
payload.put("deviceReadonly", traccarUser.getDeviceReadonly());
|
||||||
|
payload.put("readonly", traccarUser.getReadonly());
|
||||||
|
payload.put("expirationTime", traccarUser.getExpirationTime());
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}*/
|
||||||
|
public void createUser(TraccarUser traccarUser, String type, int deviceId) throws TraccarConfigurationException {
|
||||||
|
JSONObject payload = TraccarUtil.TraccarUserPayload(traccarUser);
|
||||||
|
|
||||||
|
String context = defaultPort+"/api/users";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(deviceId, 0, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.POST, type);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateUser(JSONObject traccarUser) throws TraccarConfigurationException {
|
||||||
|
/*JSONObject payload = traccarUser;
|
||||||
|
String context = defaultPort+"/api/users";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(0, 0, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.PUT, TraccarHandlerConstants.Types.USER);
|
||||||
|
executor.execute(trackerExecutor);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPermission(int userId, int deviceId) throws TraccarConfigurationException {
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("userId", userId);
|
||||||
|
payload.put("deviceId", deviceId);
|
||||||
|
|
||||||
|
String context = defaultPort+"/api/permissions";
|
||||||
|
Runnable trackerExecutor = new TrackerExecutor(deviceId, 0, endpoint, context, payload,
|
||||||
|
TraccarHandlerConstants.Methods.POST, TraccarHandlerConstants.Types.PERMISSION);
|
||||||
|
executor.execute(trackerExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String fetchAllUsers() {
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder().build();
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(endpoint+defaultPort+"/api/users")
|
||||||
|
.method("GET", null)
|
||||||
|
.addHeader(authorization, authorizationKey)
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
return response.body().string();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return e.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String fetchUserInfo(String userName) throws TraccarConfigurationException {
|
||||||
|
String allUsers = fetchAllUsers(); //get all users
|
||||||
|
JSONArray fetchAllUsers = new JSONArray(allUsers); //loop users
|
||||||
|
for(int i=0; i<fetchAllUsers.length();i++){
|
||||||
|
|
||||||
|
//if login is null then check the name or if login is not null then check the login
|
||||||
|
if(
|
||||||
|
(!fetchAllUsers.getJSONObject(i).isNull("login") &&
|
||||||
|
fetchAllUsers.getJSONObject(i).getString("login").equals(userName)) ||
|
||||||
|
(fetchAllUsers.getJSONObject(i).isNull("login") &&
|
||||||
|
fetchAllUsers.getJSONObject(i).getString("name").equals(userName))
|
||||||
|
){
|
||||||
|
return fetchAllUsers.getJSONObject(i).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TraccarHandlerConstants.Types.USER_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String createUser(TraccarUser traccarUser) throws TraccarConfigurationException {
|
||||||
|
|
||||||
|
JSONObject payload = TraccarUtil.TraccarUserPayload(traccarUser);
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
|
.build();
|
||||||
|
MediaType mediaType = MediaType.parse("application/json");
|
||||||
|
RequestBody body = RequestBody.create(payload.toString(), mediaType);
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(endpoint+defaultPort+"/api/users")
|
||||||
|
.method("POST", body)
|
||||||
|
.addHeader(authorization, authorizationKey)
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
return response.body().string();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return e.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String updateUser(TraccarUser traccarUser, int userId) throws TraccarConfigurationException {
|
||||||
|
|
||||||
|
JSONObject payload = TraccarUtil.TraccarUserPayload(traccarUser);
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
|
.build();
|
||||||
|
MediaType mediaType = MediaType.parse("application/json");
|
||||||
|
RequestBody body = RequestBody.create(payload.toString(), mediaType);
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(endpoint+defaultPort+"/api/users/"+userId)
|
||||||
|
.method("PUT", body)
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.addHeader(authorization, authorizationKey)
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
return response.body().string();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return e.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String generateRandomString(int len) {
|
||||||
|
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||||
|
Random rnd = new Random();
|
||||||
|
StringBuilder sb = new StringBuilder(len);
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
sb.append(chars.charAt(rnd.nextInt(chars.length())));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private TraccarGateway getTraccarGateway(){
|
||||||
|
return TraccarConfigurationManager.getInstance().getTraccarConfig().getTraccarGateway(
|
||||||
|
TraccarHandlerConstants.TraccarConfig.GATEWAY_NAME);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package org.wso2.carbon.device.mgt.core.traccar.common.util;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.beans.TraccarDevice;
|
||||||
|
import org.wso2.carbon.device.mgt.core.traccar.common.beans.TraccarUser;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TraccarUtil {
|
||||||
|
public static JSONObject TraccarUserPayload(TraccarUser traccarUser){
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("id", traccarUser.getId());
|
||||||
|
payload.put("name", traccarUser.getName());
|
||||||
|
payload.put("login", traccarUser.getLogin());
|
||||||
|
payload.put("email", traccarUser.getEmail());
|
||||||
|
payload.put("password", traccarUser.getPassword());
|
||||||
|
payload.put("token", traccarUser.getToken());
|
||||||
|
payload.put("administrator", traccarUser.getAdministrator());
|
||||||
|
payload.put("deviceLimit", traccarUser.getDeviceLimit());
|
||||||
|
payload.put("userLimit", traccarUser.getUserLimit());
|
||||||
|
payload.put("disabled", traccarUser.getDisabled());
|
||||||
|
payload.put("deviceReadonly", traccarUser.getDeviceReadonly());
|
||||||
|
payload.put("readonly", traccarUser.getReadonly());
|
||||||
|
payload.put("expirationTime", traccarUser.getExpirationTime());
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject TraccarDevicePayload(TraccarDevice deviceInfo){
|
||||||
|
JSONObject payload = new JSONObject();
|
||||||
|
payload.put("name", deviceInfo.getDeviceName());
|
||||||
|
payload.put("uniqueId", deviceInfo.getUniqueId());
|
||||||
|
payload.put("status", deviceInfo.getStatus());
|
||||||
|
payload.put("disabled", deviceInfo.getDisabled());
|
||||||
|
payload.put("lastUpdate", deviceInfo.getLastUpdate());
|
||||||
|
payload.put("positionId", deviceInfo.getPositionId());
|
||||||
|
payload.put("groupId", deviceInfo.getGroupId());
|
||||||
|
payload.put("phone", deviceInfo.getPhone());
|
||||||
|
payload.put("model", deviceInfo.getModel());
|
||||||
|
payload.put("contact", deviceInfo.getContact());
|
||||||
|
payload.put("category", deviceInfo.getCategory());
|
||||||
|
List<String> geoFenceIds = new ArrayList<>();
|
||||||
|
payload.put("geofenceIds", geoFenceIds);
|
||||||
|
payload.put("attributes", new JSONObject());
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue