diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java index ac9dc5bd3..1810a7c5c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java @@ -200,4 +200,23 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta && selectedUploadSWModule.getName().equals(softwareModule.getName()) && selectedUploadSWModule.getVersion().equals(softwareModule.getVersion()); } + + @Override + protected Boolean isMetadataIconToBeDisplayed() { + return true; + } + + @Override + protected String getShowMetadataButtonId() { + SoftwareModule selectedBaseEntity = getSelectedBaseEntity(); + return SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + selectedBaseEntity.getName() + "." + + selectedBaseEntity.getVersion(); + } + + @Override + protected void showMetadata(ClickEvent event) { + UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(getSelectedBaseEntity(),null)); + + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index 67c6680a7..2d23679b0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -21,6 +21,7 @@ import org.eclipse.hawkbit.repository.model.MetaData; import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; @@ -81,7 +82,7 @@ public abstract class AbstractMetadataPopupLayout onSave(), event -> onDiscard(), null); - metadataWindow.setSaveButtonEnabled(false); - metadataWindow.setCancelButtonEnabled(false); - metadataWindow.setCancelButtonCaption(i18n.get("button.discard")); - metadataWindow.setCancelButtonIcon(FontAwesome.UNDO); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onSave(), event -> onCancel(), null); metadataWindow.setId(SPUIComponentIdProvider.METADATA_POPUP_ID); metadataWindow.setHeight(550, Unit.PIXELS); metadataWindow.setWidth(800, Unit.PIXELS); metadataWindow.getMainLayout().setSizeFull(); metadataWindow.setResizable(true); metadataWindow.addWindowModeChangeListener(event -> onResize(event)); - setUpDetails(entity.getId(),metaData); + metadataWindow.getButtonsLayout().addComponent(discardButton, 1); + setUpDetails(entity.getId(), metaData); return metadataWindow; } - public void setUpDetails(final Long swId, final M metaData) { - keyTextField.clear(); - valueTextArea.clear(); - metadataWindow.setSaveButtonEnabled(false); - metadataWindow.setCancelButtonEnabled(false); - addIcon.setEnabled(true); - if (swId != null) { - metaDataGrid.getContainerDataSource().removeAllItems(); - populateGrid(); - metaDataGrid.getSelectionModel().reset(); - if (!metaDataGrid.getContainerDataSource().getItemIds().isEmpty()) { - if (metaData == null) { - metaDataGrid.select(metaDataGrid.getContainerDataSource().getIdByIndex(0)); - } else { - metaDataGrid.select(metaData.getKey()); - } - } - } - } - public E getSelectedEntity() { return selectedEntity; } @@ -173,12 +152,17 @@ public abstract class AbstractMetadataPopupLayout keyValueDetails = new LinkedHashMap<>(); for (Object key : metaDataGrid.getContainerDataSource().getItemIds()) { Item item = metaDataGrid.getContainerDataSource().getItem(key); @@ -489,4 +502,47 @@ public abstract class AbstractMetadataPopupLayout onDiscard()); + return discardButton; + } + + private void setUpDetails(final Long swId, final M metaData) { + resetDetails(); + if (swId != null) { + metaDataGrid.getContainerDataSource().removeAllItems(); + populateGrid(); + metaDataGrid.getSelectionModel().reset(); + if (!metaDataGrid.getContainerDataSource().getItemIds().isEmpty()) { + if (metaData == null) { + metaDataGrid.select(metaDataGrid.getContainerDataSource().getIdByIndex(0)); + } else { + metaDataGrid.select(metaData.getKey()); + } + } else if (hasCreatePermission()) { + keyTextField.setEnabled(true); + valueTextArea.setEnabled(true); + addIcon.setEnabled(false); + } + } + } + + private void resetDetails() { + keyTextField.clear(); + valueTextArea.clear(); + keyTextField.setEnabled(false); + valueTextArea.setEnabled(false); + metadataWindow.setSaveButtonEnabled(false); + setDiscardButtonEnabled(false); + addIcon.setEnabled(true); + } + + private void setDiscardButtonEnabled(Boolean enable) { + discardButton.setEnabled(enable); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 227078554..e76053ee7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -17,7 +17,6 @@ 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; @@ -161,23 +160,11 @@ public class CommonDialogWindow extends Window { public void setSaveButtonEnabled(final boolean enabled) { saveButton.setEnabled(enabled); } - - 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; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java index c335ea8f2..4732aa23c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java @@ -63,6 +63,8 @@ public abstract class AbstractTableDetailsLayout extends private Button editButton; + private Button manageMetadataBtn; + private TabSheet detailsTab; private VerticalLayout detailsLayout; @@ -137,6 +139,12 @@ public abstract class AbstractTableDetailsLayout extends editButton.setId(getEditButtonId()); editButton.addClickListener(this::onEdit); + manageMetadataBtn = SPUIComponentProvider.getButton("", "", "", null, false, + FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class); + manageMetadataBtn.setId(getEditButtonId()); + manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon")); + manageMetadataBtn.addClickListener(this::showMetadata); + editButton.setEnabled(false); detailsTab = SPUIComponentProvider.getDetailsTabSheet(); @@ -156,6 +164,10 @@ public abstract class AbstractTableDetailsLayout extends if (hasEditPermission()) { nameEditLayout.addComponent(editButton); nameEditLayout.setComponentAlignment(editButton, Alignment.TOP_RIGHT); + if (isMetadataIconToBeDisplayed()) { + nameEditLayout.addComponent(manageMetadataBtn); + nameEditLayout.setComponentAlignment(manageMetadataBtn, Alignment.TOP_RIGHT); + } } nameEditLayout.setExpandRatio(caption, 1.0F); nameEditLayout.addStyleName(SPUIStyleDefinitions.WIDGET_TITLE); @@ -336,4 +348,10 @@ public abstract class AbstractTableDetailsLayout extends protected abstract String getName(); + protected abstract String getShowMetadataButtonId(); + + protected abstract Boolean isMetadataIconToBeDisplayed(); + + protected abstract void showMetadata(Button.ClickEvent event); + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index 65b98fd15..b875f3a7a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -399,10 +399,29 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID; } + @Override + protected Boolean isMetadataIconToBeDisplayed() { + return true; + } + + @Override + protected String getShowMetadataButtonId() { + DistributionSetIdName lastselectedDistDS = manageDistUIState.getLastSelectedDistribution().isPresent() ? manageDistUIState + .getLastSelectedDistribution().get() : null; + return SPUIComponentIdProvider.DS_TABLE_MANAGE_METADATA_ID + "." + lastselectedDistDS.getName() + "." + + lastselectedDistDS.getVersion(); + } + 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()); } + + + @Override + protected void showMetadata(ClickEvent event) { + UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(getSelectedBaseEntity(),null)); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java index 1c3fbc407..2041944d4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java @@ -12,6 +12,7 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; +import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.ui.common.AbstractMetadataPopupLayout; @@ -37,14 +38,17 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout { return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } + @Override + protected String getShowMetadataButtonId() { + return null; + } + + @Override + protected Boolean isMetadataIconToBeDisplayed() { + return false; + } + + @Override + protected void showMetadata(ClickEvent event) { + //No implementation required + } + }