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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
|
||||
|
||||
@Override
|
||||
protected boolean hasDeletePermission() {
|
||||
return permChecker.hasDeleteDistributionPermission();
|
||||
return permChecker.hasDeleteRepositoryPermission();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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, "")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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, ""))));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -61,7 +61,7 @@ public abstract class AbstractDistributionSetTableHeader extends AbstractTableHe
|
||||
|
||||
@Override
|
||||
protected boolean hasCreatePermission() {
|
||||
return permChecker.hasCreateDistributionPermission();
|
||||
return permChecker.hasCreateRepositoryPermission();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -86,7 +86,7 @@ public abstract class AbstractSoftwareModuleTableHeader extends AbstractTableHea
|
||||
|
||||
@Override
|
||||
protected boolean hasCreatePermission() {
|
||||
return permChecker.hasCreateDistributionPermission();
|
||||
return permChecker.hasCreateRepositoryPermission();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -101,7 +101,7 @@ public class DistributionTagToken extends AbstractTagToken<DistributionSet> {
|
||||
|
||||
@Override
|
||||
protected Boolean isToggleTagAssignmentAllowed() {
|
||||
return checker.hasUpdateDistributionPermission();
|
||||
return checker.hasUpdateRepositoryPermission();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -54,7 +54,7 @@ public class DSTypeFilterHeader extends AbstractFilterHeader {
|
||||
|
||||
@Override
|
||||
protected boolean hasCreateUpdatePermission() {
|
||||
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
|
||||
return permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -385,7 +385,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
|
||||
|
||||
@Override
|
||||
protected boolean hasDropPermission() {
|
||||
return permissionChecker.hasUpdateDistributionPermission();
|
||||
return permissionChecker.hasUpdateRepositoryPermission();
|
||||
}
|
||||
|
||||
private void addTableStyleGenerator() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -55,7 +55,7 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader {
|
||||
|
||||
@Override
|
||||
protected boolean hasCreateUpdatePermission() {
|
||||
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
|
||||
return permChecker.hasCreateRepositoryPermission() || permChecker.hasUpdateRepositoryPermission();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user