mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
added update device properties functionality for device types
This commit is contained in:
parent
6603015614
commit
c8d56f66ea
@ -546,6 +546,64 @@ public interface DeviceAgentService {
|
|||||||
@ApiParam(name = "operation", value = "Operation object with data.", required = true)
|
@ApiParam(name = "operation", value = "Operation object with data.", required = true)
|
||||||
@Valid Operation operation);
|
@Valid Operation operation);
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("/properties/{type}/{id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "PUT",
|
||||||
|
value = "Update Properties",
|
||||||
|
notes = "Update device properties.",
|
||||||
|
tags = "Device Agent Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:device:modify")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully updated the operations.",
|
||||||
|
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. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response updateDeviceProperties(@ApiParam(name = "type", value = "The device type, such as ios, android or windows.", required = true)
|
||||||
|
@PathParam("type") String type,
|
||||||
|
@ApiParam(name = "id", value = "The device id.", required = true)
|
||||||
|
@PathParam("id") String deviceId,
|
||||||
|
@ApiParam(name = "properties", value = "device properties list.", required = true)
|
||||||
|
@Valid List<Device.Property> properties);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/status/operations/{type}/{id}")
|
@Path("/status/operations/{type}/{id}")
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
import org.apache.axis2.AxisFault;
|
import org.apache.axis2.AxisFault;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@ -518,6 +519,38 @@ public class DeviceAgentServiceImpl implements DeviceAgentService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@PUT
|
||||||
|
@Path("/operations/{type}/{id}")
|
||||||
|
public Response updateDeviceProperties(@PathParam("type") String type, @PathParam("id") String deviceId,
|
||||||
|
@Valid List<Device.Property> properties) {
|
||||||
|
try {
|
||||||
|
if (!DeviceMgtAPIUtils.getDeviceManagementService().getAvailableDeviceTypes().contains(type)) {
|
||||||
|
String errorMessage = "Device type is invalid";
|
||||||
|
log.error(errorMessage);
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||||
|
}
|
||||||
|
if(properties == null) {
|
||||||
|
String errorMessage = "Properties cannot be empty";
|
||||||
|
log.error(errorMessage);
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||||
|
}
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, type);
|
||||||
|
if (!DeviceMgtAPIUtils.isValidDeviceIdentifier(deviceIdentifier)) {
|
||||||
|
String msg = "Device not found for identifier '" + deviceId + "'";
|
||||||
|
log.error(msg);
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceMgtAPIUtils.getDeviceManagementService().updateProperties(deviceIdentifier, properties);
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
String errorMessage = "Issue in retrieving device management service instance";
|
||||||
|
log.error(errorMessage, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).build();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/status/operations/{type}/{id}")
|
@Path("/status/operations/{type}/{id}")
|
||||||
public Response getOperationsByDeviceAndStatus(@PathParam("type") String type, @PathParam("id") String deviceId,
|
public Response getOperationsByDeviceAndStatus(@PathParam("type") String type, @PathParam("id") String deviceId,
|
||||||
|
|||||||
@ -128,6 +128,16 @@ public interface DeviceManager {
|
|||||||
*/
|
*/
|
||||||
Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
|
Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to update device properties.
|
||||||
|
*
|
||||||
|
* @param deviceId identifier to identify the device
|
||||||
|
* @param list device properties list
|
||||||
|
* @return A boolean indicating the status of the operation.
|
||||||
|
* @throws DeviceManagementException If some unusual behaviour is observed while updating the device properties
|
||||||
|
*/
|
||||||
|
boolean updateDeviceProperties(DeviceIdentifier deviceId, List<Device.Property> list) throws DeviceManagementException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to update device information.
|
* Method to update device information.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -552,6 +552,8 @@ public interface DeviceManagementProviderService {
|
|||||||
|
|
||||||
void updateOperation(DeviceIdentifier deviceId, Operation operation) throws OperationManagementException;
|
void updateOperation(DeviceIdentifier deviceId, Operation operation) throws OperationManagementException;
|
||||||
|
|
||||||
|
boolean updateProperties(DeviceIdentifier deviceId, List<Device.Property> properties) throws DeviceManagementException;
|
||||||
|
|
||||||
Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId, int operationId)
|
Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId, int operationId)
|
||||||
throws OperationManagementException;
|
throws OperationManagementException;
|
||||||
|
|
||||||
|
|||||||
@ -1426,6 +1426,28 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
.updateOperation(deviceId, operation);
|
.updateOperation(deviceId, operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean updateProperties(DeviceIdentifier deviceId, List<Device.Property> properties)
|
||||||
|
throws DeviceManagementException {
|
||||||
|
if (deviceId == null || properties == null) {
|
||||||
|
String msg = "Received incomplete data for updateDeviceInfo";
|
||||||
|
log.error(msg);
|
||||||
|
throw new DeviceManagementException(msg);
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Update device info of device: " + deviceId.getId());
|
||||||
|
}
|
||||||
|
DeviceManager deviceManager = this.getDeviceManager(deviceId.getType());
|
||||||
|
if (deviceManager == null) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Device Manager associated with the device type '" + deviceId.getType() + "' is null. " +
|
||||||
|
"Therefore, not attempting method 'updateProperties'");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return deviceManager.updateDeviceProperties(deviceId, properties);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId,
|
public Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId,
|
||||||
int operationId) throws OperationManagementException {
|
int operationId) throws OperationManagementException {
|
||||||
|
|||||||
@ -92,6 +92,11 @@ public class TestDeviceManager implements DeviceManager {
|
|||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override public boolean updateDeviceProperties(DeviceIdentifier deviceId, List<Device.Property> list)
|
||||||
|
throws DeviceManagementException {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device)
|
public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device)
|
||||||
throws DeviceManagementException {
|
throws DeviceManagementException {
|
||||||
|
|||||||
@ -385,6 +385,27 @@ public class DeviceTypeManager implements DeviceManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean updateDeviceProperties(DeviceIdentifier deviceId, List<Device.Property> propertyList)
|
||||||
|
throws DeviceManagementException {
|
||||||
|
boolean status = false;
|
||||||
|
if (propertiesExist) {
|
||||||
|
try {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Getting the details of " + deviceType + " device : '" + deviceId.getId() + "'");
|
||||||
|
}
|
||||||
|
Device updatedDevice = new Device();
|
||||||
|
updatedDevice.setDeviceIdentifier(deviceId.getId());
|
||||||
|
updatedDevice.setProperties(propertyList);
|
||||||
|
status = deviceTypePluginDAOManager.getDeviceDAO().updateDevice(updatedDevice);
|
||||||
|
} catch (DeviceTypeMgtPluginException e) {
|
||||||
|
throw new DeviceManagementException(
|
||||||
|
"Error occurred while fetching the " + deviceType + " device: '" + deviceId.getId() + "'", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setOwnership(DeviceIdentifier deviceId, String ownershipType)
|
public boolean setOwnership(DeviceIdentifier deviceId, String ownershipType)
|
||||||
throws DeviceManagementException {
|
throws DeviceManagementException {
|
||||||
|
|||||||
@ -139,10 +139,10 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
stmt.setString(1, property.getValue());
|
stmt.setString(1, property.getValue());
|
||||||
stmt.setString(1, deviceType);
|
stmt.setString(2, deviceType);
|
||||||
stmt.setString(2, device.getDeviceIdentifier());
|
stmt.setString(3, device.getDeviceIdentifier());
|
||||||
stmt.setString(3, property.getName());
|
stmt.setString(4, property.getName());
|
||||||
stmt.setInt(4, PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true));
|
stmt.setInt(5, PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true));
|
||||||
stmt.addBatch();
|
stmt.addBatch();
|
||||||
}
|
}
|
||||||
stmt.executeBatch();
|
stmt.executeBatch();
|
||||||
|
|||||||
@ -71,6 +71,7 @@ public class DeviceTypeManagerTest {
|
|||||||
private Field deviceTypePluginDAOField;
|
private Field deviceTypePluginDAOField;
|
||||||
private Field deviceTypeDAOHandlerField;
|
private Field deviceTypeDAOHandlerField;
|
||||||
private String[] customDeviceTypeProperties = {"custom_property", "custom_property2"};
|
private String[] customDeviceTypeProperties = {"custom_property", "custom_property2"};
|
||||||
|
private String updatedDeviceTypePropertyValue = "custom_property_updated";
|
||||||
private final String SQL_FOLDER = "sql-files" + File.separator;
|
private final String SQL_FOLDER = "sql-files" + File.separator;
|
||||||
|
|
||||||
@BeforeClass(description = "Mocking the classes for testing")
|
@BeforeClass(description = "Mocking the classes for testing")
|
||||||
@ -221,6 +222,23 @@ public class DeviceTypeManagerTest {
|
|||||||
"Existing device update failed");
|
"Existing device update failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test (description = "This test case tests the updateDeviceProperties method")
|
||||||
|
public void testUpdateDeviceProperties() throws DeviceManagementException {
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(customDeviceType, customDeviceType);
|
||||||
|
Device customDevice = customDeviceTypeManager
|
||||||
|
.getDevice(deviceIdentifier);
|
||||||
|
List<Device.Property> list = customDevice.getProperties();
|
||||||
|
Assert.assertEquals(customDevice.getProperties().size(), 2,
|
||||||
|
"GetDevice call" + " failed in custom deviceTypeManager");
|
||||||
|
Device.Property property = list.get(0);
|
||||||
|
property.setValue(updatedDeviceTypePropertyValue);
|
||||||
|
customDeviceTypeManager.updateDeviceProperties(deviceIdentifier, list);
|
||||||
|
customDevice = customDeviceTypeManager
|
||||||
|
.getDevice(deviceIdentifier);
|
||||||
|
Assert.assertEquals(customDevice.getProperties().get(0).getValue(), updatedDeviceTypePropertyValue,
|
||||||
|
"GetDevice call" + " failed in custom deviceTypeManager");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To create sample android devices to add to DAO Layer.
|
* To create sample android devices to add to DAO Layer.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -86,6 +86,11 @@ public class TypeXDeviceManager implements DeviceManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override public boolean updateDeviceProperties(DeviceIdentifier deviceId, List<Device.Property> list)
|
||||||
|
throws DeviceManagementException {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device)
|
public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device)
|
||||||
throws DeviceManagementException {
|
throws DeviceManagementException {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user