";
+ public static final String DIV_DESCRIPTION = "
";
- private static final String DIV_CLOSE = "
";
+ public static final String DIV_CLOSE = "
";
private static final String DRAG_COUNT_ELEMENT = "var x = document.getElementById('sp-drag-count'); ";
private static final String CLOSE_BRACE = "\"; }';";
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java
index 1caa03d79..3e8c3436b 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java
@@ -518,10 +518,6 @@ public final class SPUIComponentIdProvider {
* Tab sheet id.
*/
public static final String TARGET_DETAILS_TABSHEET = "target.details.tabsheet";
- /**
- * Tab sheet id.
- */
- public static final String DISTRIBUTION_DETAILS_TABSHEET = "distribution.details.tabsheet.";
/**
* Combobox id.
@@ -962,6 +958,70 @@ public final class SPUIComponentIdProvider {
*/
public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id";
+ /**
+ * Software module table - Manage metadata id.
+ */
+ public static final String SW_TABLE_MANAGE_METADATA_ID = "swtable.manage.metadata.id";
+
+
+ /**
+ * Metadata key id.
+ */
+ public static final String METADATA_KEY_FIELD_ID = "metadata.key.id";
+
+ /**
+ * Metadata value id.
+ */
+ public static final String METADATA_VALUE_ID = "metadata.value.id";
+ /**
+ * Metadata save id.
+ */
+ public static final String METADTA_SAVE_ICON_ID = "metadata.save.icon.id";
+
+ /**
+ * Metadata discard id.
+ */
+ public static final String METADTA_DISCARD_ICON_ID = "metadata.discard.icon.id";
+
+ /**
+ * Metadata add icon id.
+ */
+ public static final String METADTA_ADD_ICON_ID = "metadata.add.icon.id";
+ /**
+ * Metadata table id.
+ */
+ public static final String METDATA_TABLE_ID = "metadata.table.id";
+
+ /**
+ * Distribution set table - Manage metadata id.
+ */
+ public static final String DS_TABLE_MANAGE_METADATA_ID = "dstable.manage.metadata.id";
+
+ /**
+ * DistributionSet - Metadata button id.
+ */
+ public static final String DS_METADATA_DETAIL_LINK = "distributionset.metadata.detail.link";
+
+ /**
+ * Metadata popup id.
+ */
+ public static final String METADATA_POPUP_ID = "metadata.popup.id";
+
+ /**
+ * DistributionSet table details tab id in Distributions .
+ */
+ public static final String DISTRIBUTIONSET_DETAILS_TABSHEET_ID = "distributionset.details.tabsheet";
+
+ /**
+ * Software module table details tab id in Distributions .
+ */
+ public static final String DIST_SW_MODULE_DETAILS_TABSHEET_ID = "dist.sw.module.details.tabsheet";
+
+ /**
+ * Software Module - Metadata button id.
+ */
+ public static final String SW_METADATA_DETAIL_LINK = "softwaremodule.metadata.detail.link";
+
/**
* Table multiselect for selecting DistType
*/
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java
index 73ed628d5..f035c4995 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java
@@ -1017,6 +1017,21 @@ public final class SPUIDefinitions {
* Rollout action column property.
*/
public static final String ROLLOUT_ACTION = "rollout-action";
+
+ /**
+ * DistributionSet Metadata tab Id
+ */
+ public static final String DISTRIBUTIONSET_METADATA_TAB_ID = "distSet.metadata.tab.id";
+
+ /**
+ * SoftwareModule Metadata tab Id
+ */
+ public static final String SOFTWAREMODULE_METADATA_TAB_ID = "swModule.metadata.tab.id";
+
+ /***
+ * Custom window for metadata.
+ */
+ public static final String CUSTOM_METADATA_WINDOW = "custom.metadata.window";
/**
* /** Constructor.
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java
index 5e6feceb2..d930b89ea 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java
@@ -560,6 +560,11 @@ public final class SPUILabelDefinitions {
* Rollout group installed percentage column property.
*/
public static final String ROLLOUT_GROUP_INSTALLED_PERCENTAGE = "finishedPercentage";
+
+ /**
+ * Add metadata icon.
+ */
+ public static final String METADATA_ICON = "metadataDls";
/**
* Constructor.
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java
index 4ede7204d..2541348b6 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java
@@ -136,6 +136,11 @@ public final class SPUIStyleDefinitions {
* Artifact Details icon in Distribution View.
*/
public static final String ARTIFACT_DTLS_ICON = "swm-artifact-dtls-icon";
+
+ /**
+ * Distribution metadata icon style.
+ */
+ public static final String DS_METADATA_ICON = "ds-metadata-icon";
/**
* Target table style.
@@ -293,6 +298,10 @@ public final class SPUIStyleDefinitions {
* Status pending icon.
*/
public static final String STATUS_ICON_PENDING = "statusIconPending";
+ /**
+ * Grid style.
+ */
+ public static final String METADATA_GRID = "metadata-grid";
/**
* Footer layout style.
diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss
index 297524544..330956017 100644
--- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss
+++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss
@@ -57,4 +57,8 @@
margin-top: 20px !important;
}
+ .metadata-table-margin {
+ margin-top:3px;
+ }
+
}
diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss
index 3bfc12aac..2be45904a 100644
--- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss
+++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss
@@ -182,6 +182,7 @@
float: right;
}
+
.v-button-generatedColumnPadding {
height: 28px;
padding: 0 6px !important;
@@ -189,5 +190,31 @@
border-radius: 4px;
}
+ .metadata-grid {
+ tr {
+ .icon-only {
+ visibility: hidden;
+ color: $discard-icon-color;
+ }
+ }
+ tr.v-grid-row-selected{
+ .icon-only .v-icon {
+ color : $widget-bg;
+ }
+ }
+
+ tr.v-grid-row-selected:hover {
+ .icon-only {
+ visibility: visible;
+ color: $widget-bg !important;
+ }
+ }
+
+ tr:hover {
+ .icon-only {
+ visibility: visible;
+ }
+ }
+ }
}
diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss
index ad5556f08..8916f4b32 100644
--- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss
+++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss
@@ -48,9 +48,6 @@
.distributionPin {
line-height: 15px;
background-color: none;
- margin-bottom: 0 !important;
- margin-right: 0 !important;
- padding: 0;
font-weight: normal;
}
@@ -143,4 +140,8 @@
line-height: 21px;
border: 1px solid $widget-border-color;
}
+
+ .ds-metadata-icon{
+ line-height:15px;
+ }
}
diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss
index 128c66e55..05d1c7460 100644
--- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss
+++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss
@@ -139,5 +139,4 @@ $v-included-components: remove($v-included-components, form);
background-position: bottom;
background-repeat: no-repeat;
}
-
}
diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties
index 7b0ff46b4..383341f4f 100644
--- a/hawkbit-ui/src/main/resources/messages.properties
+++ b/hawkbit-ui/src/main/resources/messages.properties
@@ -57,6 +57,7 @@ caption.new.softwaremodule.jvm = Configure New Runtime
caption.new.softwaremodule.os = Configure New OS
caption.filter.simple = Simple Filter
caption.filter.custom = Custom Filter
+caption.metadata = Metadata
caption.add.softwaremodule = Configure Software Module
caption.add.new.dist = Configure New Distribution
@@ -89,6 +90,9 @@ caption.force.action.confirmbox = Confirm Force Active Action
caption.confirm.abort.action = Confirm Abort Action
caption.filter.delete.confirmbox = Confirm Filter Delete Action
+caption.metadata.popup = Metadata of
+caption.metadata.delete.action.confirmbox = Confirm Metadata Delete Action
+
# Labels prefix with - label
label.dist.details.type = Type :
@@ -176,6 +180,7 @@ textfield.version = Version
textfield.vendor = Vendor
textfield.description = Description
textfield.customfiltername = Filter name
+textfield.value = Value
ui.version = Powered by Bosch IoT Software Provisioning
prompt.target.id = Controller ID
@@ -194,6 +199,7 @@ tooltip.timeforced.item=Soft update until a specific time and then the action wi
tooltip.check.for.mandatory=Check to make Mandatory
tooltip.artifact.icon=Show Artifact Details
tooltip.click.to.edit = Click to edit
+tooltip.metadata.icon = Manage Metadata
# Notification messages prefix with - message
message.save.success = {0} saved successfully
@@ -373,6 +379,13 @@ message.dist.discard.success = All Distributions are discarded successfully !
message.assign.discard.success = All assignments are discarded successfully !
message.target.ds.assign.success = Assignments saved successfully !
message.bulk.upload.assignment.failed = Distribution set assignment failed as distribution set no longer exists!
+message.key.missing = Key is missing !
+message.value.missing = Value is missing !
+message.metadata.saved = Metadata with key {0} successfully saved !
+message.metadata.updated = Metadata with key {0} successfully updated !
+message.metadata.duplicate.check = Metadata with key {0} already exists, please enter another value
+message.metadata.deleted.successfully = Metadata with key {0} successfully deleted !
+message.confirm.delete.metadata = Are you sure that you want to delete metadata with key {0} ?
# Login view
notification.login.title=Welcome to Bosch IoT Software Provisioning.
@@ -438,14 +451,8 @@ header.distributionset = Distribution set
header.numberofgroups = No. of groups
header.detail.status = Detail status
header.total.targets = Total targets
-header.type = Type
-header.swmodules = SwModules
-header.migrations.step=IsRequiredMigrationStep
-
-header.action=Actions
-header.action.run=Run
-header.action.pause=Pause
-header.action.update=Edit
+header.key = Key
+header.value = Value
distribution.details.header = Distribution set
target.details.header = Target
diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties
index e88c12782..cec24e1d8 100644
--- a/hawkbit-ui/src/main/resources/messages_de.properties
+++ b/hawkbit-ui/src/main/resources/messages_de.properties
@@ -14,6 +14,7 @@
# Button names prefix with - button
button.save = Save
button.delete = Delete
+button.discard = Discard
button.discard.all = Discard All
button.delete.all = Delete All
button.assign.all = Save Assign
@@ -55,6 +56,8 @@ caption.error = Error
caption.new.softwaremodule.application = Configure New Application
caption.new.softwaremodule.jvm = Configure New Runtime
caption.new.softwaremodule.os = Configure New OS
+caption.metadata = Metadata
+
caption.add.softwaremodule = Configure Software Module
caption.add.new.dist = Configure New Distribution
@@ -88,6 +91,8 @@ caption.filter.custom = Custom Filter
caption.filter.delete.confirmbox = Confirm Filter Delete Action
caption.confirm.abort.action = Confirm Abort Action
+caption.metadata.popup = Metadata of
+caption.metadata.delete.action.confirmbox = Confirm Metadata Delete Action
# Labels prefix with - label
label.dist.details.type = Type :
@@ -174,6 +179,7 @@ textfield.version = Version
textfield.vendor = Vendor
textfield.description = Description
textfield.customfiltername = Filter name
+textfield.value = Value
ui.version = Powered by Bosch IoT Software Provisioning
prompt.target.id = Controller ID
@@ -192,6 +198,7 @@ tooltip.timeforced.item=Soft update until a specific time and then the action wi
tooltip.check.for.mandatory=Check to make Mandatory
tooltip.artifact.icon=Show Artifact Details
tooltip.click.to.edit = Click to edit
+tooltip.metadata.icon = Manage Metadata
# Notification messages prefix with - message
@@ -361,6 +368,14 @@ message.dist.type.discard.success = All Distribution Types are discarded success
message.dist.discard.success = All Distributions are discarded successfully !
message.assign.discard.success = All assignments are discarded successfully !
message.bulk.upload.assignment.failed = Distribution set assignment failed as distribution set no longer exists!
+message.key.missing = Key is missing !
+message.value.missing = Value is missing !
+message.metadata.saved = Metadata with key {0} successfully saved !
+message.metadata.updated = Metadata with key {0} successfully updated !
+message.metadata.duplicate.check = Metadata with key {0} already exists, please enter another value
+message.metadata.deleted.successfully = Metadata with key {0} successfully deleted !
+message.confirm.delete.metadata = Are you sure that you want to delete metadata with key {0} ?
+
# Login view
notification.login.title=Welcome to Bosch IoT Software Provisioning.
@@ -448,6 +463,8 @@ header.caption.softwaremodule = SoftwareModule
header.caption.unassign = Unassign
message.sw.unassigned = Software Module {0} successfully unassigned
header.caption.upload.details = Upload details
+header.key = Key
+header.value = Value
combo.type.tag.name = Type tag name
label.yes = Yes
diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties
index 305ea02a2..dbb2b5c6f 100644
--- a/hawkbit-ui/src/main/resources/messages_en.properties
+++ b/hawkbit-ui/src/main/resources/messages_en.properties
@@ -14,6 +14,7 @@
# Button names prefix with - button
button.save = Save
button.delete = Delete
+button.discard = Discard
button.discard.all = Discard All
button.delete.all = Delete All
button.assign.all = Save Assign
@@ -57,6 +58,7 @@ caption.new.softwaremodule.jvm = Configure New Runtime
caption.new.softwaremodule.os = Configure New OS
caption.filter.simple = Simple Filter
caption.filter.custom = Custom Filter
+caption.metadata = Metadata
caption.add.softwaremodule = Configure Software Module
caption.add.new.dist = Configure New Distribution
@@ -86,6 +88,9 @@ caption.cancel.action.confirmbox = Confirm Action Cancellation
caption.forced.datefield = Force update at time
caption.force.action.confirmbox = Confirm Force Active Action
caption.filter.delete.confirmbox = Confirm Filter Delete Action
+caption.metadata.popup = Metadata of
+caption.metadata.delete.action.confirmbox = Confirm Metadata Delete Action
+
caption.confirm.abort.action = Confirm Abort Action
# Labels prefix with - label
@@ -174,6 +179,7 @@ textfield.version = Version
textfield.vendor = Vendor
textfield.description = Description
textfield.customfiltername = Filter name
+textfield.value = Value
ui.version = Powered by Bosch IoT Software Provisioning
prompt.target.id = Controller ID
@@ -192,6 +198,8 @@ tooltip.timeforced.item=Soft update until a specific time and then the action wi
tooltip.check.for.mandatory=Check to make Mandatory
tooltip.artifact.icon=Show Artifact Details
tooltip.click.to.edit = Click to edit
+tooltip.metadata.icon = Manage Metadata
+
# Notification messages prefix with - message
message.save.success = {0} saved successfully
@@ -356,6 +364,13 @@ message.sw.module.type.delete = {0} Software Module Type(s) deleted successfully
message.dist.type.discard.success = All Distribution Types are discarded successfully !
message.dist.discard.success = All Distributions are discarded successfully !
message.assign.discard.success = All assignments are discarded successfully !
+message.key.missing = Key is missing !
+message.value.missing = Value is missing !
+message.metadata.saved = Metadata with key {0} successfully saved !
+message.metadata.updated = Metadata with key {0} successfully updated !
+message.metadata.duplicate.check = Metadata with key {0} already exists, please enter another value
+message.metadata.deleted.successfully = Metadata with key {0} successfully deleted !
+message.confirm.delete.metadata = Are you sure that you want to delete metadata with key {0} ?
# Login view
notification.login.title=Welcome to Bosch IoT Software Provisioning.
@@ -445,6 +460,8 @@ header.caption.mandatory = Mandatory
header.caption.typename = SoftwareModuleType
header.caption.softwaremodule = SoftwareModule
header.caption.upload.details = Upload details
+header.key = Key
+header.value = Value
combo.type.tag.name = Type tag name
label.yes = Yes
diff --git a/hawkbit_logo.png b/hawkbit_logo.png
new file mode 100644
index 000000000..3fe796127
Binary files /dev/null and b/hawkbit_logo.png differ
diff --git a/pom.xml b/pom.xml
index 5995b8faf..9038d2e56 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,8 +68,7 @@