diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/MgmtUiConfiguration.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/MgmtUiConfiguration.java index ab4abbc6e..631572ea0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/MgmtUiConfiguration.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/MgmtUiConfiguration.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.ui.common.data.suppliers.TargetManagementStateDataSup import org.eclipse.hawkbit.ui.error.HawkbitUIErrorHandler; import org.eclipse.hawkbit.ui.error.extractors.ConstraintViolationErrorExtractor; import org.eclipse.hawkbit.ui.error.extractors.EntityNotFoundErrorExtractor; +import org.eclipse.hawkbit.ui.error.extractors.InsufficientPermissionErrorExtractor; import org.eclipse.hawkbit.ui.error.extractors.InvalidDistributionSetErrorExtractor; import org.eclipse.hawkbit.ui.error.extractors.UiErrorDetailsExtractor; import org.eclipse.hawkbit.ui.error.extractors.UploadErrorExtractor; @@ -143,6 +144,18 @@ public class MgmtUiConfiguration { return new EntityNotFoundErrorExtractor(i18n); } + /** + * UI Insufficient Permission Error details extractor bean. + * + * @param i18n + * VaadinMessageSource + * @return UI InsufficientPermission Error details extractor + */ + @Bean + UiErrorDetailsExtractor insufficientPermissionErrorExtractor(final VaadinMessageSource i18n) { + return new InsufficientPermissionErrorExtractor(i18n); + } + /** * Details extractor bean for action not possible because of distribution * set is invalid. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/error/extractors/InsufficientPermissionErrorExtractor.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/error/extractors/InsufficientPermissionErrorExtractor.java new file mode 100644 index 000000000..1094db665 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/error/extractors/InsufficientPermissionErrorExtractor.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2021 Bosch.IO 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.error.extractors; + +import java.util.Optional; + +import org.eclipse.hawkbit.repository.exception.InsufficientPermissionException; +import org.eclipse.hawkbit.ui.error.UiErrorDetails; +import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider; +import org.eclipse.hawkbit.ui.utils.VaadinMessageSource; + +/** + * UI error details extractor for {@link InsufficientPermissionException}. + */ +public class InsufficientPermissionErrorExtractor extends AbstractSingleUiErrorDetailsExtractor { + private final VaadinMessageSource i18n; + + /** + * Constructor for InsufficientPermissionErrorExtractor. + * + * @param i18n + * Message source used for localization + */ + public InsufficientPermissionErrorExtractor(final VaadinMessageSource i18n) { + this.i18n = i18n; + } + + @Override + protected Optional findDetails(final Throwable error) { + return findExceptionOf(error, InsufficientPermissionException.class) + .map(ex -> UiErrorDetails.create(i18n.getMessage(UIMessageIdProvider.CAPTION_INSUFFICIENT_PERMISSION), + i18n.getMessage(UIMessageIdProvider.MESSAGE_ACTION_NOT_ALLOWED))); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIMessageIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIMessageIdProvider.java index c1cae84dd..4252c7510 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIMessageIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIMessageIdProvider.java @@ -89,6 +89,10 @@ public final class UIMessageIdProvider { public static final String CAPTION_TAG = "caption.tag"; + public static final String CAPTION_ERROR = "caption.error"; + + public static final String CAPTION_INSUFFICIENT_PERMISSION = "caption.no.permission"; + public static final String CAPTION_TYPE = "caption.type"; public static final String LABEL_DROP_AREA_UPLOAD = "label.drop.area.upload"; @@ -155,6 +159,8 @@ public final class UIMessageIdProvider { public static final String MESSAGE_ERROR_ENTITY_READONLY = "message.entity.error.readonly"; + public static final String MESSAGE_ERROR = "message.error"; + public static final String MESSAGE_ERROR_PERMISSION_INSUFFICIENT = "message.permission.insufficient"; public static final String CRON_VALIDATION_ERROR = "message.maintenancewindow.schedule.validation.error"; @@ -277,10 +283,6 @@ public final class UIMessageIdProvider { public static final String CAPTION_SOFTWARE_MODULE = "caption.software.module"; - public static final String CAPTION_ERROR = "caption.error"; - - public static final String MESSAGE_ERROR = "message.error"; - public static final String MESSAGE_TARGET_BULKUPLOAD_RESULT_SUCCESS = "message.bulk.upload.result.success"; public static final String MESSAGE_TARGET_BULKUPLOAD_RESULT_FAIL = "message.bulk.upload.result.fail"; diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index aa14750de..d8f4dab53 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -110,6 +110,7 @@ caption.artifact.details.of = Artifact Details of caption.action.states= Action States caption.action.messages = Messages caption.error = Error +caption.no.permission = Insufficient Permission caption.entity.missing.error = Entity is missing caption.new.softwaremodule.application = Configure New Application caption.new.softwaremodule.os = Configure New OS