use of org.eclipse.kapua.service.device.management.configuration.DeviceConfigurationFactory in project kapua by eclipse.
the class DeviceConfigurationManagementServiceImpl method put.
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void put(KapuaId scopeId, KapuaId deviceId, DeviceComponentConfiguration deviceComponentConfiguration, Long timeout) throws KapuaException {
//
// Argument Validation
ArgumentValidator.notNull(scopeId, "scopeId");
ArgumentValidator.notNull(deviceId, "deviceId");
ArgumentValidator.notNull(deviceComponentConfiguration, "componentConfiguration");
ArgumentValidator.notEmptyOrNull(deviceComponentConfiguration.getId(), "componentConfiguration.componentId");
//
// Check Access
KapuaLocator locator = KapuaLocator.getInstance();
AuthorizationService authorizationService = locator.getService(AuthorizationService.class);
PermissionFactory permissionFactory = locator.getFactory(PermissionFactory.class);
authorizationService.checkPermission(permissionFactory.newPermission(DeviceManagementDomain.DEVICE_MANAGEMENT, Actions.write, scopeId));
//
// Prepare the request
ConfigurationRequestChannel configurationRequestChannel = new ConfigurationRequestChannel();
configurationRequestChannel.setAppName(DeviceConfigurationAppProperties.APP_NAME);
configurationRequestChannel.setVersion(DeviceConfigurationAppProperties.APP_VERSION);
configurationRequestChannel.setMethod(KapuaMethod.WRITE);
configurationRequestChannel.setComponentId(deviceComponentConfiguration.getId());
ConfigurationRequestPayload configurationRequestPayload = new ConfigurationRequestPayload();
try {
DeviceConfigurationFactory deviceConfigurationFactory = locator.getFactory(DeviceConfigurationFactory.class);
DeviceConfiguration deviceConfiguration = deviceConfigurationFactory.newConfigurationInstance();
deviceConfiguration.getComponentConfigurations().add(deviceComponentConfiguration);
DeviceManagementSetting deviceManagementConfig = DeviceManagementSetting.getInstance();
String charEncoding = deviceManagementConfig.getString(DeviceManagementSettingKey.CHAR_ENCODING);
StringWriter sw = new StringWriter();
XmlUtil.marshal(deviceConfiguration, sw);
byte[] requestBody = sw.toString().getBytes(charEncoding);
configurationRequestPayload.setBody(requestBody);
new String(configurationRequestPayload.getBody());
} catch (Exception e) {
throw new DeviceManagementException(DeviceManagementErrorCodes.REQUEST_EXCEPTION, e, deviceComponentConfiguration);
}
ConfigurationRequestMessage configurationRequestMessage = new ConfigurationRequestMessage();
configurationRequestMessage.setScopeId(scopeId);
configurationRequestMessage.setDeviceId(deviceId);
configurationRequestMessage.setCapturedOn(new Date());
configurationRequestMessage.setPayload(configurationRequestPayload);
configurationRequestMessage.setChannel(configurationRequestChannel);
//
// Do put
DeviceCallExecutor deviceApplicationCall = new DeviceCallExecutor(configurationRequestMessage, timeout);
ConfigurationResponseMessage responseMessage = (ConfigurationResponseMessage) deviceApplicationCall.send();
//
// Create event
DeviceEventService deviceEventService = locator.getService(DeviceEventService.class);
DeviceEventFactory deviceEventFactory = locator.getFactory(DeviceEventFactory.class);
DeviceEventCreator deviceEventCreator = deviceEventFactory.newCreator(scopeId, deviceId, responseMessage.getReceivedOn(), DeviceConfigurationAppProperties.APP_NAME.getValue());
deviceEventCreator.setPosition(responseMessage.getPosition());
deviceEventCreator.setSentOn(responseMessage.getSentOn());
deviceEventCreator.setAction(KapuaMethod.WRITE);
deviceEventCreator.setResponseCode(responseMessage.getResponseCode());
deviceEventCreator.setEventMessage(responseMessage.getPayload().toDisplayString());
deviceEventService.create(deviceEventCreator);
}
use of org.eclipse.kapua.service.device.management.configuration.DeviceConfigurationFactory in project kapua by eclipse.
the class GwtDeviceManagementServiceImpl method updateComponentConfiguration.
@Override
public void updateComponentConfiguration(GwtXSRFToken xsrfToken, GwtDevice gwtDevice, GwtConfigComponent gwtCompConfig) throws GwtKapuaException {
//
// Checking validity of the given XSRF Token
checkXSRFToken(xsrfToken);
KapuaLocator locator = KapuaLocator.getInstance();
DeviceConfigurationManagementService deviceConfigurationManagementService = locator.getService(DeviceConfigurationManagementService.class);
DeviceConfigurationFactory deviceConfigurationManagementFactory = locator.getFactory(DeviceConfigurationFactory.class);
// set name and properties
DeviceComponentConfiguration compConfig = deviceConfigurationManagementFactory.newComponentConfigurationInstance(gwtCompConfig.getUnescapedComponentId());
compConfig.setName(gwtCompConfig.getUnescapedComponentName());
Map<String, Object> compProps = new HashMap<String, Object>();
for (GwtConfigParameter gwtConfigParam : gwtCompConfig.getParameters()) {
Object objValue;
int cardinality = gwtConfigParam.getCardinality();
if (cardinality == 0 || cardinality == 1 || cardinality == -1) {
String strValue = gwtConfigParam.getValue();
objValue = getObjectValue(gwtConfigParam, strValue);
} else {
String[] strValues = gwtConfigParam.getValues();
objValue = getObjectValue(gwtConfigParam, strValues);
}
compProps.put(gwtConfigParam.getName(), objValue);
}
compConfig.setProperties(compProps);
// execute the update
try {
KapuaId scopeId = KapuaEid.parseShortId(gwtDevice.getScopeId());
KapuaId deviceId = KapuaEid.parseShortId(gwtDevice.getId());
deviceConfigurationManagementService.put(scopeId, deviceId, compConfig, null);
//
// Add an additional delay after the configuration update
// to give the time to the device to apply the received
// configuration
Thread.sleep(1000);
} catch (Throwable t) {
KapuaExceptionHandler.handle(t);
}
}
Aggregations