diff --git a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsPanel.java b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsPanel.java index 24a2d3a78e7..24039a518ea 100644 --- a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsPanel.java +++ b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsPanel.java @@ -26,6 +26,7 @@ import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.FieldSet; import com.extjs.gxt.ui.client.widget.form.FormPanel; +import com.extjs.gxt.ui.client.widget.form.LabelField; import com.extjs.gxt.ui.client.widget.form.NumberField; import com.extjs.gxt.ui.client.widget.form.Radio; import com.extjs.gxt.ui.client.widget.form.RadioGroup; @@ -244,6 +245,7 @@ public void handleEvent(BaseEvent be) { for (GwtDeviceAssetChannel channel : asset.getChannels()) { field = paintChannel(channel); field.setEnabled(currentSession.hasPermission(DeviceManagementSessionPermission.write())); + actionFieldSet.add(field, formData); } if (asset.getDescription() != null) { @@ -261,34 +263,40 @@ public void handleEvent(BaseEvent be) { private Field paintChannel(GwtDeviceAssetChannel channel) { Field field; - switch (channel.getTypeEnum()) { - case LONG: - case DOUBLE: - case FLOAT: - case INT: - case INTEGER: - field = paintNumberChannel(channel); - break; - case BOOLEAN: - field = paintBooleanChannel(channel); - break; - case STRING: - default: - field = paintTextChannel(channel); - break; + + if (!channel.hasError()) { + switch (channel.getTypeEnum()) { + case LONG: + case DOUBLE: + case FLOAT: + case INT: + case INTEGER: + field = paintNumberChannel(channel); + break; + case BOOLEAN: + field = paintBooleanChannel(channel); + break; + case STRING: + default: + field = paintTextChannel(channel); + break; + } + } else { + field = paintErrorChannel(channel); } + field.setName(channel.getName()); field.setItemId(channel.getName()); field.setReadOnly(channel.getModeEnum().equals(GwtDeviceAssetChannelMode.READ)); + return field; } private Field paintTextChannel(GwtDeviceAssetChannel channel) { TextField field = new TextField(); - field.setName(channel.getName()); field.setAllowBlank(true); - field.setFieldLabel(channel.getName() + " (" + channel.getType() + " - " + channel.getMode() + ")"); + field.setFieldLabel(createFieldLabelFromChannel(channel)); field.setLabelStyle(CssLiterals.WORD_BREAK_BREAK_ALL); field.addPlugin(dirtyPlugin); @@ -301,9 +309,8 @@ private Field paintTextChannel(GwtDeviceAssetChannel channel) { private Field paintNumberChannel(GwtDeviceAssetChannel channel) { NumberField field = new NumberField(); - field.setName(channel.getName()); field.setAllowBlank(true); - field.setFieldLabel(channel.getName() + " (" + channel.getType() + " - " + channel.getMode() + ")"); + field.setFieldLabel(createFieldLabelFromChannel(channel)); field.setLabelStyle(CssLiterals.WORD_BREAK_BREAK_ALL); field.addPlugin(dirtyPlugin); field.setMaxValue(MAX_SAFE_INTEGER); @@ -356,9 +363,7 @@ private Field paintBooleanChannel(GwtDeviceAssetChannel channel) { radioFalse.setItemId("false"); RadioGroup radioGroup = new RadioGroup(); - radioGroup.setName(channel.getName()); - radioGroup.setItemId(channel.getName()); - radioGroup.setFieldLabel(channel.getName() + " (" + channel.getType() + " - " + channel.getMode() + ")"); + radioGroup.setFieldLabel(createFieldLabelFromChannel(channel)); radioGroup.setLabelStyle(CssLiterals.WORD_BREAK_BREAK_ALL); radioGroup.add(radioTrue); radioGroup.add(radioFalse); @@ -383,4 +388,30 @@ private Field paintBooleanChannel(GwtDeviceAssetChannel channel) { return radioGroup; } + /** + * Paints a {@link GwtDeviceAssetChannel} which when on error while reading the values form it. + * + * @param channel The {@link GwtDeviceAssetChannel} that when on error. + * @return A {@link LabelField} with the {@link GwtDeviceAssetChannel#getError()} + * @since 2.0.0 + */ + private LabelField paintErrorChannel(GwtDeviceAssetChannel channel) { + LabelField labelField = new LabelField(); + labelField.setFieldLabel(createFieldLabelFromChannel(channel)); + labelField.setText(channel.getError()); + labelField.setLabelStyle(CssLiterals.WORD_BREAK_BREAK_ALL); + + return labelField; + } + + /** + * Creates the {@link Field#getFieldLabel()} from the given {@link GwtDeviceAssetChannel} + * + * @param deviceAssetChannel The {@link GwtDeviceAssetChannel} from which to extract data. + * @return A formatted {@link String} with the laberl for the {@link Field}. + * @since 2.0.0 + */ + private String createFieldLabelFromChannel(GwtDeviceAssetChannel deviceAssetChannel) { + return deviceAssetChannel.getName() + " (" + deviceAssetChannel.getType() + " - " + deviceAssetChannel.getMode() + ")"; + } } diff --git a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsValues.java b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsValues.java index a2e18078af9..49f83113200 100644 --- a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsValues.java +++ b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/client/device/assets/DeviceAssetsValues.java @@ -383,28 +383,23 @@ public void onSuccess(Boolean enabled) { }); } - public void refreshAssetPanel(GwtDeviceAsset asset) { + public void refreshAssetPanel(final GwtDeviceAsset asset) { apply.setEnabled(false); reset.setEnabled(false); if (assetValuesPanel != null) { assetValuesPanel.removeFromParent(); } - if (asset != null) { - assetValuesPanel = new DeviceAssetsPanel(asset, currentSession); - assetValuesPanel.addListener(Events.Change, new Listener() { - - @Override - public void handleEvent(BaseEvent be) { - apply.setEnabled(true); - reset.setEnabled(true); - } - }); + assetValuesPanel = new DeviceAssetsPanel(asset, currentSession); + assetValuesPanel.addListener(Events.Change, new Listener() { + @Override + public void handleEvent(BaseEvent be) { + apply.setEnabled(asset != null); + reset.setEnabled(asset != null); + } + }); - } else { - assetValuesPanel = new DeviceAssetsPanel(null, currentSession); - } assetValuesContainer.add(assetValuesPanel, centerData); assetValuesContainer.layout(); } diff --git a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/server/GwtDeviceAssetServiceImpl.java b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/server/GwtDeviceAssetServiceImpl.java index 8315ba09b4e..36a4f293b49 100644 --- a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/server/GwtDeviceAssetServiceImpl.java +++ b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/server/GwtDeviceAssetServiceImpl.java @@ -29,7 +29,6 @@ import org.eclipse.kapua.model.id.KapuaId; import org.eclipse.kapua.service.device.management.asset.DeviceAsset; import org.eclipse.kapua.service.device.management.asset.DeviceAssetChannel; -import org.eclipse.kapua.service.device.management.asset.DeviceAssetChannelMode; import org.eclipse.kapua.service.device.management.asset.DeviceAssetManagementService; import org.eclipse.kapua.service.device.management.asset.DeviceAssets; import org.eclipse.kapua.service.device.management.asset.store.DeviceAssetStoreFactory; @@ -87,12 +86,11 @@ public List get(PagingLoadConfig pagingLoadConfig, String scopeI DeviceAsset assetMetadata = assetsMetadata.getAssets().get(assetIndex); DeviceAsset assetValues = assetsValues.getAssets().get(assetIndex); for (DeviceAssetChannel channelMetadata : assetMetadata.getChannels()) { - if (channelMetadata.getMode().equals(DeviceAssetChannelMode.READ) || channelMetadata.getMode().equals(DeviceAssetChannelMode.READ_WRITE)) { - for (DeviceAssetChannel channelValue : assetValues.getChannels()) { - if (channelValue.getName().equals(channelMetadata.getName())) { - channelMetadata.setValue(channelValue.getValue()); - break; - } + for (DeviceAssetChannel channelValue : assetValues.getChannels()) { + if (channelValue.getName().equals(channelMetadata.getName())) { + channelMetadata.setValue(channelValue.getValue()); + channelMetadata.setError(channelValue.getError()); + break; } } } @@ -100,12 +98,13 @@ public List get(PagingLoadConfig pagingLoadConfig, String scopeI gwtAssets = KapuaGwtDeviceModelConverter.convertDeviceAssets(assetsMetadata); } catch (Throwable t) { - KapuaExceptionHandler.handle(t); + throw KapuaExceptionHandler.buildExceptionFromError(t); } return gwtAssets.getAssets(); } // Asset Store Settings + @Override public boolean isStoreServiceEnabled(String scopeIdString, String deviceIdString) throws GwtKapuaException { try { KapuaId scopeId = GwtKapuaCommonsModelConverter.convertKapuaId(scopeIdString); diff --git a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/shared/model/management/assets/GwtDeviceAssetChannel.java b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/shared/model/management/assets/GwtDeviceAssetChannel.java index 1fd05a25b7b..951b9891568 100644 --- a/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/shared/model/management/assets/GwtDeviceAssetChannel.java +++ b/console/module/device/src/main/java/org/eclipse/kapua/app/console/module/device/shared/model/management/assets/GwtDeviceAssetChannel.java @@ -90,6 +90,10 @@ public void setError(String error) { set("error", error); } + public boolean hasError() { + return getError() != null; + } + public String getValue() { return get("value"); }