Metadata management for SM and DS in Management UI.

Conflicts:
	hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java

Signed-off-by: Kai Zimmermann <kai.zimmermann@bosch-si.com>
This commit is contained in:
Kai Zimmermann
2016-06-22 13:13:54 +02:00
parent 7857107b46
commit 796d3dda9c
26 changed files with 596 additions and 29 deletions

View File

@@ -8,11 +8,17 @@
*/
package org.eclipse.hawkbit.ui.artifacts.smtable;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent;
import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState;
import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout;
import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleMetadatadetailslayout;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.distributions.event.MetadataEvent;
import org.eclipse.hawkbit.ui.distributions.smtable.SwMetadataPopupLayout;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +51,44 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta
@Autowired
private ArtifactUploadState artifactUploadState;
@Autowired
private transient SoftwareManagement softwareManagement;
@Autowired
private SwMetadataPopupLayout swMetadataPopupLayout;
@Autowired
private EntityFactory entityFactory;
private SoftwareModuleMetadatadetailslayout swmMetadataTable;
/**
* softwareLayout Initialize the component.
*/
@Override
protected void init() {
swmMetadataTable = new SoftwareModuleMetadatadetailslayout();
swmMetadataTable.init(getI18n(), getPermissionChecker(),softwareManagement,swMetadataPopupLayout,entityFactory);
super.init();
}
@EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final MetadataEvent event) {
UI.getCurrent()
.access(() -> {
SoftwareModuleMetadata softwareModuleMetadata = event.getSoftwareModuleMetadata();
if (softwareModuleMetadata != null
&& isSoftwareModuleSelected(softwareModuleMetadata.getSoftwareModule())) {
if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) {
swmMetadataTable.createMetadata(event.getSoftwareModuleMetadata().getKey());
} else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) {
swmMetadataTable.deleteMetadata(event.getSoftwareModuleMetadata().getKey());
}
}
});
}
@Override
protected String getEditButtonId() {
return SPUIComponentIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON;
@@ -55,8 +99,9 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta
detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null);
detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null);
detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null);
detailsTab.addTab(swmMetadataTable, getI18n().get("caption.metadata"), null);
}
@Override
protected void onEdit(final ClickEvent event) {
final Window addSoftwareModule = softwareModuleAddUpdateWindow
@@ -81,6 +126,8 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta
updateSoftwareModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY,
maxAssign);
}
populateMetadataDetails();
}
private void updateSoftwareModuleDetailsLayout(final String type, final String vendor, final String maxAssign) {
@@ -141,4 +188,16 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta
protected String getDetailsHeaderCaptionId() {
return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID;
}
private void populateMetadataDetails(){
swmMetadataTable.populateSMMetadata(getSelectedBaseEntity());
}
private boolean isSoftwareModuleSelected(SoftwareModule softwareModule) {
final SoftwareModule selectedUploadSWModule = artifactUploadState.getSelectedBaseSoftwareModule().isPresent() ? artifactUploadState
.getSelectedBaseSoftwareModule().get() : null;
return softwareModule != null && selectedUploadSWModule != null
&& selectedUploadSWModule.getName().equals(softwareModule.getName())
&& selectedUploadSWModule.getVersion().equals(softwareModule.getVersion());
}
}

View File

@@ -8,6 +8,7 @@
*/
package org.eclipse.hawkbit.ui.artifacts.smtable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -212,4 +213,26 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
artifactUploadState.setNoDataAvilableSoftwareModule(!available);
}
private Button createManageMetadataButton(String nameVersionStr) {
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon"));
return manageMetadataBtn;
}
private String getNameAndVerion(final Object itemId) {
final Item item = getItem(itemId);
final String name = (String) item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue();
final String version = (String) item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).getValue();
return name + "." + version;
}
private void showMetadataDetails(Long itemId, String nameVersionStr) {
SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(itemId);
/* display the window */
UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule,null));
}
}

View File

@@ -17,6 +17,7 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.server.FontAwesome;
import com.vaadin.server.Resource;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
@@ -93,12 +94,14 @@ public class CommonDialogWindow extends Window {
if (null != content) {
mainLayout.addComponent(content);
mainLayout.setExpandRatio(content, 1.0F);
}
final HorizontalLayout buttonLayout = createActionButtonsLayout();
mainLayout.addComponent(buttonLayout);
mainLayout.setComponentAlignment(buttonLayout, Alignment.TOP_CENTER);
setCaption(caption);
setCaptionAsHtml(true);
setContent(mainLayout);
setResizable(false);
center();
@@ -109,9 +112,8 @@ public class CommonDialogWindow extends Window {
private HorizontalLayout createActionButtonsLayout() {
buttonsLayout = new HorizontalLayout();
buttonsLayout.setSizeFull();
buttonsLayout.setSizeUndefined();
buttonsLayout.setSpacing(true);
createSaveButton();
createCancelButton();
@@ -155,6 +157,7 @@ public class CommonDialogWindow extends Window {
buttonsLayout.setComponentAlignment(helpLinkComponent, Alignment.MIDDLE_RIGHT);
}
public void setSaveButtonEnabled(final boolean enabled) {
saveButton.setEnabled(enabled);
}
@@ -162,9 +165,20 @@ public class CommonDialogWindow extends Window {
public void setCancelButtonEnabled(final boolean enabled) {
cancelButton.setEnabled(enabled);
}
public HorizontalLayout getButtonsLayout() {
return buttonsLayout;
}
public void setCancelButtonCaption(final String caption) {
cancelButton.setCaption(caption);
}
public void setCancelButtonIcon(final Resource icon) {
cancelButton.setIcon(icon);
}
public VerticalLayout getMainLayout() {
return mainLayout;
}
}

View File

@@ -281,8 +281,8 @@ public abstract class AbstractTableDetailsLayout<T extends NamedEntity> extends
descriptionLayout = getTabLayout();
return descriptionLayout;
}
/**
/**
* Default caption of header to be displayed when no data row selected in
* table.
*

View File

@@ -14,18 +14,22 @@ import java.util.Map;
import java.util.Set;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName;
import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent;
import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType;
import org.eclipse.hawkbit.ui.common.DistributionSetIdName;
import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout;
import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout;
import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable;
import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder;
import org.eclipse.hawkbit.ui.distributions.event.MetadataEvent;
import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent;
import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleAssignmentDiscardEvent;
import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState;
@@ -64,7 +68,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
private static final String SOFT_MODULE = "softwareModule";
private static final String UNASSIGN_SOFT_MODULE = "unassignSoftModule";
@Autowired
private ManageDistUIState manageDistUIState;
@@ -79,12 +83,37 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
@Autowired
private transient DistributionSetManagement distributionSetManagement;
@Autowired
private DsMetadataPopupLayout dsMetadataPopupLayout;
@Autowired
private EntityFactory entityFactory;
private SoftwareModuleDetailsTable softwareModuleTable;
private DistributionSetMetadatadetailslayout dsMetadataTable;
private VerticalLayout tagsLayout;
Map<String, StringBuilder> assignedSWModule = new HashMap<>();
@EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final MetadataEvent event) {
UI.getCurrent()
.access(() -> {
DistributionSetMetadata dsMetadata = event.getDistributionSetMetadata();
if (dsMetadata != null && isDistributionSetSelected(dsMetadata.getDistributionSet())) {
if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_DISTRIBUTION_SET_METADATA) {
dsMetadataTable.createMetadata(event.getDistributionSetMetadata().getKey());
} else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_DISTRIBUTION_SET_METADATA) {
dsMetadataTable.deleteMetadata(event.getDistributionSetMetadata().getKey());
}
}
});
}
/**
* softwareLayout Initialize the component.
@@ -94,6 +123,9 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
softwareModuleTable = new SoftwareModuleDetailsTable();
softwareModuleTable.init(getI18n(), true, getPermissionChecker(), distributionSetManagement, getEventBus(),
manageDistUIState);
dsMetadataTable = new DistributionSetMetadatadetailslayout();
dsMetadataTable.init(getI18n(), getPermissionChecker(),distributionSetManagement,
dsMetadataPopupLayout,entityFactory);
super.init();
}
@@ -107,8 +139,9 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
populateDetails();
populateModule();
populateTags();
populateMetadataDetails();
}
private void populateModule() {
softwareModuleTable.populateModule(getSelectedBaseEntity());
showUnsavedAssignment();
@@ -238,7 +271,11 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
updateDistributionSetDetailsLayout(null, null);
}
}
private void populateMetadataDetails(){
dsMetadataTable.populateDSMetadata(getSelectedBaseEntity());
}
private void updateDistributionSetDetailsLayout(final String type, final Boolean isMigrationRequired) {
final VerticalLayout detailsTabLayout = getDetailsLayout();
detailsTabLayout.removeAllComponents();
@@ -294,6 +331,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
detailsTab.addTab(createSoftwareModuleTab(), getI18n().get("caption.softwares.distdetail.tab"), null);
detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null);
detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null);
detailsTab.addTab(dsMetadataTable, getI18n().get("caption.metadata"), null);
}
@Override
@@ -353,7 +391,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
@Override
protected String getTabSheetId() {
return null;
return SPUIComponentIdProvider.DISTRIBUTIONSET_DETAILS_TABSHEET_ID;
}
@Override
@@ -361,4 +399,10 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID;
}
private boolean isDistributionSetSelected(DistributionSet ds) {
DistributionSetIdName lastselectedDistDS = manageDistUIState.getLastSelectedDistribution().isPresent() ? manageDistUIState
.getLastSelectedDistribution().get() : null;
return ds != null && lastselectedDistDS != null && lastselectedDistDS.getName().equals(ds.getName())
&& lastselectedDistDS.getVersion().endsWith(ds.getVersion());
}
}

View File

@@ -30,6 +30,8 @@ import org.eclipse.hawkbit.ui.common.DistributionSetIdName;
import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable;
import org.eclipse.hawkbit.ui.common.table.AbstractTable;
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder;
import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent;
import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria;
import org.eclipse.hawkbit.ui.distributions.event.DragEvent;
@@ -42,6 +44,7 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.TableColumn;
import org.eclipse.hawkbit.ui.utils.UINotification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,8 +60,10 @@ import com.vaadin.data.Item;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.server.FontAwesome;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
@@ -98,6 +103,9 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
@Autowired
private transient TargetManagement targetManagement;
@Autowired
private DsMetadataPopupLayout dsMetadataPopupLayout;
/**
* Initialize the component.
*/
@@ -181,6 +189,10 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
protected void publishEntityAfterValueChange(final DistributionSet distributionSet) {
eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, distributionSet));
eventBus.publish(this, DistributionsUIEvent.ORDER_BY_DISTRIBUTION);
if(distributionSet!=null){
manageDistUIState.setLastSelectedEntity(new DistributionSetIdName(distributionSet.getId(),
distributionSet.getName(),distributionSet.getVersion()));
}
}
@Override
@@ -468,5 +480,50 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
protected void setDataAvailable(final boolean available) {
manageDistUIState.setNoDataAvailableDist(!available);
}
@Override
protected void addCustomGeneratedColumns() {
addGeneratedColumn(SPUILabelDefinitions.METADATA_ICON, new ColumnGenerator() {
private static final long serialVersionUID = 117186282275065399L;
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
final String nameVersionStr = getNameAndVerion(itemId);
final Button manageMetaDataBtn = createManageMetadataButton(nameVersionStr);
manageMetaDataBtn.addClickListener(event -> showMetadataDetails(((DistributionSetIdName) itemId).getId()));
return manageMetaDataBtn;
}
});
}
@Override
protected List<TableColumn> getTableVisibleColumns() {
final List<TableColumn> columnList = super.getTableVisibleColumns();
if (!isMaximized()) {
columnList.add(new TableColumn(SPUILabelDefinitions.METADATA_ICON, "", 0.1F));
}
return columnList;
}
private Button createManageMetadataButton(String nameVersionStr) {
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
SPUIComponentIdProvider.DS_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon"));
return manageMetadataBtn;
}
private void showMetadataDetails(Long itemId) {
DistributionSet ds = distributionSetManagement.findDistributionSetByIdWithDetails(itemId);
UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(ds,null));
}
private String getNameAndVerion(final Object itemId) {
final Item item = getItem(itemId);
final String name = (String) item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue();
final String version = (String) item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).getValue();
return name + "." + version;
}
}

View File

@@ -13,6 +13,6 @@ package org.eclipse.hawkbit.ui.distributions.event;
*
*/
public enum SwModuleUIEvent {
HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DELETED_ALL_SOFWARE;
HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DELETED_ALL_SOFWARE ;
}

View File

@@ -8,11 +8,16 @@
*/
package org.eclipse.hawkbit.ui.distributions.smtable;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent;
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow;
import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout;
import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleMetadatadetailslayout;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.distributions.event.MetadataEvent;
import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
@@ -44,6 +49,50 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay
@Autowired
private ManageDistUIState manageDistUIState;
@Autowired
private transient SoftwareManagement softwareManagement;
@Autowired
private SwMetadataPopupLayout swMetadataPopupLayout;
@Autowired
private EntityFactory entityFactory;
private SoftwareModuleMetadatadetailslayout swmMetadataTable;
/**
* softwareLayout Initialize the component.
*/
@Override
protected void init() {
swmMetadataTable = new SoftwareModuleMetadatadetailslayout();
swmMetadataTable.init(getI18n(), getPermissionChecker(),softwareManagement,swMetadataPopupLayout,entityFactory);
super.init();
}
/**
* MetadataEvent.
*
* @param event
* as instance of {@link MetadataEvent}
*/
@EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final MetadataEvent event) {
UI.getCurrent()
.access(() -> {
SoftwareModuleMetadata softwareModuleMetadata = event.getSoftwareModuleMetadata();
if (softwareModuleMetadata != null
&& isSoftwareModuleSelected(softwareModuleMetadata.getSoftwareModule())) {
if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) {
swmMetadataTable.createMetadata(event.getSoftwareModuleMetadata().getKey());
} else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) {
swmMetadataTable.deleteMetadata(event.getSoftwareModuleMetadata().getKey());
}
}
});
}
@EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final SoftwareModuleEvent softwareModuleEvent) {
@@ -69,7 +118,8 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay
detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null);
detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null);
detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null);
}
detailsTab.addTab(swmMetadataTable, getI18n().get("caption.metadata"), null);
}
@Override
protected String getDefaultCaption() {
@@ -93,7 +143,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay
@Override
protected String getTabSheetId() {
return null;
return SPUIComponentIdProvider.DIST_SW_MODULE_DETAILS_TABSHEET_ID;
}
private void populateDetails() {
@@ -139,11 +189,23 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay
@Override
protected void populateDetailsWidget() {
populateDetails();
populateMetadataDetails();
}
@Override
protected String getDetailsHeaderCaptionId() {
return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID;
}
private void populateMetadataDetails() {
swmMetadataTable.populateSMMetadata(getSelectedBaseEntity());
}
private boolean isSoftwareModuleSelected(SoftwareModule softwareModule) {
final Long selectedDistSWModuleId = manageDistUIState.getSelectedBaseSwModuleId().isPresent() ? manageDistUIState
.getSelectedBaseSwModuleId().get() : null;
return softwareModule != null && selectedDistSWModuleId != null
&& selectedDistSWModuleId.equals(softwareModule.getId());
}
}

View File

@@ -51,6 +51,7 @@ import com.vaadin.shared.ui.window.WindowMode;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.JavaScript;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
@@ -77,6 +78,9 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
@Autowired
private ArtifactDetailsLayout artifactDetailsLayout;
@Autowired
private SwMetadataPopupLayout swMetadataPopupLayout;
/**
* Initialize the filter layout.
@@ -175,16 +179,19 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
protected void addCustomGeneratedColumns() {
addGeneratedColumn(SPUILabelDefinitions.ARTIFACT_ICON, new ColumnGenerator() {
private static final long serialVersionUID = -5982361782989980277L;
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
HorizontalLayout iconLayout = new HorizontalLayout();
// add artifactory details popup
final String nameVersionStr = getNameAndVerion(itemId);
final Button showArtifactDtlsBtn = createShowArtifactDtlsButton(nameVersionStr);
final Button manageMetaDataBtn = createManageMetadataButton(nameVersionStr);
showArtifactDtlsBtn.addClickListener(event -> showArtifactDetailsWindow((Long) itemId, nameVersionStr));
return showArtifactDtlsBtn;
manageMetaDataBtn.addClickListener(event -> showMetadataDetails((Long) itemId));
iconLayout.addComponent(showArtifactDtlsBtn);
iconLayout.addComponent(manageMetaDataBtn);
return iconLayout;
}
});
}
@@ -207,6 +214,9 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
@Override
protected void publishEntityAfterValueChange(final SoftwareModule selectedLastEntity) {
eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.SELECTED_ENTITY, selectedLastEntity));
if(selectedLastEntity!=null){
manageDistUIState.setSelectedBaseSwModuleId(selectedLastEntity.getId());
}
}
@Override
@@ -310,12 +320,21 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
private Button createShowArtifactDtlsButton(final String nameVersionStr) {
final Button showArtifactDtlsBtn = SPUIComponentProvider.getButton(
SPUIComponentIdProvider.SW_TABLE_ATRTIFACT_DETAILS_ICON + "." + nameVersionStr, "", "", null, false,
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
FontAwesome.FILE_O, SPUIButtonStyleSmallNoBorder.class);
showArtifactDtlsBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
showArtifactDtlsBtn.setDescription(i18n.get("tooltip.artifact.icon"));
return showArtifactDtlsBtn;
}
private Button createManageMetadataButton(String nameVersionStr) {
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon"));
return manageMetadataBtn;
}
private String getNameAndVerion(final Object itemId) {
final Item item = getItem(itemId);
final String name = (String) item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue();
@@ -388,4 +407,9 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
}
private void showMetadataDetails(Long itemId) {
SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(itemId);
UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule,null));
}
}

View File

@@ -31,7 +31,6 @@ import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent;
import org.eclipse.hawkbit.ui.management.event.PinUnpinEvent;
import org.eclipse.hawkbit.ui.management.event.TargetTableEvent;
import org.eclipse.hawkbit.ui.management.state.ManagementUIState;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
import org.eclipse.hawkbit.ui.utils.I18N;
import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;

View File

@@ -8,11 +8,18 @@
*/
package org.eclipse.hawkbit.ui.management.dstable;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
import org.eclipse.hawkbit.ui.common.DistributionSetIdName;
import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout;
import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout;
import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable;
import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.distributions.dstable.DsMetadataPopupLayout;
import org.eclipse.hawkbit.ui.distributions.event.MetadataEvent;
import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent;
import org.eclipse.hawkbit.ui.management.state.ManagementUIState;
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
@@ -46,16 +53,48 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail
@Autowired
private DistributionTagToken distributionTagToken;
@Autowired
private transient DistributionSetManagement distributionSetManagement;
@Autowired
private DsMetadataPopupLayout dsMetadataPopupLayout;
@Autowired
private EntityFactory entityFactory;
private SoftwareModuleDetailsTable softwareModuleTable;
private DistributionSetMetadatadetailslayout dsMetadataTable;
@Override
protected void init() {
softwareModuleTable = new SoftwareModuleDetailsTable();
softwareModuleTable.init(getI18n(), false, getPermissionChecker(), null, null, null);
dsMetadataTable = new DistributionSetMetadatadetailslayout();
dsMetadataTable.init(getI18n(), getPermissionChecker(),distributionSetManagement,
dsMetadataPopupLayout,entityFactory);
super.init();
}
@EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final MetadataEvent event) {
UI.getCurrent()
.access(() -> {
DistributionSetMetadata dsMetadata = event.getDistributionSetMetadata();
if (dsMetadata != null && isDistributionSetSelected(dsMetadata.getDistributionSet())) {
if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_DISTRIBUTION_SET_METADATA) {
dsMetadataTable.createMetadata(event.getDistributionSetMetadata().getKey());
} else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_DISTRIBUTION_SET_METADATA) {
dsMetadataTable.deleteMetadata(event.getDistributionSetMetadata().getKey());
}
}
});
}
@EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final DistributionTableEvent distributionTableEvent) {
onBaseEntityEvent(distributionTableEvent);
@@ -73,6 +112,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail
detailsTab.addTab(createSoftwareModuleTab(), getI18n().get("caption.softwares.distdetail.tab"), null);
detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null);
detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null);
detailsTab.addTab(dsMetadataTable, getI18n().get("caption.metadata"), null);
}
@Override
@@ -114,8 +154,13 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail
protected void populateDetailsWidget() {
softwareModuleTable.populateModule(getSelectedBaseEntity());
populateDetails(getSelectedBaseEntity());
populateMetadataDetails();
}
private void populateMetadataDetails(){
dsMetadataTable.populateDSMetadata(getSelectedBaseEntity());
}
private void populateDetails(final DistributionSet ds) {
if (ds != null) {
@@ -160,5 +205,12 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail
protected String getDetailsHeaderCaptionId() {
return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID;
}
private boolean isDistributionSetSelected(DistributionSet ds) {
DistributionSetIdName lastselectedManageDS = managementUIState.getLastSelectedDistribution().isPresent() ? managementUIState
.getLastSelectedDistribution().get() : null;
return ds!=null && lastselectedManageDS != null && lastselectedManageDS.getName().equals(ds.getName())
&& lastselectedManageDS.getVersion().endsWith(ds.getVersion());
}
}

View File

@@ -18,9 +18,11 @@ import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SpPermissionChecker;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult;
import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetIdName;
@@ -29,6 +31,9 @@ import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable;
import org.eclipse.hawkbit.ui.common.table.AbstractTable;
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder;
import org.eclipse.hawkbit.ui.distributions.dstable.DsMetadataPopupLayout;
import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState;
import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent;
import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent;
import org.eclipse.hawkbit.ui.management.event.DragEvent;
@@ -63,6 +68,7 @@ import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
@@ -86,12 +92,18 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
@Autowired
private ManagementViewAcceptCriteria managementViewAcceptCriteria;
@Autowired
private transient TargetManagement targetService;
@Autowired
private DsMetadataPopupLayout dsMetadataPopupLayout;
@Autowired
private transient DistributionSetManagement distributionSetManagement;
@Autowired
private EntityFactory entityFactory;
private String notAllowedMsg;
@@ -219,10 +231,35 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
return getPinButton(itemId);
HorizontalLayout iconLayout = new HorizontalLayout();
final String nameVersionStr = getNameAndVerion(itemId);
final Button manageMetaDataBtn = createManageMetadataButton(nameVersionStr);
manageMetaDataBtn.addClickListener(event -> showMetadataDetails(itemId));
iconLayout.addComponent((Button)getPinButton(itemId));
iconLayout.addComponent(manageMetaDataBtn);
return iconLayout;
}
});
}
private String getNameAndVerion(final Object itemId) {
final Item item = getItem(itemId);
final String name = (String) item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue();
final String version = (String) item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).getValue();
return name + "." + version;
}
private Button createManageMetadataButton(String nameVersionStr) {
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.DS_METADATA_ICON);
manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon"));
return manageMetadataBtn;
}
@Override
protected boolean isFirstRowSelectedOnLoad() {
@@ -246,6 +283,10 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
@Override
protected void publishEntityAfterValueChange(final DistributionSet selectedLastEntity) {
eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, selectedLastEntity));
if(selectedLastEntity!=null){
managementUIState.setLastSelectedDistribution(new DistributionSetIdName(selectedLastEntity.getId(),
selectedLastEntity.getName(),selectedLastEntity.getVersion()));
}
}
@Override
@@ -264,7 +305,7 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
if (isMaximized()) {
return columnList;
}
columnList.add(new TableColumn(SPUILabelDefinitions.PIN_COLUMN, StringUtils.EMPTY, 0.1F));
columnList.add(new TableColumn(SPUILabelDefinitions.PIN_COLUMN, StringUtils.EMPTY, 0.2F));
return columnList;
}
@@ -657,5 +698,12 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
managementUIState.setNoDataAvailableDistribution(!available);
}
private void showMetadataDetails(Object itemId) {
final DistributionSetIdName distIdName = (DistributionSetIdName) getContainerDataSource().getItem(itemId)
.getItemProperty(SPUILabelDefinitions.VAR_DIST_ID_NAME).getValue();
DistributionSet ds = distributionSetManagement.findDistributionSetByIdWithDetails(distIdName.getId());
UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(ds, null));
}
}

View File

@@ -87,6 +87,22 @@ public class ManagementUIState implements ManagmentEntityState<DistributionSetId
private boolean customFilterSelected;
private boolean bulkUploadWindowMinimised;
private DistributionSetIdName lastSelectedDistribution;
/**
* @return the lastSelectedDistribution
*/
public Optional<DistributionSetIdName> getLastSelectedDistribution() {
return Optional.ofNullable(lastSelectedDistribution);
}
public void setLastSelectedDistribution(final DistributionSetIdName value) {
this.lastSelectedDistribution = value;
}
/**
* @return the bulkUploadWindowMinimised

View File

@@ -82,9 +82,9 @@ public final class HawkbitCommonUtil {
private static final String JS_DRAG_COUNT_REM_CHILD = " if(x) { document.head.removeChild(x); } ";
private static final String DIV_DESCRIPTION = "<div id=\"desc-length\"><p id=\"desciption-p\">";
public static final String DIV_DESCRIPTION = "<div id=\"desc-length\"><p id=\"desciption-p\">";
private static final String DIV_CLOSE = "</p></div>";
public static final String DIV_CLOSE = "</p></div>";
private static final String DRAG_COUNT_ELEMENT = "var x = document.getElementById('sp-drag-count'); ";
private static final String CLOSE_BRACE = "\"; }';";

View File

@@ -915,6 +915,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";
/**
* /* Private Constructor.
*/

View File

@@ -1016,6 +1016,16 @@ 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";
/**
* /** Constructor.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}

View File

@@ -139,5 +139,4 @@ $v-included-components: remove($v-included-components, form);
background-position: bottom;
background-repeat: no-repeat;
}
}

View File

@@ -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
@@ -89,6 +91,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 +181,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 +200,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 +380,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,6 +452,8 @@ header.distributionset = Distribution set
header.numberofgroups = No. of groups
header.detail.status = Detail status
header.total.targets = Total targets
header.key = Key
header.value = Value
distribution.details.header = Distribution set
target.details.header = Target

View File

@@ -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.
@@ -440,6 +455,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

View File

@@ -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.
@@ -435,6 +450,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