mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'master' into 'master'
Persit multiple locations in bulk See merge request entgra/carbon-device-mgt!580
This commit is contained in:
commit
f47f6bfde7
@ -80,6 +80,9 @@ public interface DeviceInformationManager {
|
|||||||
|
|
||||||
void addDeviceLocation(Device device, DeviceLocation deviceLocation) throws DeviceDetailsMgtException;
|
void addDeviceLocation(Device device, DeviceLocation deviceLocation) throws DeviceDetailsMgtException;
|
||||||
|
|
||||||
|
void addDeviceLocations(Device device, List<DeviceLocation> deviceLocations) throws
|
||||||
|
DeviceDetailsMgtException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method will return the device location with latitude, longitude, address etc..
|
* This method will return the device location with latitude, longitude, address etc..
|
||||||
* @param deviceIdentifier - Device identifier, device type.
|
* @param deviceIdentifier - Device identifier, device type.
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
|||||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
|
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
|
||||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
|
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -115,6 +116,16 @@ public interface DeviceDetailsDAO {
|
|||||||
void addDeviceLocationInfo(Device device, DeviceLocation deviceLocation, int tenantId)
|
void addDeviceLocationInfo(Device device, DeviceLocation deviceLocation, int tenantId)
|
||||||
throws DeviceDetailsMgtDAOException;
|
throws DeviceDetailsMgtDAOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add device location information to the database
|
||||||
|
* @param device Device object
|
||||||
|
* @param deviceLocation Device Location Object
|
||||||
|
* @param tenantId Tenant Id
|
||||||
|
* @throws DeviceDetailsMgtDAOException
|
||||||
|
*/
|
||||||
|
void addDeviceLocationsInfo(Device device, List<DeviceLocation> deviceLocation, int tenantId)
|
||||||
|
throws DeviceDetailsMgtDAOException;
|
||||||
|
|
||||||
void updateDeviceInformation(int deviceId, int enrollmentId, DeviceInfo newDeviceInfo) throws DeviceDetailsMgtDAOException;
|
void updateDeviceInformation(int deviceId, int enrollmentId, DeviceInfo newDeviceInfo) throws DeviceDetailsMgtDAOException;
|
||||||
|
|
||||||
void updateDeviceLocation(DeviceLocation deviceLocation, int enrollmentId) throws DeviceDetailsMgtDAOException;
|
void updateDeviceLocation(DeviceLocation deviceLocation, int enrollmentId) throws DeviceDetailsMgtDAOException;
|
||||||
|
|||||||
@ -36,6 +36,7 @@ import java.sql.PreparedStatement;
|
|||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
|
public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
|
||||||
@ -424,6 +425,45 @@ public class DeviceDetailsDAOImpl implements DeviceDetailsDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDeviceLocationsInfo(Device device, List<DeviceLocation> deviceLocation,
|
||||||
|
int tenantId) throws DeviceDetailsMgtDAOException {
|
||||||
|
Connection conn;
|
||||||
|
String errMessage;
|
||||||
|
String sql = "INSERT INTO " +
|
||||||
|
"DM_DEVICE_HISTORY_LAST_SEVEN_DAYS " +
|
||||||
|
"(DEVICE_ID, DEVICE_ID_NAME, TENANT_ID, DEVICE_TYPE_NAME, LATITUDE, LONGITUDE, SPEED, HEADING, " +
|
||||||
|
"TIMESTAMP, GEO_HASH, DEVICE_OWNER, DEVICE_ALTITUDE, DISTANCE) " +
|
||||||
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
try {
|
||||||
|
conn = this.getConnection();
|
||||||
|
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
|
for (DeviceLocation location : deviceLocation) {
|
||||||
|
stmt.setInt(1, device.getId());
|
||||||
|
stmt.setString(2, device.getDeviceIdentifier());
|
||||||
|
stmt.setInt(3, tenantId);
|
||||||
|
stmt.setString(4, device.getType());
|
||||||
|
stmt.setDouble(5, location.getLatitude());
|
||||||
|
stmt.setDouble(6, location.getLongitude());
|
||||||
|
stmt.setFloat(7, location.getSpeed());
|
||||||
|
stmt.setFloat(8, location.getBearing());
|
||||||
|
stmt.setLong(9, System.currentTimeMillis());
|
||||||
|
stmt.setString(10, GeoHashGenerator.encodeGeohash(location));
|
||||||
|
stmt.setString(11, device.getEnrolmentInfo().getOwner());
|
||||||
|
stmt.setDouble(12, location.getAltitude());
|
||||||
|
stmt.setDouble(13, location.getDistance());
|
||||||
|
stmt.addBatch();
|
||||||
|
}
|
||||||
|
stmt.executeBatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
errMessage = "Error occurred while updating the device location information to database.";
|
||||||
|
log.error(errMessage);
|
||||||
|
throw new DeviceDetailsMgtDAOException(errMessage, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateDeviceInformation(int deviceId, int enrollmentId, DeviceInfo newDeviceInfo) throws DeviceDetailsMgtDAOException {
|
public void updateDeviceInformation(int deviceId, int enrollmentId, DeviceInfo newDeviceInfo) throws DeviceDetailsMgtDAOException {
|
||||||
Connection conn;
|
Connection conn;
|
||||||
|
|||||||
@ -395,6 +395,35 @@ public class DeviceInformationManagerImpl implements DeviceInformationManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDeviceLocations(Device device, List<DeviceLocation> deviceLocations) throws DeviceDetailsMgtException {
|
||||||
|
try {
|
||||||
|
DeviceLocation mostRecentDeviceLocation = deviceLocations.get(deviceLocations.size() - 1);
|
||||||
|
mostRecentDeviceLocation.setDeviceId(device.getId());
|
||||||
|
DeviceManagementDAOFactory.beginTransaction();
|
||||||
|
DeviceLocation previousLocation = deviceDetailsDAO.getDeviceLocation(device.getId(),
|
||||||
|
device.getEnrolmentInfo().getId());
|
||||||
|
if (previousLocation == null) {
|
||||||
|
deviceDetailsDAO.addDeviceLocation(mostRecentDeviceLocation, device.getEnrolmentInfo().getId());
|
||||||
|
} else {
|
||||||
|
deviceDetailsDAO.updateDeviceLocation(mostRecentDeviceLocation, device.getEnrolmentInfo().getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
deviceDetailsDAO.addDeviceLocationsInfo(device, deviceLocations,
|
||||||
|
CarbonContext.getThreadLocalCarbonContext().getTenantId());
|
||||||
|
|
||||||
|
DeviceManagementDAOFactory.commitTransaction();
|
||||||
|
} catch (TransactionManagementException e) {
|
||||||
|
throw new DeviceDetailsMgtException("Transactional error occurred while adding the device location " +
|
||||||
|
"information.", e);
|
||||||
|
} catch (DeviceDetailsMgtDAOException e) {
|
||||||
|
DeviceManagementDAOFactory.rollbackTransaction();
|
||||||
|
throw new DeviceDetailsMgtException("Error occurred while adding the device location information.", e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceLocation getDeviceLocation(DeviceIdentifier deviceId) throws DeviceDetailsMgtException {
|
public DeviceLocation getDeviceLocation(DeviceIdentifier deviceId) throws DeviceDetailsMgtException {
|
||||||
Device device = getDevice(deviceId);
|
Device device = getDevice(deviceId);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user