Software module metadata available to targets (in DMF and DDI) (#608)

* Software module metadata can be configure as target visible.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Added metadata to DDI.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Managed by UI.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Complete DMF integration and started UI.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Add DMF tests and completed UI.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Add RSQL test. Fix sonar issues.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Add JavaDocs. foreachtenant robustness.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Review feedback included.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Updated DMF docs.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* targetVisible optional in builder.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Fix typos.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Fix checkbox ID.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* DB optimization.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Fix component ID of sm metadat details tab.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>
This commit is contained in:
Kai Zimmermann
2017-12-16 17:17:54 +01:00
committed by GitHub
parent c3035231e2
commit 80d9f1b8fc
108 changed files with 1883 additions and 917 deletions

View File

@@ -12,7 +12,6 @@ import java.io.Serializable;
import org.eclipse.hawkbit.im.authentication.PermissionService;
import org.eclipse.hawkbit.im.authentication.SpPermission;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Bean which contains all SP permissions.
@@ -23,7 +22,6 @@ public class SpPermissionChecker implements Serializable {
protected transient PermissionService permissionService;
@Autowired
protected SpPermissionChecker(final PermissionService permissionService) {
this.permissionService = permissionService;
}
@@ -52,7 +50,7 @@ public class SpPermissionChecker implements Serializable {
* @return TARGET_REPOSITORY_READ boolean value
*/
public boolean hasTargetAndRepositoryReadPermission() {
return hasTargetReadPermission() && hasReadDistributionPermission();
return hasTargetReadPermission() && hasReadRepositoryPermission();
}
/**
@@ -92,39 +90,39 @@ public class SpPermissionChecker implements Serializable {
}
/**
* Gets the SP READ Distribution Permission.
* Gets the SP READ Repository Permission.
*
* @return READ_REPOSITORY boolean value
*/
public boolean hasReadDistributionPermission() {
public boolean hasReadRepositoryPermission() {
return permissionService.hasPermission(SpPermission.READ_REPOSITORY);
}
/**
* Gets the SP create Distribution Permission.
* Gets the SP create Repository Permission.
*
* @return CREATE_REPOSITORY boolean value
*/
public boolean hasCreateDistributionPermission() {
return hasReadDistributionPermission() && permissionService.hasPermission(SpPermission.CREATE_REPOSITORY);
public boolean hasCreateRepositoryPermission() {
return hasReadRepositoryPermission() && permissionService.hasPermission(SpPermission.CREATE_REPOSITORY);
}
/**
* Gets the SP update Distribution Permission.
* Gets the SP update Repository Permission.
*
* @return UPDATE_REPOSITORY boolean value
*/
public boolean hasUpdateDistributionPermission() {
return hasReadDistributionPermission() && permissionService.hasPermission(SpPermission.UPDATE_REPOSITORY);
public boolean hasUpdateRepositoryPermission() {
return hasReadRepositoryPermission() && permissionService.hasPermission(SpPermission.UPDATE_REPOSITORY);
}
/**
* Gets the SP delete Distribution Permission.
* Gets the SP delete Repository Permission.
*
* @return DELETE_REPOSITORY boolean value
*/
public boolean hasDeleteDistributionPermission() {
return hasReadDistributionPermission() && permissionService.hasPermission(SpPermission.DELETE_REPOSITORY);
public boolean hasDeleteRepositoryPermission() {
return hasReadRepositoryPermission() && permissionService.hasPermission(SpPermission.DELETE_REPOSITORY);
}
/**
@@ -133,7 +131,7 @@ public class SpPermissionChecker implements Serializable {
* @return permission for rollout update
*/
public boolean hasRolloutUpdatePermission() {
return hasUpdateTargetPermission() && hasReadDistributionPermission()
return hasUpdateTargetPermission() && hasReadRepositoryPermission()
&& permissionService.hasPermission(SpPermission.ROLLOUT_MANAGEMENT);
}
@@ -143,7 +141,7 @@ public class SpPermissionChecker implements Serializable {
* @return permission for rollout create
*/
public boolean hasRolloutCreatePermission() {
return hasUpdateTargetPermission() && hasReadDistributionPermission()
return hasUpdateTargetPermission() && hasReadRepositoryPermission()
&& permissionService.hasPermission(SpPermission.ROLLOUT_MANAGEMENT);
}

View File

@@ -157,7 +157,7 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW
}
private void buildLayout() {
if (permChecker.hasReadDistributionPermission() || permChecker.hasCreateDistributionPermission()) {
if (permChecker.hasReadRepositoryPermission() || permChecker.hasCreateRepositoryPermission()) {
setSizeFull();
createMainLayout();
addComponents(mainLayout);
@@ -170,7 +170,7 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW
detailAndUploadLayout.addComponent(artifactDetailsLayout);
detailAndUploadLayout.setComponentAlignment(artifactDetailsLayout, Alignment.MIDDLE_CENTER);
if (permChecker.hasCreateDistributionPermission()) {
if (permChecker.hasCreateRepositoryPermission()) {
dadw = uploadLayout.getDropAreaWrapper();
detailAndUploadLayout.addComponent(dadw);
detailAndUploadLayout.setComponentAlignment(dadw, Alignment.MIDDLE_CENTER);
@@ -204,7 +204,7 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW
private void createUploadButtonLayout() {
uplaodButtonsLayout = new HorizontalLayout();
if (permChecker.hasCreateDistributionPermission()) {
if (permChecker.hasCreateRepositoryPermission()) {
uplaodButtonsLayout = uploadLayout.getFileUploadLayout();
}
}

View File

@@ -92,7 +92,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
@Override
protected boolean hasDeletePermission() {
return permChecker.hasDeleteDistributionPermission();
return permChecker.hasDeleteRepositoryPermission();
}
@Override

View File

@@ -8,7 +8,6 @@
*/
package org.eclipse.hawkbit.ui.artifacts.smtable;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
@@ -31,8 +30,8 @@ public class SoftwareModuleDetails extends AbstractSoftwareModuleDetails {
final SpPermissionChecker permissionChecker,
final SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow,
final ArtifactUploadState artifactUploadState, final SoftwareModuleManagement softwareManagement,
final SwMetadataPopupLayout swMetadataPopupLayout, final EntityFactory entityFactory) {
super(i18n, eventBus, permissionChecker, null, softwareManagement, swMetadataPopupLayout, entityFactory,
final SwMetadataPopupLayout swMetadataPopupLayout) {
super(i18n, eventBus, permissionChecker, null, softwareManagement, swMetadataPopupLayout,
softwareModuleAddUpdateWindow);
this.artifactUploadState = artifactUploadState;
restoreState();

View File

@@ -49,7 +49,7 @@ public class SoftwareModuleTableLayout extends AbstractTableLayout<SoftwareModul
softwareModuleAddUpdateWindow),
softwareModuleTable,
new SoftwareModuleDetails(i18n, eventBus, permChecker, softwareModuleAddUpdateWindow,
artifactUploadState, softwareModuleManagement, swMetadataPopupLayout, entityFactory));
artifactUploadState, softwareModuleManagement, swMetadataPopupLayout));
}
public SoftwareModuleTable getSoftwareModuleTable() {

View File

@@ -43,14 +43,14 @@ public class SMTypeFilterHeader extends AbstractFilterHeader {
this.createUpdateSWTypeLayout = new CreateUpdateSoftwareTypeLayout(i18n, entityFactory, eventBus, permChecker,
uiNotification, softwareModuletypeManagement);
if (permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission()) {
if (permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission()) {
createUpdateSWTypeLayout.init();
}
}
@Override
protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
return permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission();
}
@Override

View File

@@ -67,9 +67,9 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
private static final long serialVersionUID = -1491218218453167613L;
private static final String VALUE = "value";
protected static final String VALUE = "value";
private static final String KEY = "key";
protected static final String KEY = "key";
protected static final int MAX_METADATA_QUERY = 500;
@@ -133,11 +133,11 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
*
* @param entity
* entity for which metadata data is displayed
* @param metaData
* metadata to be selected
* @param metaDatakey
* metadata key to be selected
* @return @link{CommonDialogWindow}
*/
public CommonDialogWindow getWindow(final E entity, final M metaData) {
public CommonDialogWindow getWindow(final E entity, final String metaDatakey) {
selectedEntity = entity;
final String nameVersion = HawkbitCommonUtil.getFormattedNameVersion(entity.getName(), entity.getVersion());
@@ -150,7 +150,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
metadataWindow.setWidth(800, Unit.PIXELS);
metadataWindow.getMainLayout().setSizeFull();
metadataWindow.getButtonsLayout().setHeight("45px");
setUpDetails(entity.getId(), metaData);
setUpDetails(entity.getId(), metaDatakey);
return metadataWindow;
}
@@ -170,13 +170,13 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
protected abstract List<M> getMetadataList();
protected abstract void deleteMetadata(E entity, String key, String value);
protected abstract void deleteMetadata(E entity, String key);
protected abstract boolean hasCreatePermission();
protected abstract boolean hasUpdatePermission();
private void createComponents() {
protected void createComponents() {
keyTextField = createKeyTextField();
valueTextArea = createValueTextField();
metaDataGrid = createMetadataGrid();
@@ -211,13 +211,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
tableLayout.addStyleName("table-layout");
tableLayout.setExpandRatio(metaDataGrid, 1.0F);
final VerticalLayout metadataFieldsLayout = new VerticalLayout();
metadataFieldsLayout.setSizeFull();
metadataFieldsLayout.setHeight("100%");
metadataFieldsLayout.addComponent(keyTextField);
metadataFieldsLayout.addComponent(valueTextArea);
metadataFieldsLayout.setSpacing(true);
metadataFieldsLayout.setExpandRatio(valueTextArea, 1F);
final VerticalLayout metadataFieldsLayout = createMetadataFieldsLayout();
mainLayout = new HorizontalLayout();
mainLayout.addComponent(tableLayout);
@@ -230,6 +224,17 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
setSizeFull();
}
protected VerticalLayout createMetadataFieldsLayout() {
final VerticalLayout metadataFieldsLayout = new VerticalLayout();
metadataFieldsLayout.setSizeFull();
metadataFieldsLayout.setHeight("100%");
metadataFieldsLayout.addComponent(keyTextField);
metadataFieldsLayout.addComponent(valueTextArea);
metadataFieldsLayout.setSpacing(true);
metadataFieldsLayout.setExpandRatio(valueTextArea, 1F);
return metadataFieldsLayout;
}
private TextField createKeyTextField() {
final TextField keyField = new TextFieldBuilder().caption(i18n.getMessage("textfield.key")).required(true)
.prompt(i18n.getMessage("textfield.key")).immediate(true)
@@ -252,7 +257,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
return valueTextArea;
}
private Grid createMetadataGrid() {
protected Grid createMetadataGrid() {
final Grid metadataGrid = new Grid();
metadataGrid.addStyleName(SPUIStyleDefinitions.METADATA_GRID);
metadataGrid.setImmediate(true);
@@ -276,22 +281,21 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
private void onDelete(final RendererClickEvent event) {
final Item item = metaDataGrid.getContainerDataSource().getItem(event.getItemId());
final String key = (String) item.getItemProperty(KEY).getValue();
final String value = (String) item.getItemProperty(VALUE).getValue();
final ConfirmationDialog confirmDialog = new ConfirmationDialog(
i18n.getMessage("caption.metadata.delete.action.confirmbox"),
i18n.getMessage("message.confirm.delete.metadata", key), i18n.getMessage("button.ok"),
i18n.getMessage("button.cancel"), ok -> {
if (ok) {
handleOkDeleteMetadata(event, key, value);
handleOkDeleteMetadata(event, key);
}
});
UI.getCurrent().addWindow(confirmDialog.getWindow());
confirmDialog.getWindow().bringToFront();
}
private void handleOkDeleteMetadata(final RendererClickEvent event, final String key, final String value) {
deleteMetadata(getSelectedEntity(), key, value);
private void handleOkDeleteMetadata(final RendererClickEvent event, final String key) {
deleteMetadata(getSelectedEntity(), key);
uiNotification.displaySuccess(i18n.getMessage("message.metadata.deleted.successfully", key));
final Object selectedRow = metaDataGrid.getSelectedRow();
metaDataGrid.getContainerDataSource().removeItem(event.getItemId());
@@ -306,17 +310,15 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
}
}
} else {
clearTextFields();
resetFields();
}
}
private void clearTextFields() {
keyTextField.clear();
valueTextArea.clear();
private void resetFields() {
clearFields();
metaDataGrid.select(null);
if (hasCreatePermission()) {
keyTextField.setEnabled(true);
valueTextArea.setEnabled(true);
enableEditing();
addIcon.setEnabled(false);
}
}
@@ -341,7 +343,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
return swcontactContainer;
}
private void popualateKeyValue(final Object metadataCompositeKey) {
protected Item popualateKeyValue(final Object metadataCompositeKey) {
if (metadataCompositeKey != null) {
final Item item = metaDataGrid.getContainerDataSource().getItem(metadataCompositeKey);
keyTextField.setValue((String) item.getItemProperty(KEY).getValue());
@@ -350,39 +352,47 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
if (hasUpdatePermission()) {
valueTextArea.setEnabled(true);
}
return item;
}
return null;
}
private void populateGrid() {
final List<M> metadataList = getMetadataList();
for (final M metaData : metadataList) {
addItemToGrid(metaData.getKey(), metaData.getValue());
addItemToGrid(metaData);
}
}
private void addItemToGrid(final String key, final String value) {
protected Item addItemToGrid(final M metaData) {
final IndexedContainer metadataContainer = (IndexedContainer) metaDataGrid.getContainerDataSource();
final Item item = metadataContainer.addItem(key);
item.getItemProperty(VALUE).setValue(value);
item.getItemProperty(KEY).setValue(key);
final Item item = metadataContainer.addItem(metaData.getKey());
item.getItemProperty(VALUE).setValue(metaData.getValue());
item.getItemProperty(KEY).setValue(metaData.getKey());
return item;
}
private void updateItemInGrid(final String key) {
protected Item updateItemInGrid(final String key) {
final IndexedContainer metadataContainer = (IndexedContainer) metaDataGrid.getContainerDataSource();
final Item item = metadataContainer.getItem(key);
item.getItemProperty(VALUE).setValue(valueTextArea.getValue());
return item;
}
private void onAdd() {
metaDataGrid.deselect(metaDataGrid.getSelectedRow());
valueTextArea.clear();
keyTextField.clear();
keyTextField.setEnabled(true);
valueTextArea.setEnabled(true);
clearFields();
enableEditing();
addIcon.setEnabled(true);
}
private void onSave() {
protected void clearFields() {
valueTextArea.clear();
keyTextField.clear();
}
protected void onSave() {
final String key = keyTextField.getValue();
final String value = valueTextArea.getValue();
if (mandatoryCheck()) {
@@ -391,7 +401,7 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
if (!duplicateCheck(entity)) {
final M metadata = createMetadata(entity, key, value);
uiNotification.displaySuccess(i18n.getMessage("message.metadata.saved", metadata.getKey()));
addItemToGrid(metadata.getKey(), metadata.getValue());
addItemToGrid(metadata);
metaDataGrid.scrollToEnd();
metaDataGrid.select(metadata.getKey());
addIcon.setEnabled(true);
@@ -456,17 +466,15 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
}
}
private void onRowClick(final SelectionEvent event) {
protected void onRowClick(final SelectionEvent event) {
final Set<Object> itemsSelected = event.getSelected();
if (!itemsSelected.isEmpty()) {
popualateKeyValue(itemsSelected.iterator().next());
addIcon.setEnabled(true);
} else {
keyTextField.clear();
valueTextArea.clear();
clearFields();
if (hasCreatePermission()) {
keyTextField.setEnabled(true);
valueTextArea.setEnabled(true);
enableEditing();
addIcon.setEnabled(false);
} else {
keyTextField.setEnabled(false);
@@ -476,6 +484,11 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
metadataWindow.setSaveButtonEnabled(false);
}
protected void enableEditing() {
keyTextField.setEnabled(true);
valueTextArea.setEnabled(true);
}
private void onValueChange(final TextChangeEvent event) {
if (hasCreatePermission() || hasUpdatePermission()) {
if (!keyTextField.getValue().isEmpty() && !event.getText().isEmpty()) {
@@ -486,33 +499,47 @@ public abstract class AbstractMetadataPopupLayout<E extends NamedVersionedEntity
}
}
private void setUpDetails(final Long swId, final M metaData) {
private void setUpDetails(final Long swId, final String metaDatakey) {
resetDetails();
if (swId != null) {
metaDataGrid.getContainerDataSource().removeAllItems();
populateGrid();
metaDataGrid.getSelectionModel().reset();
if (!metaDataGrid.getContainerDataSource().getItemIds().isEmpty()) {
if (metaData == null) {
if (metaDatakey == null) {
metaDataGrid.select(metaDataGrid.getContainerDataSource().getIdByIndex(0));
} else {
metaDataGrid.select(metaData.getKey());
metaDataGrid.select(metaDatakey);
}
} else if (hasCreatePermission()) {
keyTextField.setEnabled(true);
valueTextArea.setEnabled(true);
enableEditing();
addIcon.setEnabled(false);
}
}
}
private void resetDetails() {
keyTextField.clear();
valueTextArea.clear();
keyTextField.setEnabled(false);
valueTextArea.setEnabled(false);
clearFields();
disableEditing();
metadataWindow.setSaveButtonEnabled(false);
addIcon.setEnabled(true);
}
protected void disableEditing() {
keyTextField.setEnabled(false);
valueTextArea.setEnabled(false);
}
protected TextArea getValueTextArea() {
return valueTextArea;
}
protected TextField getKeyTextField() {
return keyTextField;
}
protected CommonDialogWindow getMetadataWindow() {
return metadataWindow;
}
}

View File

@@ -12,7 +12,6 @@ import java.util.Optional;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken;
@@ -45,7 +44,7 @@ public abstract class AbstractDistributionSetDetails
private final DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout;
private final DistributionSetMetadatadetailsLayout dsMetadataTable;
private final DistributionSetMetadataDetailsLayout dsMetadataTable;
private final UINotification uiNotification;
@@ -63,8 +62,8 @@ public abstract class AbstractDistributionSetDetails
final SpPermissionChecker permissionChecker, final ManagementUIState managementUIState,
final DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout,
final DistributionSetManagement distributionSetManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout, final EntityFactory entityFactory,
final UINotification uiNotification, final DistributionSetTagManagement distributionSetTagManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout, final UINotification uiNotification,
final DistributionSetTagManagement distributionSetTagManagement,
final SoftwareModuleDetailsTable softwareModuleDetailsTable) {
super(i18n, eventBus, permissionChecker, managementUIState);
this.distributionAddUpdateWindowLayout = distributionAddUpdateWindowLayout;
@@ -75,8 +74,8 @@ public abstract class AbstractDistributionSetDetails
managementUIState, distributionSetTagManagement, distributionSetManagement);
this.softwareModuleDetailsTable = softwareModuleDetailsTable;
dsMetadataTable = new DistributionSetMetadatadetailsLayout(i18n, permissionChecker, distributionSetManagement,
dsMetadataPopupLayout, entityFactory, uiNotification);
dsMetadataTable = new DistributionSetMetadataDetailsLayout(i18n, distributionSetManagement,
dsMetadataPopupLayout);
createSoftwareModuleTab();
addDetailsTab();
}
@@ -106,7 +105,7 @@ public abstract class AbstractDistributionSetDetails
@Override
protected boolean hasEditPermission() {
return getPermissionChecker().hasUpdateDistributionPermission();
return getPermissionChecker().hasUpdateRepositoryPermission();
}
@Override
@@ -131,8 +130,7 @@ public abstract class AbstractDistributionSetDetails
@Override
protected void showMetadata(final ClickEvent event) {
final Optional<DistributionSet> ds = distributionSetManagement
.get(getSelectedBaseEntityId());
final Optional<DistributionSet> ds = distributionSetManagement.get(getSelectedBaseEntityId());
if (!ds.isPresent()) {
uiNotification.displayWarning(getI18n().getMessage("distributionset.not.exists"));
return;

View File

@@ -0,0 +1,95 @@
/**
* 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.common.detailslayout;
import org.eclipse.hawkbit.repository.model.MetaData;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import com.vaadin.data.Item;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.ui.Button;
import com.vaadin.ui.Table;
import com.vaadin.ui.themes.ValoTheme;
/**
* Abstract metadata tab for entities.
*
*/
public abstract class AbstractMetadataDetailsLayout extends Table {
protected static final String METADATA_KEY = "Key";
protected static final int MAX_METADATA_QUERY = 500;
private final VaadinMessageSource i18n;
protected AbstractMetadataDetailsLayout(final VaadinMessageSource i18n) {
this.i18n = i18n;
createMetadataTable();
addCustomGeneratedColumns();
}
private VaadinMessageSource getI18n() {
return i18n;
}
private void createMetadataTable() {
addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES);
addStyleName(ValoTheme.TABLE_NO_STRIPES);
setSelectable(false);
setImmediate(true);
setContainerDataSource(getContainer());
setColumnHeaderMode(ColumnHeaderMode.EXPLICIT);
addTableHeader();
setSizeFull();
// same as height of other tabs in details tabsheet
setHeight(116, Unit.PIXELS);
}
private IndexedContainer getContainer() {
final IndexedContainer container = new IndexedContainer();
container.addContainerProperty(METADATA_KEY, String.class, "");
setColumnExpandRatio(METADATA_KEY, 0.7F);
setColumnAlignment(METADATA_KEY, Align.LEFT);
return container;
}
private void addTableHeader() {
setColumnHeader(METADATA_KEY, getI18n().getMessage("header.key"));
}
protected void setMetadataProperties(final MetaData dsMetadata) {
final Item item = getContainerDataSource().addItem(dsMetadata.getKey());
item.getItemProperty(METADATA_KEY).setValue(dsMetadata.getKey());
}
private void addCustomGeneratedColumns() {
addGeneratedColumn(METADATA_KEY, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId));
}
private Button customMetadataDetailButton(final String metadataKey) {
final Button viewIcon = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), metadataKey,
"View " + metadataKey + " Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class);
viewIcon.setData(metadataKey);
viewIcon.addStyleName(ValoTheme.BUTTON_TINY + " " + ValoTheme.BUTTON_LINK + " " + "on-focus-no-border link"
+ " " + "text-style");
viewIcon.addClickListener(event -> showMetadataDetails(metadataKey));
return viewIcon;
}
protected abstract String getDetailLinkId(final String name);
protected abstract void showMetadataDetails(final String metadataKey);
}

View File

@@ -8,15 +8,12 @@
*/
package org.eclipse.hawkbit.ui.common.detailslayout;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.model.MetaData;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent;
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow;
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.management.state.ManagementUIState;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
@@ -41,7 +38,7 @@ public abstract class AbstractSoftwareModuleDetails
private static final long serialVersionUID = 1L;
private final SoftwareModuleMetadatadetailslayout swmMetadataTable;
private final SoftwareModuleMetadataDetailsLayout swmMetadataTable;
private final SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow;
@@ -52,40 +49,18 @@ public abstract class AbstractSoftwareModuleDetails
protected AbstractSoftwareModuleDetails(final VaadinMessageSource i18n, final UIEventBus eventBus,
final SpPermissionChecker permissionChecker, final ManagementUIState managementUIState,
final SoftwareModuleManagement softwareManagement, final SwMetadataPopupLayout swMetadataPopupLayout,
final EntityFactory entityFactory, final SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow) {
final SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow) {
super(i18n, eventBus, permissionChecker, managementUIState);
this.softwareModuleAddUpdateWindow = softwareModuleAddUpdateWindow;
this.softwareModuleManagement = softwareManagement;
this.swMetadataPopupLayout = swMetadataPopupLayout;
swmMetadataTable = new SoftwareModuleMetadatadetailslayout();
swmMetadataTable.init(getI18n(), getPermissionChecker(), softwareManagement, swMetadataPopupLayout,
entityFactory);
swmMetadataTable = new SoftwareModuleMetadataDetailsLayout(getI18n(), softwareManagement,
swMetadataPopupLayout);
addDetailsTab();
}
/**
* MetadataEvent.
*
* @param event
* as instance of {@link MetadataEvent}
*/
@EventBusListenerMethod(scope = EventScope.UI)
void onEvent(final MetadataEvent event) {
UI.getCurrent().access(() -> {
final MetaData softwareModuleMetadata = event.getMetaData();
if (softwareModuleMetadata == null || !isSoftwareModuleSelected(event.getModule())) {
return;
}
if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) {
swmMetadataTable.createMetadata(event.getMetaData().getKey());
} else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) {
swmMetadataTable.deleteMetadata(event.getMetaData().getKey());
}
});
}
@EventBusListenerMethod(scope = EventScope.UI)
void onEvent(final SoftwareModuleEvent softwareModuleEvent) {
onBaseEntityEvent(softwareModuleEvent);
@@ -124,7 +99,7 @@ public abstract class AbstractSoftwareModuleDetails
@Override
protected boolean hasEditPermission() {
return getPermissionChecker().hasUpdateDistributionPermission();
return getPermissionChecker().hasUpdateRepositoryPermission();
}
@Override

View File

@@ -0,0 +1,87 @@
/**
* 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.common.detailslayout;
import java.util.List;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
import org.eclipse.hawkbit.ui.distributions.dstable.DsMetadataPopupLayout;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.data.domain.PageRequest;
import com.vaadin.ui.UI;
/**
* DistributionSet Metadata details layout.
*
*/
public class DistributionSetMetadataDetailsLayout extends AbstractMetadataDetailsLayout {
private static final long serialVersionUID = 1L;
private final transient DistributionSetManagement distributionSetManagement;
private final DsMetadataPopupLayout dsMetadataPopupLayout;
private Long selectedDistSetId;
/**
* Initialize the layout.
*
* @param i18n
* the i18n service
* @param distributionSetManagement
* the distribution set management service
* @param dsMetadataPopupLayout
* the distribution set metadata popup layout
*/
public DistributionSetMetadataDetailsLayout(final VaadinMessageSource i18n,
final DistributionSetManagement distributionSetManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout) {
super(i18n);
this.distributionSetManagement = distributionSetManagement;
this.dsMetadataPopupLayout = dsMetadataPopupLayout;
}
/**
* Populate software module metadata.
*
* @param distributionSet
*/
public void populateDSMetadata(final DistributionSet distributionSet) {
removeAllItems();
if (null == distributionSet) {
return;
}
selectedDistSetId = distributionSet.getId();
final List<DistributionSetMetadata> dsMetadataList = distributionSetManagement
.findMetaDataByDistributionSetId(new PageRequest(0, MAX_METADATA_QUERY), selectedDistSetId)
.getContent();
if (null != dsMetadataList && !dsMetadataList.isEmpty()) {
dsMetadataList.forEach(this::setMetadataProperties);
}
}
@Override
protected void showMetadataDetails(final String metadataKey) {
distributionSetManagement.get(selectedDistSetId)
.ifPresent(distSet -> UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(distSet, metadataKey)));
}
@Override
protected String getDetailLinkId(final String name) {
return new StringBuilder(UIComponentIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name).toString();
}
}

View File

@@ -1,165 +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.common.detailslayout;
import java.util.List;
import java.util.Optional;
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.SpPermissionChecker;
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.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UINotification;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.data.domain.PageRequest;
import com.vaadin.data.Item;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
/**
* DistributionSet Metadata details layout.
*
*/
public class DistributionSetMetadatadetailsLayout extends Table {
private static final long serialVersionUID = 2913758299611837718L;
private static final String METADATA_KEY = "Key";
private static final String VIEW = "view";
private final transient DistributionSetManagement distributionSetManagement;
private final DsMetadataPopupLayout dsMetadataPopupLayout;
private final SpPermissionChecker permissionChecker;
private final transient EntityFactory entityFactory;
private final VaadinMessageSource i18n;
private Long selectedDistSetId;
private final UINotification notification;
public DistributionSetMetadatadetailsLayout(final VaadinMessageSource i18n,
final SpPermissionChecker permissionChecker, final DistributionSetManagement distributionSetManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout, final EntityFactory entityFactory,
final UINotification notification) {
this.i18n = i18n;
this.permissionChecker = permissionChecker;
this.distributionSetManagement = distributionSetManagement;
this.dsMetadataPopupLayout = dsMetadataPopupLayout;
this.entityFactory = entityFactory;
this.notification = notification;
createDSMetadataTable();
addCustomGeneratedColumns();
}
/**
* Populate software module metadata.
*
* @param distributionSet
*/
public void populateDSMetadata(final DistributionSet distributionSet) {
removeAllItems();
if (null == distributionSet) {
return;
}
selectedDistSetId = distributionSet.getId();
final List<DistributionSetMetadata> dsMetadataList = distributionSetManagement
.findMetaDataByDistributionSetId(new PageRequest(0, 500), selectedDistSetId)
.getContent();
if (null != dsMetadataList && !dsMetadataList.isEmpty()) {
dsMetadataList.forEach(dsMetadata -> setDSMetadataProperties(dsMetadata));
}
}
private void createDSMetadataTable() {
addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES);
addStyleName(ValoTheme.TABLE_NO_STRIPES);
addStyleName(SPUIStyleDefinitions.SW_MODULE_TABLE);
addStyleName("details-layout");
setSelectable(false);
setImmediate(true);
setContainerDataSource(getDistSetContainer());
setColumnHeaderMode(ColumnHeaderMode.EXPLICIT);
addDSMetadataTableHeader();
setSizeFull();
// same as height of other tabs in details tabsheet
setHeight(116, Unit.PIXELS);
}
private IndexedContainer getDistSetContainer() {
final IndexedContainer container = new IndexedContainer();
container.addContainerProperty(METADATA_KEY, String.class, "");
setColumnExpandRatio(METADATA_KEY, 0.7F);
setColumnAlignment(METADATA_KEY, Align.LEFT);
if (permissionChecker.hasUpdateDistributionPermission()) {
container.addContainerProperty(VIEW, Label.class, "");
setColumnExpandRatio(VIEW, 0.2F);
setColumnAlignment(VIEW, Align.RIGHT);
}
return container;
}
private void addDSMetadataTableHeader() {
setColumnHeader(METADATA_KEY, i18n.getMessage("header.key"));
}
private void setDSMetadataProperties(final DistributionSetMetadata dsMetadata) {
final Item item = getContainerDataSource().addItem(dsMetadata.getKey());
item.getItemProperty(METADATA_KEY).setValue(dsMetadata.getKey());
}
private void addCustomGeneratedColumns() {
addGeneratedColumn(METADATA_KEY, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId));
}
private Button customMetadataDetailButton(final String metadataKey) {
final Button viewIcon = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), metadataKey,
"View " + metadataKey + " Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class);
viewIcon.setData(metadataKey);
viewIcon.addStyleName(ValoTheme.BUTTON_TINY + " " + ValoTheme.BUTTON_LINK + " " + "on-focus-no-border link"
+ " " + "text-style");
viewIcon.addClickListener(event -> showMetadataDetails(selectedDistSetId, metadataKey));
return viewIcon;
}
private static String getDetailLinkId(final String name) {
return new StringBuilder(UIComponentIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name).toString();
}
private void showMetadataDetails(final Long selectedDistSetId, final String metadataKey) {
final Optional<DistributionSet> distSet = distributionSetManagement.get(selectedDistSetId);
if (!distSet.isPresent()) {
notification.displayWarning(i18n.getMessage("distributionset.not.exists"));
return;
}
/* display the window */
UI.getCurrent().addWindow(
dsMetadataPopupLayout.getWindow(distSet.get(), entityFactory.generateMetadata(metadataKey, "")));
}
}

View File

@@ -145,7 +145,7 @@ public class SoftwareModuleDetailsTable extends Table {
public void populateModule(final DistributionSet distributionSet) {
removeAllItems();
if (distributionSet != null) {
if (isUnassignSoftModAllowed && permissionChecker.hasUpdateDistributionPermission()) {
if (isUnassignSoftModAllowed && permissionChecker.hasUpdateRepositoryPermission()) {
try {
isTargetAssigned = false;
} catch (final EntityReadOnlyException exception) {
@@ -229,7 +229,7 @@ public class SoftwareModuleDetailsTable extends Table {
softwareModule.setId(sw.getName() + "-label");
horizontalLayout.addComponent(softwareModule);
horizontalLayout.setExpandRatio(softwareModule, 1F);
if (isUnassignSoftModAllowed && permissionChecker.hasUpdateDistributionPermission() && !isTargetAssigned
if (isUnassignSoftModAllowed && permissionChecker.hasUpdateRepositoryPermission() && !isTargetAssigned
&& (isSoftModAvaiableForSoftType(alreadyAssignedSwModules, swModType))) {
horizontalLayout.addComponent(reassignSoftModule);
}

View File

@@ -0,0 +1,85 @@
/**
* 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.common.detailslayout;
import java.util.List;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
import org.eclipse.hawkbit.ui.distributions.smtable.SwMetadataPopupLayout;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.data.domain.PageRequest;
import org.springframework.util.CollectionUtils;
import com.vaadin.ui.UI;
/**
* SoftwareModule Metadata details layout.
*
*/
public class SoftwareModuleMetadataDetailsLayout extends AbstractMetadataDetailsLayout {
private static final long serialVersionUID = 1L;
private transient SoftwareModuleManagement softwareModuleManagement;
private final SwMetadataPopupLayout swMetadataPopupLayout;
private Long selectedSWModuleId;
/**
* Initialize the layout.
*
* @param i18n
* the i18n service
* @param softwareManagement
* the software management service
* @param swMetadataPopupLayout
* the software module metadata popup layout
*/
public SoftwareModuleMetadataDetailsLayout(final VaadinMessageSource i18n,
final SoftwareModuleManagement softwareManagement, final SwMetadataPopupLayout swMetadataPopupLayout) {
super(i18n);
this.softwareModuleManagement = softwareManagement;
this.swMetadataPopupLayout = swMetadataPopupLayout;
}
/**
* Populate software module metadata table.
*
* @param swModule
*/
public void populateSMMetadata(final SoftwareModule swModule) {
removeAllItems();
if (null == swModule) {
return;
}
selectedSWModuleId = swModule.getId();
final List<SoftwareModuleMetadata> swMetadataList = softwareModuleManagement
.findMetaDataBySoftwareModuleId(new PageRequest(0, MAX_METADATA_QUERY), selectedSWModuleId)
.getContent();
if (!CollectionUtils.isEmpty(swMetadataList)) {
swMetadataList.forEach(this::setMetadataProperties);
}
}
@Override
protected void showMetadataDetails(final String metadataKey) {
softwareModuleManagement.get(selectedSWModuleId).ifPresent(
swmodule -> UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule, metadataKey)));
}
@Override
protected String getDetailLinkId(final String name) {
return new StringBuilder(UIComponentIdProvider.SW_METADATA_DETAIL_LINK).append('.').append(name).toString();
}
}

View File

@@ -1,185 +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.common.detailslayout;
import java.util.List;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder;
import org.eclipse.hawkbit.ui.distributions.smtable.SwMetadataPopupLayout;
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.data.domain.PageRequest;
import org.springframework.util.CollectionUtils;
import com.vaadin.data.Item;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.UIScope;
import com.vaadin.ui.Button;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
/**
* SoftwareModule Metadata details layout.
*
*/
@SpringComponent
@UIScope
public class SoftwareModuleMetadatadetailslayout extends Table {
private static final long serialVersionUID = 2913758299611838818L;
private static final String METADATA_KEY = "Key";
private static final int MAX_METADATA_QUERY = 500;
private SpPermissionChecker permissionChecker;
private transient SoftwareModuleManagement softwareModuleManagement;
private SwMetadataPopupLayout swMetadataPopupLayout;
private VaadinMessageSource i18n;
private Long selectedSWModuleId;
private transient EntityFactory entityFactory;
/**
* Initialize the layout.
*
* @param i18n
* the i18n service
* @param permissionChecker
* the permission checker service
* @param softwareManagement
* the software management service
* @param swMetadataPopupLayout
* the software module metadata popup layout
* @param entityFactory
* the entity factory service
*/
public void init(final VaadinMessageSource i18n, final SpPermissionChecker permissionChecker,
final SoftwareModuleManagement softwareManagement, final SwMetadataPopupLayout swMetadataPopupLayout,
final EntityFactory entityFactory) {
this.i18n = i18n;
this.permissionChecker = permissionChecker;
this.softwareModuleManagement = softwareManagement;
this.swMetadataPopupLayout = swMetadataPopupLayout;
this.entityFactory = entityFactory;
createSWMMetadataTable();
addCustomGeneratedColumns();
}
/**
* Populate software module metadata table.
*
* @param swModule
*/
public void populateSMMetadata(final SoftwareModule swModule) {
removeAllItems();
if (null == swModule) {
return;
}
selectedSWModuleId = swModule.getId();
final List<SoftwareModuleMetadata> swMetadataList = softwareModuleManagement
.findMetaDataBySoftwareModuleId(new PageRequest(0, MAX_METADATA_QUERY),
selectedSWModuleId)
.getContent();
if (!CollectionUtils.isEmpty(swMetadataList)) {
swMetadataList.forEach(this::setSWMetadataProperties);
}
}
/**
* Create metadata.
*
* @param metadataKeyName
*/
public void createMetadata(final String metadataKeyName) {
final IndexedContainer metadataContainer = (IndexedContainer) getContainerDataSource();
final Item item = metadataContainer.addItem(metadataKeyName);
item.getItemProperty(METADATA_KEY).setValue(metadataKeyName);
}
/**
* Delete metadata.
*
* @param metadataKeyName
*/
public void deleteMetadata(final String metadataKeyName) {
final IndexedContainer metadataContainer = (IndexedContainer) getContainerDataSource();
metadataContainer.removeItem(metadataKeyName);
}
private void createSWMMetadataTable() {
addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES);
addStyleName(ValoTheme.TABLE_NO_STRIPES);
addStyleName(SPUIStyleDefinitions.SW_MODULE_TABLE);
setSelectable(false);
setImmediate(true);
setContainerDataSource(getSwModuleMetadataContainer());
setColumnHeaderMode(ColumnHeaderMode.EXPLICIT);
addSMMetadataTableHeader();
setSizeFull();
// same as height of other tabs in details tabsheet
setHeight(116, Unit.PIXELS);
}
private IndexedContainer getSwModuleMetadataContainer() {
final IndexedContainer container = new IndexedContainer();
container.addContainerProperty(METADATA_KEY, String.class, "");
setColumnAlignment(METADATA_KEY, Align.LEFT);
return container;
}
private void addSMMetadataTableHeader() {
setColumnHeader(METADATA_KEY, i18n.getMessage("header.key"));
}
private void setSWMetadataProperties(final SoftwareModuleMetadata swMetadata) {
final Item item = getContainerDataSource().addItem(swMetadata.getKey());
item.getItemProperty(METADATA_KEY).setValue(swMetadata.getKey());
}
private void addCustomGeneratedColumns() {
addGeneratedColumn(METADATA_KEY, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId));
}
private Button customMetadataDetailButton(final String metadataKey) {
final Button viewLink = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), metadataKey,
"View" + metadataKey + " Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class);
viewLink.setData(metadataKey);
if (permissionChecker.hasUpdateDistributionPermission()) {
viewLink.addStyleName(ValoTheme.BUTTON_TINY + " " + ValoTheme.BUTTON_LINK + " " + "on-focus-no-border link"
+ " " + "text-style");
viewLink.addClickListener(event -> showMetadataDetails(selectedSWModuleId, metadataKey));
}
return viewLink;
}
private static String getDetailLinkId(final String name) {
return new StringBuilder(UIComponentIdProvider.SW_METADATA_DETAIL_LINK).append('.').append(name).toString();
}
private void showMetadataDetails(final Long selectedSWModuleId, final String metadataKey) {
softwareModuleManagement.get(selectedSWModuleId).ifPresent(swmodule -> UI.getCurrent()
.addWindow(swMetadataPopupLayout.getWindow(swmodule, entityFactory.generateMetadata(metadataKey, ""))));
}
}

View File

@@ -61,7 +61,7 @@ public abstract class AbstractDistributionSetTableHeader extends AbstractTableHe
@Override
protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission();
return permChecker.hasCreateRepositoryPermission();
}
@Override

View File

@@ -86,7 +86,7 @@ public abstract class AbstractSoftwareModuleTableHeader extends AbstractTableHea
@Override
protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission();
return permChecker.hasCreateRepositoryPermission();
}
@Override

View File

@@ -101,7 +101,7 @@ public class DistributionTagToken extends AbstractTagToken<DistributionSet> {
@Override
protected Boolean isToggleTagAssignmentAllowed() {
return checker.hasUpdateDistributionPermission();
return checker.hasUpdateRepositoryPermission();
}
@Override

View File

@@ -172,8 +172,8 @@ public class DistributionsView extends AbstractNotificationView implements Brows
}
private boolean hasUserPermission() {
return permChecker.hasUpdateDistributionPermission() || permChecker.hasCreateDistributionPermission()
|| permChecker.hasReadDistributionPermission();
return permChecker.hasUpdateRepositoryPermission() || permChecker.hasCreateRepositoryPermission()
|| permChecker.hasReadRepositoryPermission();
}
private void createMainLayout() {

View File

@@ -54,7 +54,7 @@ public class DSTypeFilterHeader extends AbstractFilterHeader {
@Override
protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
return permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission();
}
@Override

View File

@@ -14,7 +14,6 @@ import java.util.Set;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
@@ -71,13 +70,12 @@ public class DistributionSetDetails extends AbstractDistributionSetDetails {
final DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout,
final SoftwareModuleManagement softwareManagement,
final DistributionSetManagement distributionSetManagement, final TargetManagement targetManagement,
final EntityFactory entityFactory, final UINotification uiNotification,
final DistributionSetTagManagement distributionSetTagManagement,
final UINotification uiNotification, final DistributionSetTagManagement distributionSetTagManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout) {
super(i18n, eventBus, permissionChecker, managementUIState, distributionAddUpdateWindowLayout,
distributionSetManagement, dsMetadataPopupLayout, entityFactory, uiNotification,
distributionSetTagManagement, createSoftwareModuleDetailsTable(i18n, permissionChecker,
distributionSetManagement, eventBus, manageDistUIState, uiNotification));
distributionSetManagement, dsMetadataPopupLayout, uiNotification, distributionSetTagManagement,
createSoftwareModuleDetailsTable(i18n, permissionChecker, distributionSetManagement, eventBus,
manageDistUIState, uiNotification));
this.manageDistUIState = manageDistUIState;
this.softwareModuleManagement = softwareManagement;
this.targetManagement = targetManagement;
@@ -127,8 +125,7 @@ public class DistributionSetDetails extends AbstractDistributionSetDetails {
assignedSWModule = new HashMap<>();
}
softwareModuleIdNameList.stream().map(SoftwareModuleIdName::getId)
.map(softwareModuleManagement::get)
softwareModuleIdNameList.stream().map(SoftwareModuleIdName::getId).map(softwareModuleManagement::get)
.forEach(found -> found.ifPresent(softwareModule -> {
if (assignedSWModule.containsKey(softwareModule.getType().getName())) {
@@ -157,7 +154,7 @@ public class DistributionSetDetails extends AbstractDistributionSetDetails {
}
private Button assignSoftModuleButton(final String softwareModuleName) {
if (getPermissionChecker().hasUpdateDistributionPermission() && manageDistUIState.getLastSelectedDistribution()
if (getPermissionChecker().hasUpdateRepositoryPermission() && manageDistUIState.getLastSelectedDistribution()
.map(selected -> targetManagement.countByAssignedDistributionSet(selected) <= 0).orElse(false)) {
final Button reassignSoftModule = SPUIComponentProvider.getButton(softwareModuleName, "", "", "", true,
@@ -255,11 +252,10 @@ public class DistributionSetDetails extends AbstractDistributionSetDetails {
assignedSWModule.clear();
}
getDistributionSetManagement().getWithDetails(getSelectedBaseEntityId())
.ifPresent(set -> {
setSelectedBaseEntity(set);
UI.getCurrent().access(this::populateModule);
});
getDistributionSetManagement().getWithDetails(getSelectedBaseEntityId()).ifPresent(set -> {
setSelectedBaseEntity(set);
UI.getCurrent().access(this::populateModule);
});
}
}

View File

@@ -385,7 +385,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
@Override
protected boolean hasDropPermission() {
return permissionChecker.hasUpdateDistributionPermission();
return permissionChecker.hasUpdateRepositoryPermission();
}
private void addTableStyleGenerator() {

View File

@@ -60,7 +60,7 @@ public class DistributionSetTableLayout extends AbstractTableLayout<Distribution
distributionSetTable,
new DistributionSetDetails(i18n, eventBus, permissionChecker, manageDistUIState, null,
distributionAddUpdateWindowLayout, softwareManagement, distributionSetManagement,
targetManagement, entityFactory, uiNotification, distributionSetTagManagement, popupLayout));
targetManagement, uiNotification, distributionSetTagManagement, popupLayout));
}
public DistributionSetTable getDistributionSetTable() {

View File

@@ -51,8 +51,8 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout<Distribut
@Override
protected DistributionSetMetadata createMetadata(final DistributionSet entity, final String key,
final String value) {
final DistributionSetMetadata dsMetaData = distributionSetManagement.createMetaData(
entity.getId(), Arrays.asList(entityFactory.generateMetadata(key, value))).get(0);
final DistributionSetMetadata dsMetaData = distributionSetManagement
.createMetaData(entity.getId(), Arrays.asList(entityFactory.generateMetadata(key, value))).get(0);
setSelectedEntity(dsMetaData.getDistributionSet());
return dsMetaData;
}
@@ -60,8 +60,8 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout<Distribut
@Override
protected DistributionSetMetadata updateMetadata(final DistributionSet entity, final String key,
final String value) {
final DistributionSetMetadata dsMetaData = distributionSetManagement
.updateMetaData(entity.getId(), entityFactory.generateMetadata(key, value));
final DistributionSetMetadata dsMetaData = distributionSetManagement.updateMetaData(entity.getId(),
entityFactory.generateMetadata(key, value));
setSelectedEntity(dsMetaData.getDistributionSet());
return dsMetaData;
}
@@ -69,22 +69,21 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout<Distribut
@Override
protected List<MetaData> getMetadataList() {
return Collections.unmodifiableList(distributionSetManagement
.findMetaDataByDistributionSetId(new PageRequest(0, 500), getSelectedEntity().getId())
.getContent());
.findMetaDataByDistributionSetId(new PageRequest(0, 500), getSelectedEntity().getId()).getContent());
}
@Override
protected void deleteMetadata(final DistributionSet entity, final String key, final String value) {
protected void deleteMetadata(final DistributionSet entity, final String key) {
distributionSetManagement.deleteMetaData(entity.getId(), key);
}
@Override
protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission();
return permChecker.hasCreateRepositoryPermission();
}
@Override
protected boolean hasUpdatePermission() {
return permChecker.hasUpdateDistributionPermission();
return permChecker.hasUpdateRepositoryPermission();
}
}

View File

@@ -1,49 +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;
import org.eclipse.hawkbit.repository.model.MetaData;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
/**
*
* Metadata Events.
*
*/
public class MetadataEvent {
public enum MetadataUIEvent {
DELETE_SOFTWARE_MODULE_METADATA, CREATE_SOFTWARE_MODULE_METADATA;
}
private final MetadataUIEvent metadataUIEvent;
private final MetaData metadata;
private final SoftwareModule module;
public MetadataEvent(final MetadataUIEvent metadataUIEvent, final MetaData metadata, final SoftwareModule module) {
this.metadataUIEvent = metadataUIEvent;
this.metadata = metadata;
this.module = module;
}
public MetadataUIEvent getMetadataUIEvent() {
return metadataUIEvent;
}
public MetaData getMetaData() {
return metadata;
}
public SoftwareModule getModule() {
return module;
}
}

View File

@@ -100,14 +100,14 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout {
@Override
protected boolean hasDeletePermission() {
return permChecker.hasDeleteDistributionPermission();
return permChecker.hasDeleteRepositoryPermission();
}
@Override
protected boolean hasUpdatePermission() {
return permChecker.hasUpdateDistributionPermission();
return permChecker.hasUpdateRepositoryPermission();
}
@Override

View File

@@ -13,28 +13,35 @@ import java.util.List;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.model.MetaData;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.common.AbstractMetadataPopupLayout;
import org.eclipse.hawkbit.ui.distributions.event.MetadataEvent;
import org.eclipse.hawkbit.ui.distributions.event.MetadataEvent.MetadataUIEvent;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UINotification;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.data.domain.PageRequest;
import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Grid;
import com.vaadin.ui.VerticalLayout;
/**
* Pop up layout to display software module metadata.
*/
public class SwMetadataPopupLayout extends AbstractMetadataPopupLayout<SoftwareModule, MetaData> {
public class SwMetadataPopupLayout extends AbstractMetadataPopupLayout<SoftwareModule, SoftwareModuleMetadata> {
private static final long serialVersionUID = -1252090014161012563L;
private static final long serialVersionUID = 1L;
protected static final String TARGET_VISIBLE = "targetVisible";
private final transient SoftwareModuleManagement softwareModuleManagement;
private final transient EntityFactory entityFactory;
private CheckBox targetVisibleField;
public SwMetadataPopupLayout(final VaadinMessageSource i18n, final UINotification uiNotification,
final UIEventBus eventBus, final SoftwareModuleManagement softwareManagement,
@@ -49,52 +56,135 @@ public class SwMetadataPopupLayout extends AbstractMetadataPopupLayout<SoftwareM
return softwareModuleManagement.getMetaDataBySoftwareModuleId(entity.getId(), value).isPresent();
}
/**
* Create metadata for SWModule.
*/
@Override
protected SoftwareModuleMetadata createMetadata(final SoftwareModule entity, final String key, final String value) {
final SoftwareModuleMetadata swMetadata = softwareModuleManagement.createMetaData(entity.getId(),
entityFactory.generateMetadata(key, value));
final SoftwareModuleMetadata swMetadata = softwareModuleManagement
.createMetaData(entityFactory.softwareModuleMetadata().create(entity.getId()).key(key).value(value)
.targetVisible(targetVisibleField.getValue()));
setSelectedEntity(swMetadata.getSoftwareModule());
eventBus.publish(this, new MetadataEvent(MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA, swMetadata, entity));
return swMetadata;
}
/**
* Update metadata for SWModule.
*/
@Override
protected SoftwareModuleMetadata updateMetadata(final SoftwareModule entity, final String key, final String value) {
final SoftwareModuleMetadata swMetadata = softwareModuleManagement.updateMetaData(entity.getId(),
entityFactory.generateMetadata(key, value));
final SoftwareModuleMetadata swMetadata = softwareModuleManagement
.updateMetaData(entityFactory.softwareModuleMetadata().update(entity.getId(), key).value(value)
.targetVisible(targetVisibleField.getValue()));
setSelectedEntity(swMetadata.getSoftwareModule());
return swMetadata;
}
@Override
protected List<MetaData> getMetadataList() {
protected List<SoftwareModuleMetadata> getMetadataList() {
return Collections.unmodifiableList(softwareModuleManagement
.findMetaDataBySoftwareModuleId(new PageRequest(0, MAX_METADATA_QUERY), getSelectedEntity().getId()).getContent());
.findMetaDataBySoftwareModuleId(new PageRequest(0, MAX_METADATA_QUERY), getSelectedEntity().getId())
.getContent());
}
/**
* delete metadata for SWModule.
*/
@Override
protected void deleteMetadata(final SoftwareModule entity, final String key, final String value) {
protected Grid createMetadataGrid() {
final Grid metadataGrid = super.createMetadataGrid();
metadataGrid.getContainerDataSource().addContainerProperty(TARGET_VISIBLE, Boolean.class, Boolean.FALSE);
metadataGrid.getColumn(TARGET_VISIBLE).setHeaderCaption(i18n.getMessage("metadata.targetvisible"));
metadataGrid.getColumn(TARGET_VISIBLE).setHidden(true);
return metadataGrid;
}
@Override
protected void deleteMetadata(final SoftwareModule entity, final String key) {
softwareModuleManagement.deleteMetaData(entity.getId(), key);
eventBus.publish(this, new MetadataEvent(MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA,
entityFactory.generateMetadata(key, value), entity));
}
@Override
protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission();
return permChecker.hasCreateRepositoryPermission();
}
@Override
protected boolean hasUpdatePermission() {
return permChecker.hasUpdateDistributionPermission();
return permChecker.hasUpdateRepositoryPermission();
}
private CheckBox createTargetVisibleField() {
final CheckBox checkBox = new CheckBox();
checkBox.setId(UIComponentIdProvider.METADATA_TARGET_VISIBLE_ID);
checkBox.setCaption(i18n.getMessage("metadata.targetvisible"));
checkBox.addValueChangeListener(this::onCheckBoxChange);
return checkBox;
}
// Exception for squid:S1172 - parameter defined by Vaadin
@SuppressWarnings("squid:S1172")
private void onCheckBoxChange(final ValueChangeEvent event) {
if (hasCreatePermission() || hasUpdatePermission()) {
if (!getValueTextArea().getValue().isEmpty() && !getKeyTextField().getValue().isEmpty()) {
getMetadataWindow().setSaveButtonEnabled(true);
} else {
getMetadataWindow().setSaveButtonEnabled(false);
}
}
}
@Override
protected void createComponents() {
super.createComponents();
targetVisibleField = createTargetVisibleField();
}
@Override
protected VerticalLayout createMetadataFieldsLayout() {
final VerticalLayout metadataFieldsLayout = super.createMetadataFieldsLayout();
metadataFieldsLayout.addComponent(targetVisibleField);
return metadataFieldsLayout;
}
@Override
protected Item popualateKeyValue(final Object metadataCompositeKey) {
final Item item = super.popualateKeyValue(metadataCompositeKey);
if (item != null) {
targetVisibleField.setValue((Boolean) item.getItemProperty(TARGET_VISIBLE).getValue());
if (hasUpdatePermission()) {
targetVisibleField.setEnabled(true);
}
}
return item;
}
@Override
protected Item updateItemInGrid(final String key) {
final Item item = super.updateItemInGrid(key);
item.getItemProperty(TARGET_VISIBLE).setValue(targetVisibleField.getValue());
return item;
}
@Override
protected Item addItemToGrid(final SoftwareModuleMetadata metaData) {
final Item item = super.addItemToGrid(metaData);
item.getItemProperty(TARGET_VISIBLE).setValue(metaData.isTargetVisible());
return item;
}
@Override
protected void enableEditing() {
super.enableEditing();
targetVisibleField.setEnabled(true);
}
@Override
protected void clearFields() {
super.clearFields();
targetVisibleField.clear();
}
@Override
protected void disableEditing() {
super.disableEditing();
targetVisibleField.setEnabled(false);
}
}

View File

@@ -8,7 +8,6 @@
*/
package org.eclipse.hawkbit.ui.distributions.smtable;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
@@ -33,8 +32,8 @@ public class SwModuleDetails extends AbstractSoftwareModuleDetails {
final SpPermissionChecker permissionChecker,
final SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow,
final ManageDistUIState manageDistUIState, final SoftwareModuleManagement softwareManagement,
final SwMetadataPopupLayout swMetadataPopupLayout, final EntityFactory entityFactory) {
super(i18n, eventBus, permissionChecker, null, softwareManagement, swMetadataPopupLayout, entityFactory,
final SwMetadataPopupLayout swMetadataPopupLayout) {
super(i18n, eventBus, permissionChecker, null, softwareManagement, swMetadataPopupLayout,
softwareModuleAddUpdateWindow);
this.manageDistUIState = manageDistUIState;
restoreState();

View File

@@ -41,8 +41,9 @@ public class SwModuleTableLayout extends AbstractTableLayout<SwModuleTable> {
final SwMetadataPopupLayout swMetadataPopupLayout = new SwMetadataPopupLayout(i18n, uiNotification, eventBus,
softwareModuleManagement, entityFactory, permChecker);
this.swModuleTable = new SwModuleTable(eventBus, i18n, uiNotification, manageDistUIState, softwareModuleManagement,
distributionsViewClientCriterion, artifactManagement, swMetadataPopupLayout, artifactUploadState);
this.swModuleTable = new SwModuleTable(eventBus, i18n, uiNotification, manageDistUIState,
softwareModuleManagement, distributionsViewClientCriterion, artifactManagement, swMetadataPopupLayout,
artifactUploadState);
final SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow = new SoftwareModuleAddUpdateWindow(i18n,
uiNotification, eventBus, softwareModuleManagement, softwareModuleTypeManagement, entityFactory,
@@ -50,7 +51,7 @@ public class SwModuleTableLayout extends AbstractTableLayout<SwModuleTable> {
super.init(
new SwModuleTableHeader(i18n, permChecker, eventBus, manageDistUIState, softwareModuleAddUpdateWindow),
swModuleTable, new SwModuleDetails(i18n, eventBus, permChecker, softwareModuleAddUpdateWindow,
manageDistUIState, softwareModuleManagement, swMetadataPopupLayout, entityFactory));
manageDistUIState, softwareModuleManagement, swMetadataPopupLayout));
}
public SwModuleTable getSwModuleTable() {

View File

@@ -55,7 +55,7 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader {
@Override
protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
return permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission();
}
@Override

View File

@@ -78,7 +78,7 @@ public abstract class CreateUpdateTypeLayout<E extends NamedEntity> extends Abst
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE);
createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission());
createOptionGroup(permChecker.hasCreateRepositoryPermission(), permChecker.hasUpdateRepositoryPermission());
}
@Override
@@ -128,8 +128,8 @@ public abstract class CreateUpdateTypeLayout<E extends NamedEntity> extends Abst
super.reset();
typeKey.clear();
restoreComponentStyles();
setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(),
permChecker.hasUpdateDistributionPermission());
setOptionGroupDefaultValue(permChecker.hasCreateRepositoryPermission(),
permChecker.hasUpdateRepositoryPermission());
}
/**

View File

@@ -232,7 +232,7 @@ public class DeploymentView extends AbstractNotificationView implements BrowserW
private void buildLayout() {
// Build only if user has both permissions
if (permChecker.hasTargetReadPermission() || permChecker.hasReadDistributionPermission()) {
if (permChecker.hasTargetReadPermission() || permChecker.hasReadRepositoryPermission()) {
setSizeFull();
createMainLayout();
addComponents(mainLayout);
@@ -250,9 +250,9 @@ public class DeploymentView extends AbstractNotificationView implements BrowserW
private void layoutWidgets() {
mainLayout.removeAllComponents();
if (permChecker.hasReadDistributionPermission() && permChecker.hasTargetReadPermission()) {
if (permChecker.hasReadRepositoryPermission() && permChecker.hasTargetReadPermission()) {
displayAllWidgets();
} else if (permChecker.hasReadDistributionPermission()) {
} else if (permChecker.hasReadRepositoryPermission()) {
displayDistributionWidgetsOnly();
} else if (permChecker.hasTargetReadPermission()) {
displayTargetWidgetsOnly();
@@ -292,7 +292,7 @@ public class DeploymentView extends AbstractNotificationView implements BrowserW
private Boolean showFooterLayout() {
if (permChecker.hasTargetReadPermission()
|| (permChecker.hasDeleteDistributionPermission() || permChecker.hasDeleteTargetPermission())
|| (permChecker.hasDeleteRepositoryPermission() || permChecker.hasDeleteTargetPermission())
|| hasDeploymentPermission()) {
return true;
}
@@ -300,7 +300,7 @@ public class DeploymentView extends AbstractNotificationView implements BrowserW
}
private boolean hasDeploymentPermission() {
return permChecker.hasReadDistributionPermission() && permChecker.hasUpdateTargetPermission();
return permChecker.hasReadRepositoryPermission() && permChecker.hasUpdateTargetPermission();
}
private void displayTargetWidgetsOnly() {
@@ -318,7 +318,7 @@ public class DeploymentView extends AbstractNotificationView implements BrowserW
}
private void maximizeTargetTable() {
if (permChecker.hasReadDistributionPermission()) {
if (permChecker.hasReadRepositoryPermission()) {
mainLayout.removeComponent(distributionTableLayout);
mainLayout.removeComponent(distributionTagLayout);
}

View File

@@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.management.dstable;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.common.detailslayout.AbstractDistributionSetDetails;
import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable;
@@ -30,12 +29,11 @@ public class DistributionDetails extends AbstractDistributionSetDetails {
DistributionDetails(final VaadinMessageSource i18n, final UIEventBus eventBus,
final SpPermissionChecker permissionChecker, final ManagementUIState managementUIState,
final DistributionSetManagement distributionSetManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout, final EntityFactory entityFactory,
final UINotification uiNotification, final DistributionSetTagManagement distributionSetTagManagement,
final DsMetadataPopupLayout dsMetadataPopupLayout, final UINotification uiNotification,
final DistributionSetTagManagement distributionSetTagManagement,
final DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout) {
super(i18n, eventBus, permissionChecker, managementUIState, distributionAddUpdateWindowLayout,
distributionSetManagement, dsMetadataPopupLayout, entityFactory, uiNotification,
distributionSetTagManagement,
distributionSetManagement, dsMetadataPopupLayout, uiNotification, distributionSetTagManagement,
createSoftwareModuleDetailsTable(i18n, permissionChecker, uiNotification));
restoreState();
}

View File

@@ -56,7 +56,7 @@ public class DistributionTableLayout extends AbstractTableLayout<DistributionTab
super.init(new DistributionTableHeader(i18n, permissionChecker, eventBus, managementUIState), distributionTable,
new DistributionDetails(i18n, eventBus, permissionChecker, managementUIState, distributionSetManagement,
dsMetadataPopupLayout, entityFactory, notification, distributionSetTagManagement,
dsMetadataPopupLayout, notification, distributionSetTagManagement,
distributionAddUpdateWindowLayout));
}

View File

@@ -191,15 +191,15 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
@Override
protected void createRequiredComponents() {
super.createRequiredComponents();
createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission());
createOptionGroup(permChecker.hasCreateRepositoryPermission(), permChecker.hasUpdateRepositoryPermission());
}
@Override
protected void reset() {
super.reset();
setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(),
permChecker.hasUpdateDistributionPermission());
setOptionGroupDefaultValue(permChecker.hasCreateRepositoryPermission(),
permChecker.hasUpdateRepositoryPermission());
}
@Override

View File

@@ -55,7 +55,7 @@ public class DistributionTagHeader extends AbstractFilterHeader implements Refre
@Override
protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
return permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission();
}
@Override

View File

@@ -109,7 +109,7 @@ public class DistributionTagDropEvent implements DropHandler {
}
private boolean checkForDSUpdatePermission() {
if (!permChecker.hasUpdateDistributionPermission()) {
if (!permChecker.hasUpdateRepositoryPermission()) {
notification.displayValidationError(i18n.getMessage("message.permission.insufficient"));
return false;

View File

@@ -150,12 +150,12 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
@Override
protected boolean hasDeletePermission() {
return permChecker.hasDeleteDistributionPermission() || permChecker.hasDeleteTargetPermission();
return permChecker.hasDeleteRepositoryPermission() || permChecker.hasDeleteTargetPermission();
}
@Override
protected boolean hasUpdatePermission() {
return permChecker.hasUpdateTargetPermission() && permChecker.hasReadDistributionPermission();
return permChecker.hasUpdateTargetPermission() && permChecker.hasReadRepositoryPermission();
}
@Override
@@ -386,7 +386,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
}
private Boolean canDSBeDeleted() {
if (!permChecker.hasDeleteDistributionPermission()) {
if (!permChecker.hasDeleteRepositoryPermission()) {
notification.displayValidationError(i18n.getMessage("message.permission.insufficient"));
return false;
}

View File

@@ -244,11 +244,11 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy, Applicati
*/
@Override
public void onApplicationEvent(final ApplicationEvent applicationEvent) {
if (!(applicationEvent instanceof org.eclipse.hawkbit.repository.event.TenantAwareEvent)) {
if (!(applicationEvent instanceof TenantAwareEvent)) {
return;
}
final org.eclipse.hawkbit.repository.event.TenantAwareEvent event = (TenantAwareEvent) applicationEvent;
final TenantAwareEvent event = (TenantAwareEvent) applicationEvent;
collectRolloutEvent(event);
// to dispatch too many events which are not interested on the UI
@@ -259,14 +259,14 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy, Applicati
offerEvent(event);
}
private void offerEventIfNotContains(final org.eclipse.hawkbit.repository.event.TenantAwareEvent event) {
private void offerEventIfNotContains(final TenantAwareEvent event) {
if (queue.contains(event)) {
return;
}
offerEvent(event);
}
private void offerEvent(final org.eclipse.hawkbit.repository.event.TenantAwareEvent event) {
private void offerEvent(final TenantAwareEvent event) {
if (!queue.offer(event)) {
LOG.trace("Deque limit is reached, cannot add more events!!! Dropped event is {}", event);
}

View File

@@ -52,7 +52,7 @@ public class DefaultDistributionSetTypeLayout extends BaseConfigurationView {
combobox = SPUIComponentProvider.getComboBox(null, "330", null, null, false, "", "label.combobox.tag");
changeIcon = new Label();
if (!permChecker.hasReadDistributionPermission()) {
if (!permChecker.hasReadRepositoryPermission()) {
return;
}

View File

@@ -948,6 +948,11 @@ public final class UIComponentIdProvider {
*/
public static final String METADATA_VALUE_ID = "metadata.value.id";
/**
* Metadata target visible checkbox id.
*/
public static final String METADATA_TARGET_VISIBLE_ID = "metadata.targetvisible.id";
/**
* Metadata add icon id.
*/

View File

@@ -493,6 +493,7 @@ header.target.tags = Tags
header.total.targets = Targets
header.key = Key
header.value = Value
metadata.targetvisible = Visible for targets
header.auto.assignment.ds = Auto assignment
header.target.filter.name = Target filter name
header.target.filter.query = Target filter query