Added permission check for create/update metadata
Added 'cancel' button in metadata popup Added show 'metadata' icon next to 'edit' icon Signed-off-by: AMU7KOR <Asharani.Murugesh@in.bosch.com>
This commit is contained in:
@@ -200,4 +200,23 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta
|
|||||||
&& selectedUploadSWModule.getName().equals(softwareModule.getName())
|
&& selectedUploadSWModule.getName().equals(softwareModule.getName())
|
||||||
&& selectedUploadSWModule.getVersion().equals(softwareModule.getVersion());
|
&& 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));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.eclipse.hawkbit.repository.model.MetaData;
|
|||||||
import org.eclipse.hawkbit.repository.model.NamedVersionedEntity;
|
import org.eclipse.hawkbit.repository.model.NamedVersionedEntity;
|
||||||
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
||||||
import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer;
|
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.decorators.SPUIButtonStyleSmallNoBorder;
|
||||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||||
import org.eclipse.hawkbit.ui.utils.I18N;
|
import org.eclipse.hawkbit.ui.utils.I18N;
|
||||||
@@ -81,7 +82,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UINotification uiNotification;
|
private UINotification uiNotification;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
protected transient EventBus.SessionEventBus eventBus;
|
protected transient EventBus.SessionEventBus eventBus;
|
||||||
|
|
||||||
@@ -91,6 +92,8 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
|
|
||||||
private Button addIcon;
|
private Button addIcon;
|
||||||
|
|
||||||
|
private Button discardButton;
|
||||||
|
|
||||||
private Grid metaDataGrid;
|
private Grid metaDataGrid;
|
||||||
|
|
||||||
private Label headerCaption;
|
private Label headerCaption;
|
||||||
@@ -103,9 +106,8 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
private void init() {
|
private void init() {
|
||||||
createComponents();
|
createComponents();
|
||||||
buildLayout();
|
buildLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns metadata popup.
|
* Returns metadata popup.
|
||||||
@@ -120,41 +122,18 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
selectedEntity = entity;
|
selectedEntity = entity;
|
||||||
String nameVersion = HawkbitCommonUtil.getFormattedNameVersion(entity.getName(), entity.getVersion());
|
String nameVersion = HawkbitCommonUtil.getFormattedNameVersion(entity.getName(), entity.getVersion());
|
||||||
metadataWindow = SPUIComponentProvider.getWindow(getMetadataCaption(nameVersion), null,
|
metadataWindow = SPUIComponentProvider.getWindow(getMetadataCaption(nameVersion), null,
|
||||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onSave(), event -> onDiscard(), null);
|
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onSave(), event -> onCancel(), null);
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
|
||||||
metadataWindow.setCancelButtonCaption(i18n.get("button.discard"));
|
|
||||||
metadataWindow.setCancelButtonIcon(FontAwesome.UNDO);
|
|
||||||
metadataWindow.setId(SPUIComponentIdProvider.METADATA_POPUP_ID);
|
metadataWindow.setId(SPUIComponentIdProvider.METADATA_POPUP_ID);
|
||||||
metadataWindow.setHeight(550, Unit.PIXELS);
|
metadataWindow.setHeight(550, Unit.PIXELS);
|
||||||
metadataWindow.setWidth(800, Unit.PIXELS);
|
metadataWindow.setWidth(800, Unit.PIXELS);
|
||||||
metadataWindow.getMainLayout().setSizeFull();
|
metadataWindow.getMainLayout().setSizeFull();
|
||||||
metadataWindow.setResizable(true);
|
metadataWindow.setResizable(true);
|
||||||
metadataWindow.addWindowModeChangeListener(event -> onResize(event));
|
metadataWindow.addWindowModeChangeListener(event -> onResize(event));
|
||||||
setUpDetails(entity.getId(),metaData);
|
metadataWindow.getButtonsLayout().addComponent(discardButton, 1);
|
||||||
|
setUpDetails(entity.getId(), metaData);
|
||||||
return metadataWindow;
|
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() {
|
public E getSelectedEntity() {
|
||||||
return selectedEntity;
|
return selectedEntity;
|
||||||
}
|
}
|
||||||
@@ -173,12 +152,17 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
|
|
||||||
protected abstract void deleteMetadata(E entity, String key, String value);
|
protected abstract void deleteMetadata(E entity, String key, String value);
|
||||||
|
|
||||||
|
protected abstract boolean hasCreatePermission();
|
||||||
|
|
||||||
|
protected abstract boolean hasUpdatePermission();
|
||||||
|
|
||||||
private void createComponents() {
|
private void createComponents() {
|
||||||
keyTextField = createKeyTextField();
|
keyTextField = createKeyTextField();
|
||||||
valueTextArea = createValueTextField();
|
valueTextArea = createValueTextField();
|
||||||
metaDataGrid = createMetadataGrid();
|
metaDataGrid = createMetadataGrid();
|
||||||
addIcon = createAddIcon();
|
addIcon = createAddIcon();
|
||||||
headerCaption = createHeaderCaption();
|
headerCaption = createHeaderCaption();
|
||||||
|
discardButton = createDiscardButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildLayout() {
|
private void buildLayout() {
|
||||||
@@ -188,8 +172,10 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
headerLayout.setMargin(false);
|
headerLayout.setMargin(false);
|
||||||
headerLayout.setSizeFull();
|
headerLayout.setSizeFull();
|
||||||
headerLayout.addComponent(headerCaption);
|
headerLayout.addComponent(headerCaption);
|
||||||
headerLayout.addComponents(addIcon);
|
if (hasCreatePermission()) {
|
||||||
headerLayout.setComponentAlignment(addIcon, Alignment.MIDDLE_RIGHT);
|
headerLayout.addComponents(addIcon);
|
||||||
|
headerLayout.setComponentAlignment(addIcon, Alignment.MIDDLE_RIGHT);
|
||||||
|
}
|
||||||
headerLayout.setExpandRatio(headerCaption, 1.0F);
|
headerLayout.setExpandRatio(headerCaption, 1.0F);
|
||||||
|
|
||||||
final HorizontalLayout headerWrapperLayout = new HorizontalLayout();
|
final HorizontalLayout headerWrapperLayout = new HorizontalLayout();
|
||||||
@@ -294,9 +280,13 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
keyTextField.clear();
|
keyTextField.clear();
|
||||||
keyTextField.setEnabled(true);
|
|
||||||
valueTextArea.clear();
|
valueTextArea.clear();
|
||||||
metaDataGrid.select(null);
|
metaDataGrid.select(null);
|
||||||
|
if (hasCreatePermission()) {
|
||||||
|
keyTextField.setEnabled(true);
|
||||||
|
valueTextArea.setEnabled(true);
|
||||||
|
addIcon.setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -329,9 +319,11 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
if (metadataCompositeKey != null) {
|
if (metadataCompositeKey != null) {
|
||||||
Item item = metaDataGrid.getContainerDataSource().getItem(metadataCompositeKey);
|
Item item = metaDataGrid.getContainerDataSource().getItem(metadataCompositeKey);
|
||||||
keyTextField.setValue((String) item.getItemProperty(KEY).getValue());
|
keyTextField.setValue((String) item.getItemProperty(KEY).getValue());
|
||||||
// TODO value to be stored in table???
|
|
||||||
valueTextArea.setValue((String) item.getItemProperty(VALUE).getValue());
|
valueTextArea.setValue((String) item.getItemProperty(VALUE).getValue());
|
||||||
keyTextField.setEnabled(false);
|
keyTextField.setEnabled(false);
|
||||||
|
if (hasUpdatePermission()) {
|
||||||
|
valueTextArea.setEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,10 +348,12 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onAdd(ClickEvent event) {
|
private void onAdd(ClickEvent event) {
|
||||||
|
metaDataGrid.deselect(metaDataGrid.getSelectedRow());
|
||||||
valueTextArea.clear();
|
valueTextArea.clear();
|
||||||
keyTextField.clear();
|
keyTextField.clear();
|
||||||
|
keyTextField.setEnabled(true);
|
||||||
|
valueTextArea.setEnabled(true);
|
||||||
addIcon.setEnabled(true);
|
addIcon.setEnabled(true);
|
||||||
metaDataGrid.deselect(metaDataGrid.getSelectedRow());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSave() {
|
private void onSave() {
|
||||||
@@ -376,7 +370,10 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
metaDataGrid.select(metadata.getKey());
|
metaDataGrid.select(metadata.getKey());
|
||||||
addIcon.setEnabled(true);
|
addIcon.setEnabled(true);
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
metadataWindow.setSaveButtonEnabled(false);
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
setDiscardButtonEnabled(false);
|
||||||
|
if (!hasUpdatePermission()) {
|
||||||
|
valueTextArea.setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
M metadata = updateMetadata(entity, key, value);
|
M metadata = updateMetadata(entity, key, value);
|
||||||
@@ -385,7 +382,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
metaDataGrid.select(metadata.getKey());
|
metaDataGrid.select(metadata.getKey());
|
||||||
addIcon.setEnabled(true);
|
addIcon.setEnabled(true);
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
metadataWindow.setSaveButtonEnabled(false);
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
setDiscardButtonEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -429,18 +426,24 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
popualateKeyValue(itemSelected);
|
popualateKeyValue(itemSelected);
|
||||||
}
|
}
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
metadataWindow.setSaveButtonEnabled(false);
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
setDiscardButtonEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCancel() {
|
||||||
|
metadataWindow.close();
|
||||||
|
UI.getCurrent().removeWindow(metadataWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onKeyChange(TextChangeEvent event) {
|
private void onKeyChange(TextChangeEvent event) {
|
||||||
if (!valueTextArea.getValue().isEmpty() && !event.getText().isEmpty()) {
|
if (hasCreatePermission() || hasUpdatePermission()) {
|
||||||
metadataWindow.setSaveButtonEnabled(true);
|
if (!valueTextArea.getValue().isEmpty() && !event.getText().isEmpty()) {
|
||||||
metadataWindow.setCancelButtonEnabled(true);
|
metadataWindow.setSaveButtonEnabled(true);
|
||||||
} else {
|
setDiscardButtonEnabled(true);
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
} else {
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
metadataWindow.setSaveButtonEnabled(false);
|
||||||
|
setDiscardButtonEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onRowClick(SelectionEvent event) {
|
private void onRowClick(SelectionEvent event) {
|
||||||
@@ -453,20 +456,29 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
} else {
|
} else {
|
||||||
keyTextField.clear();
|
keyTextField.clear();
|
||||||
valueTextArea.clear();
|
valueTextArea.clear();
|
||||||
keyTextField.setEnabled(true);
|
if (hasCreatePermission()) {
|
||||||
addIcon.setEnabled(false);
|
keyTextField.setEnabled(true);
|
||||||
|
valueTextArea.setEnabled(true);
|
||||||
|
addIcon.setEnabled(false);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
keyTextField.setEnabled(false);
|
||||||
|
valueTextArea.setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
metadataWindow.setSaveButtonEnabled(false);
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
setDiscardButtonEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onValueChange(TextChangeEvent event) {
|
private void onValueChange(TextChangeEvent event) {
|
||||||
if (!keyTextField.getValue().isEmpty() && !event.getText().isEmpty()) {
|
if (hasCreatePermission() || hasUpdatePermission()) {
|
||||||
metadataWindow.setSaveButtonEnabled(true);
|
if (!keyTextField.getValue().isEmpty() && !event.getText().isEmpty()) {
|
||||||
metadataWindow.setCancelButtonEnabled(true);
|
metadataWindow.setSaveButtonEnabled(true);
|
||||||
} else {
|
setDiscardButtonEnabled(true);
|
||||||
metadataWindow.setSaveButtonEnabled(false);
|
} else {
|
||||||
metadataWindow.setCancelButtonEnabled(false);
|
metadataWindow.setSaveButtonEnabled(false);
|
||||||
|
setDiscardButtonEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,7 +488,8 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
} else {
|
} else {
|
||||||
metaDataGrid.getColumn(DELETE_BUTTON).setWidth(50);
|
metaDataGrid.getColumn(DELETE_BUTTON).setWidth(50);
|
||||||
}
|
}
|
||||||
//Repopulating the grid (forcing for repaint)- workaround as grid size is not getting adjusted
|
// Repopulating the grid (forcing for repaint)- workaround as grid size
|
||||||
|
// is not getting adjusted
|
||||||
Map<String, String> keyValueDetails = new LinkedHashMap<>();
|
Map<String, String> keyValueDetails = new LinkedHashMap<>();
|
||||||
for (Object key : metaDataGrid.getContainerDataSource().getItemIds()) {
|
for (Object key : metaDataGrid.getContainerDataSource().getItemIds()) {
|
||||||
Item item = metaDataGrid.getContainerDataSource().getItem(key);
|
Item item = metaDataGrid.getContainerDataSource().getItem(key);
|
||||||
@@ -489,4 +502,47 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Button createDiscardButton() {
|
||||||
|
Button discardButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON,
|
||||||
|
i18n.get("button.discard"), "", "", true, FontAwesome.UNDO, SPUIButtonStyleBorderWithIcon.class);
|
||||||
|
discardButton.setSizeUndefined();
|
||||||
|
discardButton.addStyleName("default-color");
|
||||||
|
discardButton.addClickListener(event -> 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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
|
|||||||
|
|
||||||
import com.vaadin.data.Property.ValueChangeListener;
|
import com.vaadin.data.Property.ValueChangeListener;
|
||||||
import com.vaadin.server.FontAwesome;
|
import com.vaadin.server.FontAwesome;
|
||||||
import com.vaadin.server.Resource;
|
|
||||||
import com.vaadin.ui.AbstractOrderedLayout;
|
import com.vaadin.ui.AbstractOrderedLayout;
|
||||||
import com.vaadin.ui.Alignment;
|
import com.vaadin.ui.Alignment;
|
||||||
import com.vaadin.ui.Button;
|
import com.vaadin.ui.Button;
|
||||||
@@ -161,23 +160,11 @@ public class CommonDialogWindow extends Window {
|
|||||||
public void setSaveButtonEnabled(final boolean enabled) {
|
public void setSaveButtonEnabled(final boolean enabled) {
|
||||||
saveButton.setEnabled(enabled);
|
saveButton.setEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCancelButtonEnabled(final boolean enabled) {
|
|
||||||
cancelButton.setEnabled(enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HorizontalLayout getButtonsLayout() {
|
public HorizontalLayout getButtonsLayout() {
|
||||||
return buttonsLayout;
|
return buttonsLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCancelButtonCaption(final String caption) {
|
|
||||||
cancelButton.setCaption(caption);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCancelButtonIcon(final Resource icon) {
|
|
||||||
cancelButton.setIcon(icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
public VerticalLayout getMainLayout() {
|
public VerticalLayout getMainLayout() {
|
||||||
return mainLayout;
|
return mainLayout;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ public abstract class AbstractTableDetailsLayout<T extends NamedEntity> extends
|
|||||||
|
|
||||||
private Button editButton;
|
private Button editButton;
|
||||||
|
|
||||||
|
private Button manageMetadataBtn;
|
||||||
|
|
||||||
private TabSheet detailsTab;
|
private TabSheet detailsTab;
|
||||||
|
|
||||||
private VerticalLayout detailsLayout;
|
private VerticalLayout detailsLayout;
|
||||||
@@ -137,6 +139,12 @@ public abstract class AbstractTableDetailsLayout<T extends NamedEntity> extends
|
|||||||
editButton.setId(getEditButtonId());
|
editButton.setId(getEditButtonId());
|
||||||
editButton.addClickListener(this::onEdit);
|
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);
|
editButton.setEnabled(false);
|
||||||
|
|
||||||
detailsTab = SPUIComponentProvider.getDetailsTabSheet();
|
detailsTab = SPUIComponentProvider.getDetailsTabSheet();
|
||||||
@@ -156,6 +164,10 @@ public abstract class AbstractTableDetailsLayout<T extends NamedEntity> extends
|
|||||||
if (hasEditPermission()) {
|
if (hasEditPermission()) {
|
||||||
nameEditLayout.addComponent(editButton);
|
nameEditLayout.addComponent(editButton);
|
||||||
nameEditLayout.setComponentAlignment(editButton, Alignment.TOP_RIGHT);
|
nameEditLayout.setComponentAlignment(editButton, Alignment.TOP_RIGHT);
|
||||||
|
if (isMetadataIconToBeDisplayed()) {
|
||||||
|
nameEditLayout.addComponent(manageMetadataBtn);
|
||||||
|
nameEditLayout.setComponentAlignment(manageMetadataBtn, Alignment.TOP_RIGHT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nameEditLayout.setExpandRatio(caption, 1.0F);
|
nameEditLayout.setExpandRatio(caption, 1.0F);
|
||||||
nameEditLayout.addStyleName(SPUIStyleDefinitions.WIDGET_TITLE);
|
nameEditLayout.addStyleName(SPUIStyleDefinitions.WIDGET_TITLE);
|
||||||
@@ -336,4 +348,10 @@ public abstract class AbstractTableDetailsLayout<T extends NamedEntity> extends
|
|||||||
|
|
||||||
protected abstract String getName();
|
protected abstract String getName();
|
||||||
|
|
||||||
|
protected abstract String getShowMetadataButtonId();
|
||||||
|
|
||||||
|
protected abstract Boolean isMetadataIconToBeDisplayed();
|
||||||
|
|
||||||
|
protected abstract void showMetadata(Button.ClickEvent event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -399,10 +399,29 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
|
|||||||
return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID;
|
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) {
|
private boolean isDistributionSetSelected(DistributionSet ds) {
|
||||||
DistributionSetIdName lastselectedDistDS = manageDistUIState.getLastSelectedDistribution().isPresent() ? manageDistUIState
|
DistributionSetIdName lastselectedDistDS = manageDistUIState.getLastSelectedDistribution().isPresent() ? manageDistUIState
|
||||||
.getLastSelectedDistribution().get() : null;
|
.getLastSelectedDistribution().get() : null;
|
||||||
return ds != null && lastselectedDistDS != null && lastselectedDistDS.getName().equals(ds.getName())
|
return ds != null && lastselectedDistDS != null && lastselectedDistDS.getName().equals(ds.getName())
|
||||||
&& lastselectedDistDS.getVersion().endsWith(ds.getVersion());
|
&& lastselectedDistDS.getVersion().endsWith(ds.getVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void showMetadata(ClickEvent event) {
|
||||||
|
UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(getSelectedBaseEntity(),null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.eclipse.hawkbit.repository.DistributionSetManagement;
|
import org.eclipse.hawkbit.repository.DistributionSetManagement;
|
||||||
import org.eclipse.hawkbit.repository.EntityFactory;
|
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.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
|
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
|
||||||
import org.eclipse.hawkbit.ui.common.AbstractMetadataPopupLayout;
|
import org.eclipse.hawkbit.ui.common.AbstractMetadataPopupLayout;
|
||||||
@@ -37,14 +38,17 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout<Distribut
|
|||||||
@Autowired
|
@Autowired
|
||||||
private EntityFactory entityFactory;
|
private EntityFactory entityFactory;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected SpPermissionChecker permChecker;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void checkForDuplicate(DistributionSet entity, String value) {
|
protected void checkForDuplicate(DistributionSet entity, String value) {
|
||||||
distributionSetManagement.findOne(entity, value);
|
distributionSetManagement.findOne(entity, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create metadata for DistributionSet.
|
* Create metadata for DistributionSet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DistributionSetMetadata createMetadata(DistributionSet entity, String key, String value) {
|
protected DistributionSetMetadata createMetadata(DistributionSet entity, String key, String value) {
|
||||||
DistributionSetMetadata dsMetaData = distributionSetManagement.createDistributionSetMetadata(entityFactory
|
DistributionSetMetadata dsMetaData = distributionSetManagement.createDistributionSetMetadata(entityFactory
|
||||||
@@ -80,4 +84,14 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout<Distribut
|
|||||||
distributionSetManagement.deleteDistributionSetMetadata(entity, key);
|
distributionSetManagement.deleteDistributionSetMetadata(entity, key);
|
||||||
eventBus.publish(this, new MetadataEvent(MetadataUIEvent.DELETE_DISTRIBUTION_SET_METADATA, dsMetaData));
|
eventBus.publish(this, new MetadataEvent(MetadataUIEvent.DELETE_DISTRIBUTION_SET_METADATA, dsMetaData));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasCreatePermission() {
|
||||||
|
return permChecker.hasCreateDistributionPermission();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasUpdatePermission() {
|
||||||
|
return permChecker.hasUpdateDistributionPermission();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2015 Bosch Software Innovations GmbH and others.
|
|
||||||
*
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*/
|
|
||||||
package org.eclipse.hawkbit.ui.distributions.event;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public enum SwModuleUIEvent {
|
|
||||||
HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DELETED_ALL_SOFWARE ;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -12,6 +12,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.eclipse.hawkbit.repository.EntityFactory;
|
import org.eclipse.hawkbit.repository.EntityFactory;
|
||||||
import org.eclipse.hawkbit.repository.SoftwareManagement;
|
import org.eclipse.hawkbit.repository.SoftwareManagement;
|
||||||
|
import org.eclipse.hawkbit.repository.SpPermissionChecker;
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
|
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
|
||||||
import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState;
|
import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState;
|
||||||
@@ -46,6 +47,9 @@ public class SwMetadataPopupLayout extends AbstractMetadataPopupLayout<SoftwareM
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ManageDistUIState manageDistUIState;
|
private ManageDistUIState manageDistUIState;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected SpPermissionChecker permChecker;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void checkForDuplicate(SoftwareModule entity, String value) {
|
protected void checkForDuplicate(SoftwareModule entity, String value) {
|
||||||
softwareManagement.findSoftwareModuleMetadata(entity, value);
|
softwareManagement.findSoftwareModuleMetadata(entity, value);
|
||||||
@@ -86,5 +90,15 @@ public class SwMetadataPopupLayout extends AbstractMetadataPopupLayout<SoftwareM
|
|||||||
softwareManagement.deleteSoftwareModuleMetadata(entity, key);
|
softwareManagement.deleteSoftwareModuleMetadata(entity, key);
|
||||||
eventBus.publish(this, new MetadataEvent(MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA, swMetadata));
|
eventBus.publish(this, new MetadataEvent(MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA, swMetadata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasCreatePermission() {
|
||||||
|
return permChecker.hasCreateDistributionPermission();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasUpdatePermission() {
|
||||||
|
return permChecker.hasUpdateDistributionPermission();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,4 +208,20 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay
|
|||||||
&& selectedDistSWModuleId.equals(softwareModule.getId());
|
&& selectedDistSWModuleId.equals(softwareModule.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,11 +206,28 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail
|
|||||||
return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID;
|
return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Boolean isMetadataIconToBeDisplayed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getShowMetadataButtonId() {
|
||||||
|
DistributionSetIdName lastselectedDistDS = managementUIState.getLastSelectedDistribution().isPresent() ? managementUIState
|
||||||
|
.getLastSelectedDistribution().get() : null;
|
||||||
|
return SPUIComponentIdProvider.DS_TABLE_MANAGE_METADATA_ID + "." + lastselectedDistDS.getName() + "."
|
||||||
|
+ lastselectedDistDS.getVersion();
|
||||||
|
}
|
||||||
private boolean isDistributionSetSelected(DistributionSet ds) {
|
private boolean isDistributionSetSelected(DistributionSet ds) {
|
||||||
DistributionSetIdName lastselectedManageDS = managementUIState.getLastSelectedDistribution().isPresent() ? managementUIState
|
DistributionSetIdName lastselectedManageDS = managementUIState.getLastSelectedDistribution().isPresent() ? managementUIState
|
||||||
.getLastSelectedDistribution().get() : null;
|
.getLastSelectedDistribution().get() : null;
|
||||||
return ds!=null && lastselectedManageDS != null && lastselectedManageDS.getName().equals(ds.getName())
|
return ds!=null && lastselectedManageDS != null && lastselectedManageDS.getName().equals(ds.getName())
|
||||||
&& lastselectedManageDS.getVersion().endsWith(ds.getVersion());
|
&& lastselectedManageDS.getVersion().endsWith(ds.getVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void showMetadata(ClickEvent event) {
|
||||||
|
UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(getSelectedBaseEntity(),null));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
|
|||||||
|
|
||||||
private Button createManageMetadataButton(String nameVersionStr) {
|
private Button createManageMetadataButton(String nameVersionStr) {
|
||||||
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
|
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
|
||||||
SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
|
SPUIComponentIdProvider.DS_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
|
||||||
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
|
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
|
||||||
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
|
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.ARTIFACT_DTLS_ICON);
|
||||||
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.DS_METADATA_ICON);
|
manageMetadataBtn.addStyleName(SPUIStyleDefinitions.DS_METADATA_ICON);
|
||||||
|
|||||||
@@ -248,4 +248,19 @@ public class TargetDetails extends AbstractTableDetailsLayout<Target> {
|
|||||||
return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID;
|
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
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user