From 2cbe13c14f1bd47582dc433516428b89acc0fa8b Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 12 Aug 2016 16:31:40 +0200 Subject: [PATCH 01/27] don't reject too many status entries exception Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java index 8906bc96c..871a4973a 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java @@ -41,6 +41,7 @@ import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; +import org.eclipse.hawkbit.repository.exception.ToManyStatusEntriesException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -153,8 +154,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return handleAuthentifiactionMessage(message); } catch (final IllegalArgumentException ex) { throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); - } catch (final TenantNotExistException teex) { - throw new AmqpRejectAndDontRequeueException(teex); + } catch (final TenantNotExistException | ToManyStatusEntriesException e) { + throw new AmqpRejectAndDontRequeueException(e); } finally { SecurityContextHolder.setContext(oldContext); } From 3accac9aded02c55ebc75bbec9caf7bebe5ec342 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Mon, 15 Aug 2016 11:30:21 +0200 Subject: [PATCH 02/27] Minor code improvements Signed-off-by: Dominic Schabel dominic.schabel@bosch-si.com --- .../simulator/DeviceSimulatorUpdater.java | 24 ++-- .../hawkbit/repository/FieldNameProvider.java | 89 ++++++-------- .../model/target/MgmtTargetAttributes.java | 3 +- .../event/AbstractPropertyChangeEvent.java | 17 ++- .../event/ActionPropertyChangeEvent.java | 3 +- .../RolloutGroupPropertyChangeEvent.java | 4 +- .../event/RolloutPropertyChangeEvent.java | 5 +- .../report/model/AbstractReportSeries.java | 7 -- .../report/model/ListReportSeries.java | 10 +- .../jpa/JpaDeploymentManagement.java | 19 +-- .../repository/jpa/JpaRolloutManagement.java | 2 +- .../jpa/JpaTargetFilterQueryManagement.java | 1 - .../ExceptionMappingAspectHandler.java | 11 +- .../model/EntityPropertyChangeListener.java | 23 ++-- .../repository/jpa/model/JpaActionStatus.java | 4 +- .../repository/jpa/model/JpaTarget.java | 4 +- .../repository/jpa/model/JpaTargetInfo.java | 4 +- .../repository/jpa/rsql/RSQLUtility.java | 24 ++-- .../util/RestResourceConversionHelper.java | 88 +++++++------- .../eclipse/hawkbit/security/DosFilter.java | 4 +- .../java/org/eclipse/hawkbit/util/IpUtil.java | 26 +++-- .../org/eclipse/hawkbit/util/IpUtilTest.java | 56 +++++---- .../smtable/SoftwareModuleTable.java | 25 ++-- ...dow.java => UploadConfirmationWindow.java} | 59 ++++------ .../ui/artifacts/upload/UploadLayout.java | 6 +- .../upload/UploadStatusInfoWindow.java | 79 ++++++------- .../hawkbit/ui/common/CoordinatesToColor.java | 29 ++--- .../DistributionSetMetadatadetailslayout.java | 110 +++++++++--------- .../filterlayout/AbstractFilterButtons.java | 36 +++--- .../ui/components/SPUIComponentProvider.java | 41 +++---- .../client/RolloutRendererConnector.java | 17 +-- .../client/renderers/RolloutRendererData.java | 66 +++++------ .../renderers/RolloutRenderer.java | 68 ++++++----- .../ui/decorators/SPUIWindowDecorator.java | 59 +++++----- .../disttype/DSTypeFilterButtons.java | 1 - .../smtable/SwMetadataPopupLayout.java | 44 +++---- .../smtype/DistSMTypeFilterButtons.java | 28 +++-- .../state/ManageDistUIState.java | 26 +++-- .../AbstractCreateUpdateTagLayout.java | 6 +- ...eateUpdateDistributionTagLayoutWindow.java | 8 +- .../dstag/DistributionTagButtons.java | 2 +- .../targettable/BulkUploadHandler.java | 26 ++--- .../targettag/TargetTagFilterButtons.java | 2 +- .../hawkbit/ui/menu/DashboardMenu.java | 54 +++++---- .../ui/rollout/DistributionBarHelper.java | 47 ++++---- .../rollout/AddUpdateRolloutWindowLayout.java | 14 +-- .../rolloutgroup/RolloutGroupListGrid.java | 24 ++-- .../AuthenticationConfigurationView.java | 8 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 12 +- .../hawkbit/ui/utils/SPUIDefinitions.java | 10 +- 50 files changed, 639 insertions(+), 696 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/{UploadConfirmationwindow.java => UploadConfirmationWindow.java} (95%) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index 9c4c43ad2..01a9231e3 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -8,9 +8,12 @@ */ package org.eclipse.hawkbit.simulator; +import static java.util.concurrent.Executors.newScheduledThreadPool; + import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.security.DigestOutputStream; import java.security.KeyManagementException; import java.security.KeyStoreException; @@ -20,7 +23,6 @@ import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; import java.util.Random; -import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -56,9 +58,10 @@ import com.google.common.io.ByteStreams; */ @Service public class DeviceSimulatorUpdater { + private static final Logger LOGGER = LoggerFactory.getLogger(DeviceSimulatorUpdater.class); - private static final ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(8); + private static final ScheduledExecutorService threadPool = newScheduledThreadPool(8); @Autowired private SpSenderService spSenderService; @@ -118,14 +121,9 @@ public class DeviceSimulatorUpdater { } private static final class DeviceSimulatorUpdateThread implements Runnable { - /** - * - */ + private static final String BUT_GOT_LOG_MESSAGE = " but got: "; - /** - * - */ private static final String DOWNLOAD_LOG_MESSAGE = "Download "; private static final int MINIMUM_TOKENLENGTH_FOR_HINT = 6; @@ -279,13 +277,17 @@ public class DeviceSimulatorUpdater { private static long getOverallRead(final CloseableHttpResponse response, final MessageDigest md) throws IOException { + long overallread; - try (final BufferedOutputStream bdos = new BufferedOutputStream( - new DigestOutputStream(ByteStreams.nullOutputStream(), md))) { + + try (final OutputStream os = ByteStreams.nullOutputStream(); + final BufferedOutputStream bos = new BufferedOutputStream(new DigestOutputStream(os, md))) { + try (BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent())) { - overallread = ByteStreams.copy(bis, bdos); + overallread = ByteStreams.copy(bis, bos); } } + return overallread; } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java index 574ce61e2..841f6d7e6 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java @@ -16,7 +16,6 @@ import java.util.Map; * An interface for declaring the name of the field described in the database * which is used as string representation of the field, e.g. for sorting the * fields over REST. - * */ public interface FieldNameProvider { /** @@ -32,64 +31,18 @@ public interface FieldNameProvider { /** * Contains the sub entity the given field. - * + * * @param propertyField * the given field * @return contains contains not */ default boolean containsSubEntityAttribute(final String propertyField) { - return FieldNameProvider.containsSubEntityAttribute(propertyField, getSubEntityAttributes()); - } - /** - * - * @return all sub entities attributes. - */ - default List getSubEntityAttributes() { - return Collections.emptyList(); - } - - /** - * the database column for the key - * - * @return key fieldname - */ - default String getKeyFieldName() { - return null; - } - - /** - * the database column for the value - * - * @return key fieldname - */ - default String getValueFieldName() { - return null; - } - - /** - * Is the entity field a {@link Map}. - * - * @return is a map is not a map - */ - default boolean isMap() { - return getKeyFieldName() != null; - } - - /** - * Check if a sub attribute exists. - * - * @param propertyField - * the sub property field. - * @param subEntityAttribues - * the list of available properties - * @return property exists not exists - */ - static boolean containsSubEntityAttribute(final String propertyField, final List subEntityAttribues) { - if (subEntityAttribues.contains(propertyField)) { + final List subEntityAttributes = getSubEntityAttributes(); + if (subEntityAttributes.contains(propertyField)) { return true; } - for (final String attribute : subEntityAttribues) { + for (final String attribute : subEntityAttributes) { final String[] graph = attribute.split("\\" + SUB_ATTRIBUTE_SEPERATOR); for (final String subAttribute : graph) { @@ -102,4 +55,38 @@ public interface FieldNameProvider { return false; } + /** + * + * @return all sub entities attributes. + */ + default List getSubEntityAttributes() { + return Collections.emptyList(); + } + + /** + * the database column for the key + * + * @return key fieldname + */ + default String getKeyFieldName() { + return null; + } + + /** + * the database column for the value + * + * @return key fieldname + */ + default String getValueFieldName() { + return null; + } + + /** + * Is the entity field a {@link Map}. + * + * @return is a map is not a map + */ + default boolean isMap() { + return getKeyFieldName() != null; + } } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java index dad8e868f..ea01b87ca 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java @@ -8,8 +8,9 @@ import java.util.Map; /** * {@link Map} with attributes of SP Target. - * */ public class MgmtTargetAttributes extends HashMap { + private static final long serialVersionUID = 1L; + } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java index 97cf13b66..2520ebc9c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java @@ -20,18 +20,18 @@ import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; public class AbstractPropertyChangeEvent extends AbstractBaseEntityEvent { private static final long serialVersionUID = -3671601415138242311L; - private final transient Map changeSet; + private final transient Map changeSet; /** * Initialize base entity and property changed with old and new value. - * + * * @param baseEntity * entity changed * @param changeSetValues * details of properties changed and old value and new value of * the changed properties */ - public AbstractPropertyChangeEvent(final E baseEntity, final Map changeSetValues) { + public AbstractPropertyChangeEvent(final E baseEntity, final Map changeSetValues) { super(baseEntity); this.changeSet = changeSetValues; } @@ -39,27 +39,27 @@ public class AbstractPropertyChangeEvent extend /** * @return the changeSet */ - public Map getChangeSet() { + public Map getChangeSet() { return changeSet; } /** * Carries old value and new value of a property . - * */ - public class Values { + public static class PropertyChange { + private final Object oldValue; private final Object newValue; /** * Initialize old value and new changes value of property. - * + * * @param oldValue * old value before change * @param newValue * new value after change */ - public Values(final Object oldValue, final Object newValue) { + public PropertyChange(final Object oldValue, final Object newValue) { super(); this.oldValue = oldValue; this.newValue = newValue; @@ -78,6 +78,5 @@ public class AbstractPropertyChangeEvent extend public Object getNewValue() { return newValue; } - } } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java index 84487547e..5197bd9a0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java @@ -22,8 +22,7 @@ public class ActionPropertyChangeEvent extends AbstractPropertyChangeEvent.Values> changeSetValues) { + public ActionPropertyChangeEvent(final Action action, final Map changeSetValues) { super(action, changeSetValues); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java index 887a1c2ff..b0b31b79a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java @@ -20,12 +20,12 @@ public class RolloutGroupPropertyChangeEvent extends AbstractPropertyChangeEvent private static final long serialVersionUID = 4026477044419472686L; /** - * + * * @param rolloutGroup * @param changeSetValues */ public RolloutGroupPropertyChangeEvent(final RolloutGroup rolloutGroup, - final Map.Values> changeSetValues) { + final Map changeSetValues) { super(rolloutGroup, changeSetValues); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java index 9287a0fb3..9bb975c3a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java @@ -19,12 +19,11 @@ public class RolloutPropertyChangeEvent extends AbstractPropertyChangeEvent.Values> changeSetValues) { + public RolloutPropertyChangeEvent(final Rollout rollout, final Map changeSetValues) { super(rollout, changeSetValues); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java index 747cd8279..9ba5ba2da 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java @@ -12,16 +12,9 @@ import java.io.Serializable; /** * An abstract report series. - * - * - * - * */ public class AbstractReportSeries implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private final String name; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java index 18b011420..27f5fb3ec 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java @@ -14,13 +14,11 @@ import java.util.List; /** * A simple list report series which just contains a list of values of a report. - * - * - * - * */ public class ListReportSeries extends AbstractReportSeries { + private static final long serialVersionUID = 1L; + private final List data = new ArrayList<>(); /** @@ -50,8 +48,8 @@ public class ListReportSeries extends AbstractReportSeries { * @param values */ private void setData(final Number... values) { - this.data.clear(); - Collections.addAll(this.data, values); + data.clear(); + Collections.addAll(data, values); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 6236e8d6f..5a2c6fdda 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -82,7 +82,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -599,11 +598,16 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Override public Page findActionsByTarget(final String rsqlParam, final Target target, final Pageable pageable) { - final Specification specification = RSQLUtility.parse(rsqlParam, ActionFields.class); - return convertAcPage(actionRepository.findAll((Specification) (root, query, cb) -> cb - .and(specification.toPredicate(root, query, cb), cb.equal(root.get(JpaAction_.target), target)), - pageable), pageable); + final Specification byTargetSpec = createSpecificationFor(target, rsqlParam); + final Page actions = actionRepository.findAll(byTargetSpec, pageable); + return convertAcPage(actions, pageable); + } + + private Specification createSpecificationFor(final Target target, final String rsqlParam) { + final Specification spec = RSQLUtility.parse(rsqlParam, ActionFields.class); + return (root, query, cb) -> cb.and(spec.toPredicate(root, query, cb), + cb.equal(root.get(JpaAction_.target), target)); } private static Page convertAcPage(final Page findAll, final Pageable pageable) { @@ -642,10 +646,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Override public Long countActionsByTarget(final String rsqlParam, final Target target) { - final Specification spec = RSQLUtility.parse(rsqlParam, ActionFields.class); - - return actionRepository.count((root, query, cb) -> cb.and(spec.toPredicate(root, query, cb), - cb.equal(root.get(JpaAction_.target), target))); + return actionRepository.count(createSpecificationFor(target, rsqlParam)); } @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index 239302a70..3a903ea89 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -599,7 +599,7 @@ public class JpaRolloutManagement implements RolloutManagement { /** * Get count of targets in different status in rollout. * - * @param page + * @param pageable * the page request to sort and limit the result * @return a list of rollouts with details of targets count for different * statuses diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index 65ed6faa4..6438e19f6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -26,7 +26,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specifications; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java index be21cdfe7..c18f614fd 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java @@ -46,6 +46,7 @@ import org.springframework.transaction.TransactionSystemException; */ @Aspect public class ExceptionMappingAspectHandler implements Ordered { + private static final Logger LOG = LoggerFactory.getLogger(ExceptionMappingAspectHandler.class); private static final Map EXCEPTION_MAPPING = new HashMap<>(); @@ -63,6 +64,7 @@ public class ExceptionMappingAspectHandler implements Ordered { private final SQLStateSQLExceptionTranslator sqlStateExceptionTranslator = new SQLStateSQLExceptionTranslator(); static { + MAPPED_EXCEPTION_ORDER.add(DuplicateKeyException.class); MAPPED_EXCEPTION_ORDER.add(DataIntegrityViolationException.class); MAPPED_EXCEPTION_ORDER.add(ConcurrencyFailureException.class); @@ -90,9 +92,11 @@ public class ExceptionMappingAspectHandler implements Ordered { + " || execution( * org.eclipse.hawkbit.controller.*.*(..)) " + " || execution( * org.eclipse.hawkbit.rest.resource.*.*(..)) " + " || execution( * org.eclipse.hawkbit.service.*.*(..)) )", throwing = "ex") - // Exception squid:S00112 - Is aspectJ proxy - @SuppressWarnings({ "squid:S00112" }) + // Exception for squid:S00112, squid:S1162 + // It is a AspectJ proxy which deals with exceptions. + @SuppressWarnings({ "squid:S00112", "squid:S1162" }) public void catchAndWrapJpaExceptionsService(final Exception ex) throws Throwable { + LOG.trace("exception occured", ex); Exception translatedAccessException = translateEclipseLinkExceptionIfPossible(ex); @@ -122,6 +126,7 @@ public class ExceptionMappingAspectHandler implements Ordered { break; } } + LOG.trace("mapped exception {} to {}", translatedAccessException.getClass(), mappingException.getClass()); throw mappingException; } @@ -138,7 +143,7 @@ public class ExceptionMappingAspectHandler implements Ordered { * translate the exception by the sql error code. Luckily, there we can use * {@link SQLStateSQLExceptionTranslator} if we can get a * {@link SQLException}. - * + * * @param accessException * the base access exception from jpa * @return the translated accessException diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java index 2dd0fdb40..6b1385440 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.model; import java.util.Map; import java.util.stream.Collectors; -import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent.PropertyChange; import org.eclipse.hawkbit.repository.eventbus.event.ActionCreatedEvent; import org.eclipse.hawkbit.repository.eventbus.event.ActionPropertyChangeEvent; import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupPropertyChangeEvent; @@ -33,7 +33,6 @@ import com.google.common.eventbus.EventBus; /** * Listens to change in property values of an entity. - * */ public class EntityPropertyChangeListener extends DescriptorEventAdapter { @@ -53,27 +52,23 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { @Override public void postUpdate(final DescriptorEvent event) { if (event.getObject().getClass().equals(JpaAction.class)) { - getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus().post( - new ActionPropertyChangeEvent((Action) event.getObject(), getChangeSet(Action.class, event)))); + getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus() + .post(new ActionPropertyChangeEvent((Action) event.getObject(), getChangeSet(event)))); } else if (event.getObject().getClass().equals(JpaRollout.class)) { - getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus().post( - new RolloutPropertyChangeEvent((Rollout) event.getObject(), getChangeSet(Rollout.class, event)))); + getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus() + .post(new RolloutPropertyChangeEvent((Rollout) event.getObject(), getChangeSet(event)))); } else if (event.getObject().getClass().equals(JpaRolloutGroup.class)) { - getAfterTransactionCommmitExecutor().afterCommit( - () -> getEventBus().post(new RolloutGroupPropertyChangeEvent((RolloutGroup) event.getObject(), - getChangeSet(RolloutGroup.class, event)))); + getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus() + .post(new RolloutGroupPropertyChangeEvent((RolloutGroup) event.getObject(), getChangeSet(event)))); } } - private Map.Values> getChangeSet( - final Class clazz, final DescriptorEvent event) { - final T rolloutGroup = clazz.cast(event.getObject()); + private Map getChangeSet(final DescriptorEvent event) { final ObjectChangeSet changeSet = ((UpdateObjectQuery) event.getQuery()).getObjectChangeSet(); return changeSet.getChanges().stream().filter(record -> record instanceof DirectToFieldChangeRecord) .map(record -> (DirectToFieldChangeRecord) record) .collect(Collectors.toMap(record -> record.getAttribute(), - record -> new AbstractPropertyChangeEvent(rolloutGroup, null).new Values( - record.getOldValue(), record.getNewValue()))); + record -> new PropertyChange(record.getOldValue(), record.getNewValue()))); } private AfterTransactionCommitExecutor getAfterTransactionCommmitExecutor() { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index 3a8cb8683..e1843eb33 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -98,8 +98,8 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements * the status for this action status * @param occurredAt * the occurred timestamp - * @param messages - * the messages which should be added to this action status + * @param message + * the message which should be added to this action status */ public JpaActionStatus(final JpaAction action, final Status status, final Long occurredAt, final String message) { this.action = action; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 183405470..233e89664 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -65,6 +65,7 @@ import org.springframework.data.domain.Persistable; // sub entities @SuppressWarnings("squid:S2160") public class JpaTarget extends AbstractJpaNamedEntity implements Persistable, Target { + private static final long serialVersionUID = 1L; @Column(name = "controller_id", length = 64) @@ -180,7 +181,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable, TargetInfo { private boolean requestControllerAttributes = true; /** - * Constructor for {@link TargetStatus}. + * Constructor for {@link JpaTargetInfo}. * * @param target * related to this status. @@ -144,7 +144,7 @@ public class JpaTargetInfo implements Persistable, TargetInfo { } /** - * @param isNew + * @param entityNew * the isNew to set */ public void setNew(final boolean entityNew) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java index 91e03342e..90dd039f5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa.rsql; +import static org.eclipse.hawkbit.repository.FieldNameProvider.SUB_ATTRIBUTE_SEPERATOR; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -15,7 +17,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Expression; @@ -49,7 +50,7 @@ import cz.jirutka.rsql.parser.ast.RSQLVisitor; * A utility class which is able to parse RSQL strings into an spring data * {@link Specification} which then can be enhanced sql queries to filter * entities. RSQL parser library: https://github.com/jirutka/rsql-parser - * + * *
    *
  • Equal to : ==
  • *
  • Not equal to : !=
  • @@ -83,14 +84,12 @@ public final class RSQLUtility { /** * parses an RSQL valid string into an JPA {@link Specification} which then * can be used to filter for JPA entities with the given RSQL query. - * + * * @param rsql * the rsql query * @param fieldNameProvider * the enum class type which implements the * {@link FieldNameProvider} - * @param entityManager - * {@link EntityManager} * @return an specification which can be used with JPA * @throws RSQLParameterUnsupportedFieldException * if a field in the RSQL string is used but not provided by the @@ -105,10 +104,10 @@ public final class RSQLUtility { /** * Validate the given rsql string regarding existence and correct syntax. - * + * * @param rsql * the rsql string to get validated - * + * */ public static void isValid(final String rsql) { parseRsql(rsql); @@ -156,7 +155,7 @@ public final class RSQLUtility { /** * An implementation of the {@link RSQLVisitor} to visit the parsed tokens * and build jpa where clauses. - * + * * * * @param @@ -205,7 +204,7 @@ public final class RSQLUtility { } private String getAndValidatePropertyFieldName(final A propertyEnum, final ComparisonNode node) { - String finalProperty = propertyEnum.getFieldName(); + final String[] graph = node.getSelector().split("\\" + FieldNameProvider.SUB_ATTRIBUTE_SEPERATOR); validateMapParamter(propertyEnum, node, graph); @@ -215,9 +214,12 @@ public final class RSQLUtility { throw createRSQLParameterUnsupportedException(node); } + final StringBuilder fieldNameBuilder = new StringBuilder(propertyEnum.getFieldName()); + for (int i = 1; i < graph.length; i++) { + final String propertyField = graph[i]; - finalProperty += FieldNameProvider.SUB_ATTRIBUTE_SEPERATOR + propertyField; + fieldNameBuilder.append(SUB_ATTRIBUTE_SEPERATOR).append(propertyField); // the key of map is not in the graph if (propertyEnum.isMap() && graph.length == (i + 1)) { @@ -229,7 +231,7 @@ public final class RSQLUtility { } } - return finalProperty; + return fieldNameBuilder.toString(); } private void validateMapParamter(final A propertyEnum, final ComparisonNode node, final String[] graph) { diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index 0c9dd39c5..7e2fbed7c 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -9,11 +9,24 @@ package org.eclipse.hawkbit.rest.util; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.net.HttpHeaders.ACCEPT_RANGES; +import static com.google.common.net.HttpHeaders.CONTENT_DISPOSITION; +import static com.google.common.net.HttpHeaders.CONTENT_LENGTH; +import static com.google.common.net.HttpHeaders.CONTENT_RANGE; +import static com.google.common.net.HttpHeaders.ETAG; +import static com.google.common.net.HttpHeaders.IF_RANGE; +import static com.google.common.net.HttpHeaders.LAST_MODIFIED; +import static java.math.RoundingMode.DOWN; +import static javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT; +import static org.eclipse.hawkbit.rest.util.ByteRange.MULTIPART_BOUNDARY; +import static org.springframework.http.HttpStatus.OK; +import static org.springframework.http.HttpStatus.PARTIAL_CONTENT; +import static org.springframework.http.HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE; +import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -27,23 +40,19 @@ import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import com.google.common.math.DoubleMath; -import com.google.common.net.HttpHeaders; /** * Utility class for the Rest Source API. - * */ public final class RestResourceConversionHelper { + private static final Logger LOG = LoggerFactory.getLogger(RestResourceConversionHelper.class); private static final int BUFFER_SIZE = 4096; - // utility class, private constructor. private RestResourceConversionHelper() { } @@ -92,7 +101,8 @@ public final class RestResourceConversionHelper { * * @return http code * - * @see https://tools.ietf.org/html/rfc7233 + * @see https://tools.ietf.org + * /html/rfc7233 */ public static ResponseEntity writeFileResponse(final LocalArtifact artifact, final HttpServletResponse response, final HttpServletRequest request, final DbArtifact file, @@ -107,11 +117,11 @@ public final class RestResourceConversionHelper { response.reset(); response.setBufferSize(BUFFER_SIZE); - response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + artifact.getFilename()); - response.setHeader(HttpHeaders.ETAG, etag); - response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); - response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModified); - response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(CONTENT_DISPOSITION, "attachment;filename=" + artifact.getFilename()); + response.setHeader(ETAG, etag); + response.setHeader(ACCEPT_RANGES, "bytes"); + response.setDateHeader(LAST_MODIFIED, lastModified); + response.setContentType(APPLICATION_OCTET_STREAM_VALUE); final ByteRange full = new ByteRange(0, length - 1, length); final List ranges = new ArrayList<>(); @@ -123,9 +133,9 @@ public final class RestResourceConversionHelper { // Range header matches"bytes=n-n,n-n,n-n..." if (!range.matches("^bytes=\\d*-\\d*(,\\d*-\\d*)*$")) { - response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + length); + response.setHeader(CONTENT_RANGE, "bytes */" + length); LOG.debug("range header for filename ({}) is not satisfiable: ", artifact.getFilename()); - return new ResponseEntity<>(HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE); + return new ResponseEntity<>(REQUESTED_RANGE_NOT_SATISFIABLE); } // RFC: if the representation is unchanged, send me the part(s) that @@ -144,32 +154,31 @@ public final class RestResourceConversionHelper { // full request - no range if (ranges.isEmpty() || ranges.get(0).equals(full)) { LOG.debug("filename ({}) results into a full request: ", artifact.getFilename()); - fullfileRequest(artifact, response, file, controllerManagement, statusId, full); - result = new ResponseEntity<>(HttpStatus.OK); + handleFullFileRequest(artifact, response, file, controllerManagement, statusId, full); + result = new ResponseEntity<>(OK); } // standard range request else if (ranges.size() == 1) { LOG.debug("filename ({}) results into a standard range request: ", artifact.getFilename()); - standardRangeRequest(artifact, response, file, controllerManagement, statusId, ranges); - result = new ResponseEntity<>(HttpStatus.PARTIAL_CONTENT); + handleStandardRangeRequest(artifact, response, file, controllerManagement, statusId, ranges); + result = new ResponseEntity<>(PARTIAL_CONTENT); } // multipart range request else { LOG.debug("filename ({}) results into a multipart range request: ", artifact.getFilename()); - multipartRangeRequest(artifact, response, file, controllerManagement, statusId, ranges); - result = new ResponseEntity<>(HttpStatus.PARTIAL_CONTENT); + handleMultipartRangeRequest(artifact, response, file, controllerManagement, statusId, ranges); + result = new ResponseEntity<>(PARTIAL_CONTENT); } return result; - } - private static void fullfileRequest(final LocalArtifact artifact, final HttpServletResponse response, + private static void handleFullFileRequest(final LocalArtifact artifact, final HttpServletResponse response, final DbArtifact file, final ControllerManagement controllerManagement, final Long statusId, final ByteRange full) { final ByteRange r = full; - response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); - response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(r.getLength())); + response.setHeader(CONTENT_RANGE, "bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); + response.setHeader(CONTENT_LENGTH, String.valueOf(r.getLength())); try { copyStreams(file.getFileInputStream(), response.getOutputStream(), controllerManagement, statusId, @@ -182,7 +191,7 @@ public final class RestResourceConversionHelper { private static ResponseEntity extractRange(final HttpServletResponse response, final long length, final List ranges, final String range) { - ResponseEntity result = null; + if (ranges.isEmpty()) { for (final String part : range.substring(6).split(",")) { long start = sublong(part, 0, part.indexOf('-')); @@ -198,9 +207,8 @@ public final class RestResourceConversionHelper { // Check if Range is syntactically valid. If not, then return // 416. if (start > end) { - response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + length); - result = new ResponseEntity<>(HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE); - return result; + response.setHeader(CONTENT_RANGE, "bytes */" + length); + return new ResponseEntity<>(REQUESTED_RANGE_NOT_SATISFIABLE); } // Add range. @@ -218,10 +226,10 @@ public final class RestResourceConversionHelper { private static void checkForShortcut(final HttpServletRequest request, final String etag, final long lastModified, final ByteRange full, final List ranges) { - final String ifRange = request.getHeader(HttpHeaders.IF_RANGE); + final String ifRange = request.getHeader(IF_RANGE); if (ifRange != null && !ifRange.equals(etag)) { try { - final long ifRangeTime = request.getDateHeader(HttpHeaders.IF_RANGE); + final long ifRangeTime = request.getDateHeader(IF_RANGE); if (ifRangeTime != -1 && ifRangeTime + 1000 < lastModified) { ranges.add(full); } @@ -232,17 +240,17 @@ public final class RestResourceConversionHelper { } } - private static void multipartRangeRequest(final LocalArtifact artifact, final HttpServletResponse response, + private static void handleMultipartRangeRequest(final LocalArtifact artifact, final HttpServletResponse response, final DbArtifact file, final ControllerManagement controllerManagement, final Long statusId, final List ranges) { - response.setContentType("multipart/byteranges; boundary=" + ByteRange.MULTIPART_BOUNDARY); - response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + response.setContentType("multipart/byteranges; boundary=" + MULTIPART_BOUNDARY); + response.setStatus(SC_PARTIAL_CONTENT); try { for (final ByteRange r : ranges) { // Add multipart boundary and header fields for every range. response.getOutputStream().println(); - response.getOutputStream().println("--" + ByteRange.MULTIPART_BOUNDARY); + response.getOutputStream().println("--" + MULTIPART_BOUNDARY); response.getOutputStream() .println("Content-Range: bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); @@ -253,20 +261,20 @@ public final class RestResourceConversionHelper { // End with final multipart boundary. response.getOutputStream().println(); - response.getOutputStream().print("--" + ByteRange.MULTIPART_BOUNDARY + "--"); + response.getOutputStream().print("--" + MULTIPART_BOUNDARY + "--"); } catch (final IOException e) { LOG.error("multipartRangeRequest of file ({}) failed!", artifact.getFilename(), e); throw new FileSteamingFailedException(artifact.getFilename()); } } - private static void standardRangeRequest(final LocalArtifact artifact, final HttpServletResponse response, + private static void handleStandardRangeRequest(final LocalArtifact artifact, final HttpServletResponse response, final DbArtifact file, final ControllerManagement controllerManagement, final Long statusId, final List ranges) { final ByteRange r = ranges.get(0); - response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); - response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(r.getLength())); - response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + response.setHeader(CONTENT_RANGE, "bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); + response.setHeader(CONTENT_LENGTH, String.valueOf(r.getLength())); + response.setStatus(SC_PARTIAL_CONTENT); try { copyStreams(file.getFileInputStream(), response.getOutputStream(), controllerManagement, statusId, @@ -315,7 +323,7 @@ public final class RestResourceConversionHelper { } if (controllerManagement != null) { - final int newPercent = DoubleMath.roundToInt(total * 100.0 / length, RoundingMode.DOWN); + final int newPercent = DoubleMath.roundToInt(total * 100.0 / length, DOWN); // every 10 percent an event if (newPercent == 100 || newPercent > progressPercent + 10) { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java index 008aa3e95..89d0f4387 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java @@ -100,7 +100,8 @@ public class DosFilter extends OncePerRequestFilter { boolean processChain; - final String ip = IpUtil.getClientIpFromRequest(request, forwardHeader, true).getHost(); + final String ip = IpUtil.getClientIpFromRequest(request, forwardHeader).getHost(); + if (checkIpFails(ip)) { processChain = handleMissingIpAddress(response); } else { @@ -121,7 +122,6 @@ public class DosFilter extends OncePerRequestFilter { if (processChain) { filterChain.doFilter(request, response); } - } /** diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java index c7778f776..30306526a 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java @@ -44,7 +44,7 @@ public final class IpUtil { * {@link HttpServletRequest} by either the * {@link HttpHeaders#X_FORWARDED_FOR} or by the * {@link HttpServletRequest#getRemoteAddr()} methods. - * + * * @param request * the {@link HttpServletRequest} to determine the IP address * where this request has been sent from @@ -65,21 +65,23 @@ public final class IpUtil { * {@link HttpServletRequest} by either the * {@link HttpHeaders#X_FORWARDED_FOR} or by the * {@link HttpServletRequest#getRemoteAddr()} methods. - * + * * @param request * the {@link HttpServletRequest} to determine the IP address * where this request has been sent from * @param forwardHeader * the header name containing the IP address e.g. forwarded by a * proxy {@code x-forwarded-for} - * - * @param trackRemoteIp - * to true if remote IP should be tracked. * @return the {@link URI} based IP address from the client which sent the * request */ - public static URI getClientIpFromRequest(final HttpServletRequest request, final String forwardHeader, + public static URI getClientIpFromRequest(final HttpServletRequest request, final String forwardHeader) { + return getClientIpFromRequest(request, forwardHeader, true); + } + + private static URI getClientIpFromRequest(final HttpServletRequest request, final String forwardHeader, final boolean trackRemoteIp) { + String ip; if (trackRemoteIp) { @@ -113,7 +115,7 @@ public final class IpUtil { /** * Create a {@link URI} with scheme and host. - * + * * @param scheme * the scheme * @param host @@ -132,7 +134,7 @@ public final class IpUtil { /** * Create a {@link URI} with amqp scheme and host. - * + * * @param host * the host * @param exchange @@ -147,7 +149,7 @@ public final class IpUtil { /** * Create a {@link URI} with http scheme and host. - * + * * @param host * the host * @return the {@link URI} @@ -160,7 +162,7 @@ public final class IpUtil { /** * Check if scheme contains http and uri ist not null. - * + * * @param uri * the uri * @return true = is http host false = not @@ -171,7 +173,7 @@ public final class IpUtil { /** * Check if host scheme amqp and uri ist not null. - * + * * @param uri * the uri * @return true = is http host false = not @@ -183,7 +185,7 @@ public final class IpUtil { /** * Check if the IP address of that {@link URI} is known, i.e. not an AQMP * exchange in DMF case and not HIDDEN_IP in DDI case. - * + * * @param uri * the uri * @return true if IP address is actually known by the server diff --git a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java index 0f4a01d26..836a9f13e 100644 --- a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java +++ b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.util; +import static com.google.common.net.HttpHeaders.X_FORWARDED_FOR; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -21,13 +22,13 @@ import java.net.URI; import javax.servlet.http.HttpServletRequest; +import org.eclipse.hawkbit.security.HawkbitSecurityProperties; +import org.eclipse.hawkbit.security.HawkbitSecurityProperties.Clients; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import com.google.common.net.HttpHeaders; - import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -37,69 +38,73 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("IP Util Test") public class IpUtilTest { + private static final String KNOWN_REQUEST_HEADER = "bumlux"; + @Mock private HttpServletRequest requestMock; + @Mock + private Clients clientMock; + + @Mock + private HawkbitSecurityProperties securityPropertyMock; + @Test @Description("Tests create uri from request") public void getRemoteAddrFromRequestIfForwaredHeaderNotPresent() { - // known values + final URI knownRemoteClientIP = IpUtil.createHttpUri("127.0.0.1"); - // mock - when(requestMock.getHeader(HttpHeaders.X_FORWARDED_FOR)).thenReturn(null); + when(requestMock.getHeader(X_FORWARDED_FOR)).thenReturn(null); when(requestMock.getRemoteAddr()).thenReturn(knownRemoteClientIP.getHost()); - // test - final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux", true); + final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, KNOWN_REQUEST_HEADER); // verify assertThat(remoteAddr).as("The remote address should be as the known client IP address") .isEqualTo(knownRemoteClientIP); - verify(requestMock, times(1)).getHeader("bumlux"); + verify(requestMock, times(1)).getHeader(KNOWN_REQUEST_HEADER); verify(requestMock, times(1)).getRemoteAddr(); } @Test @Description("Tests create uri from request with masked IP when IP tracking is disabled") public void maskRemoteAddrIfDisabled() { - // known values + final URI knownRemoteClientIP = IpUtil.createHttpUri("***"); - // mock - when(requestMock.getHeader(HttpHeaders.X_FORWARDED_FOR)).thenReturn(null); + when(requestMock.getHeader(X_FORWARDED_FOR)).thenReturn(null); when(requestMock.getRemoteAddr()).thenReturn(knownRemoteClientIP.getHost()); + when(securityPropertyMock.getClients()).thenReturn(clientMock); + when(clientMock.getRemoteIpHeader()).thenReturn(KNOWN_REQUEST_HEADER); + when(clientMock.isTrackRemoteIp()).thenReturn(false); - // test - final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux", false); + final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, securityPropertyMock); - // verify assertThat(remoteAddr).as("The remote address should be as the known client IP address") .isEqualTo(knownRemoteClientIP); - verify(requestMock, times(0)).getHeader("bumlux"); + verify(requestMock, times(0)).getHeader(KNOWN_REQUEST_HEADER); verify(requestMock, times(0)).getRemoteAddr(); } @Test @Description("Tests create uri from x forward header") public void getRemoteAddrFromXForwardedForHeader() { - // known values + final URI knownRemoteClientIP = IpUtil.createHttpUri("10.99.99.1"); - // mock - when(requestMock.getHeader(HttpHeaders.X_FORWARDED_FOR)).thenReturn(knownRemoteClientIP.getHost()); + when(requestMock.getHeader(X_FORWARDED_FOR)).thenReturn(knownRemoteClientIP.getHost()); when(requestMock.getRemoteAddr()).thenReturn(null); - // test - final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For", true); + final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For"); - // verify assertThat(remoteAddr).as("The remote address should be as the known client IP address") .isEqualTo(knownRemoteClientIP); - verify(requestMock, times(1)).getHeader(HttpHeaders.X_FORWARDED_FOR); + verify(requestMock, times(1)).getHeader(X_FORWARDED_FOR); verify(requestMock, times(0)).getRemoteAddr(); } @Test @Description("Tests create http uri ipv4 and ipv6") public void testCreateHttpUri() { + final String ipv4 = "10.99.99.1"; URI httpUri = IpUtil.createHttpUri(ipv4); assertHttpUri(ipv4, httpUri); @@ -111,7 +116,6 @@ public class IpUtilTest { final String ipv6 = "0:0:0:0:0:0:0:1"; httpUri = IpUtil.createHttpUri(ipv6); assertHttpUri("[" + ipv6 + "]", httpUri); - } private void assertHttpUri(final String host, final URI httpUri) { @@ -124,6 +128,7 @@ public class IpUtilTest { @Test @Description("Tests create amqp uri ipv4 and ipv6") public void testCreateAmqpUri() { + final String ipv4 = "10.99.99.1"; URI amqpUri = IpUtil.createAmqpUri(ipv4, "path"); assertAmqpUri(ipv4, amqpUri); @@ -138,6 +143,7 @@ public class IpUtilTest { } private void assertAmqpUri(final String host, final URI amqpUri) { + assertTrue("The given URI is an AMQP scheme", IpUtil.isAmqpUri(amqpUri)); assertFalse("The given URI is not an HTTP scheme", IpUtil.isHttpUri(amqpUri)); assertEquals("The given host matches the URI host", host, amqpUri.getHost()); @@ -148,17 +154,19 @@ public class IpUtilTest { @Test @Description("Tests create invalid uri") public void testCreateInvalidUri() { + final String host = "10.99.99.1"; final URI testUri = IpUtil.createUri("test", host); + assertFalse("The given URI is not an AMQP address", IpUtil.isAmqpUri(testUri)); assertFalse("The given URI is not an HTTP address", IpUtil.isHttpUri(testUri)); assertEquals("The given host matches the URI host", host, testUri.getHost()); + try { IpUtil.createUri(":/", host); fail("Missing expected IllegalArgumentException due invalid URI"); } catch (final IllegalArgumentException e) { // expected } - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 1cfd28718..8ce3b8519 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -52,8 +52,8 @@ import com.vaadin.ui.UI; /** * Header of Software module table. */ -@SpringComponent @ViewScope +@SpringComponent public class SoftwareModuleTable extends AbstractNamedVersionTable { private static final long serialVersionUID = 6469417305487144809L; @@ -66,7 +66,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable refreshFilter()); + UI.getCurrent().access(this::refreshFilter); } } @@ -197,12 +197,12 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable showMetadataDetails((Long) itemId, nameVersionStr)); + manageMetaDataBtn.addClickListener(event -> showMetadataDetails((Long) itemId)); return manageMetaDataBtn; } }); } - + @Override protected List getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); @@ -237,8 +237,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable updateProgress(event.getUploadStatus().getFileName(), event.getUploadStatus().getBytesRead(), - event.getUploadStatus().getContentLength(), event.getUploadStatus().getSoftwareModule())); + UI.getCurrent() + .access(() -> updateProgress(event.getUploadStatus().getFileName(), + event.getUploadStatus().getBytesRead(), event.getUploadStatus().getContentLength(), + event.getUploadStatus().getSoftwareModule())); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STARTED) { UI.getCurrent().access(() -> onStartOfUpload(event)); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FAILED) { - ui.access(() -> uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason(), event.getUploadStatus().getSoftwareModule())); + ui.access(() -> uploadFailed(event.getUploadStatus().getFileName(), + event.getUploadStatus().getFailureReason(), event.getUploadStatus().getSoftwareModule())); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_SUCCESSFUL) { - UI.getCurrent().access( - () -> uploadSucceeded(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getSoftwareModule())); + UI.getCurrent().access(() -> uploadSucceeded(event.getUploadStatus().getFileName(), + event.getUploadStatus().getSoftwareModule())); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FINISHED) { - ui.access(() -> uploadSucceeded(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getSoftwareModule())); + ui.access(() -> uploadSucceeded(event.getUploadStatus().getFileName(), + event.getUploadStatus().getSoftwareModule())); } } - private void onStartOfUpload(UploadStatusEvent event) { + private void onStartOfUpload(final UploadStatusEvent event) { uploadSessionStarted(); uploadStarted(event.getUploadStatus().getFileName(), event.getUploadStatus().getSoftwareModule()); } @@ -169,19 +169,19 @@ public class UploadStatusInfoWindow extends Window { } private void restoreState() { - Indexed container = grid.getContainerDataSource(); + final Indexed container = grid.getContainerDataSource(); if (container.getItemIds().isEmpty()) { container.removeAllItems(); - for (UploadStatusObject statusObject : artifactUploadState.getUploadedFileStatusList()) { - Item item = container.addItem(getItemid(statusObject.getFilename(), - statusObject.getSelectedSoftwareModule())); + for (final UploadStatusObject statusObject : artifactUploadState.getUploadedFileStatusList()) { + final Item item = container + .addItem(getItemid(statusObject.getFilename(), statusObject.getSelectedSoftwareModule())); item.getItemProperty(REASON).setValue(statusObject.getReason() != null ? statusObject.getReason() : ""); item.getItemProperty(STATUS).setValue(statusObject.getStatus()); item.getItemProperty(PROGRESS).setValue(statusObject.getProgress()); item.getItemProperty(FILE_NAME).setValue(statusObject.getFilename()); - SoftwareModule sw = statusObject.getSelectedSoftwareModule(); - item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue( - HawkbitCommonUtil.getFormattedNameVersion(sw.getName(), sw.getVersion())); + final SoftwareModule sw = statusObject.getSelectedSoftwareModule(); + item.getItemProperty(SPUILabelDefinitions.NAME_VERSION) + .setValue(HawkbitCommonUtil.getFormattedNameVersion(sw.getName(), sw.getVersion())); } if (artifactUploadState.isUploadCompleted()) { minimizeButton.setEnabled(false); @@ -209,7 +209,7 @@ public class UploadStatusInfoWindow extends Window { } private Grid createGrid() { - Grid statusGrid = new Grid(uploads); + final Grid statusGrid = new Grid(uploads); statusGrid.addStyleName(SPUIStyleDefinitions.UPLOAD_STATUS_GRID); statusGrid.setSelectionMode(SelectionMode.NONE); statusGrid.setHeaderVisible(true); @@ -219,7 +219,7 @@ public class UploadStatusInfoWindow extends Window { } private IndexedContainer getGridContainer() { - IndexedContainer uploadContainer = new IndexedContainer(); + final IndexedContainer uploadContainer = new IndexedContainer(); uploadContainer.addContainerProperty(STATUS, String.class, "Active"); uploadContainer.addContainerProperty(FILE_NAME, String.class, null); uploadContainer.addContainerProperty(PROGRESS, Double.class, 0D); @@ -329,7 +329,7 @@ public class UploadStatusInfoWindow extends Window { HawkbitCommonUtil.getFormattedNameVersion(softwareModule.getName(), softwareModule.getVersion())); } grid.scrollToEnd(); - UploadStatusObject uploadStatus = new UploadStatusObject(filename, softwareModule); + final UploadStatusObject uploadStatus = new UploadStatusObject(filename, softwareModule); uploadStatus.setStatus("Active"); artifactUploadState.getUploadedFileStatusList().add(uploadStatus); } @@ -337,56 +337,53 @@ public class UploadStatusInfoWindow extends Window { void updateProgress(final String filename, final long readBytes, final long contentLength, final SoftwareModule softwareModule) { final Item item = uploads.getItem(getItemid(filename, softwareModule)); - double progress = (double) readBytes / (double) contentLength; + final double progress = (double) readBytes / (double) contentLength; if (item != null) { item.getItemProperty(PROGRESS).setValue(progress); } - List uploadStatusObjectList = (List) artifactUploadState - .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) - .collect(Collectors.toList()); + final List uploadStatusObjectList = artifactUploadState.getUploadedFileStatusList().stream() + .filter(e -> e.getFilename().equals(filename)).collect(Collectors.toList()); if (!uploadStatusObjectList.isEmpty()) { - UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + final UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); uploadStatusObject.setProgress(progress); } } /** * Called when each file upload is success. - * + * * @param filename * of the uploaded file. * @param softwareModule * selected software module */ - public void uploadSucceeded(final String filename, SoftwareModule softwareModule) { + public void uploadSucceeded(final String filename, final SoftwareModule softwareModule) { final Item item = uploads.getItem(getItemid(filename, softwareModule)); - String status = "Finished"; + final String status = "Finished"; if (item != null) { item.getItemProperty(STATUS).setValue(status); } - List uploadStatusObjectList = (List) artifactUploadState - .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) - .collect(Collectors.toList()); + final List uploadStatusObjectList = artifactUploadState.getUploadedFileStatusList().stream() + .filter(e -> e.getFilename().equals(filename)).collect(Collectors.toList()); if (!uploadStatusObjectList.isEmpty()) { - UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + final UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); uploadStatusObject.setStatus(status); uploadStatusObject.setProgress(1d); } } - void uploadFailed(final String filename, final String errorReason, SoftwareModule softwareModule) { + void uploadFailed(final String filename, final String errorReason, final SoftwareModule softwareModule) { errorOccured = true; - String status = "Failed"; + final String status = "Failed"; final Item item = uploads.getItem(getItemid(filename, softwareModule)); if (item != null) { item.getItemProperty(REASON).setValue(errorReason); item.getItemProperty(STATUS).setValue(status); } - List uploadStatusObjectList = (List) artifactUploadState - .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) - .collect(Collectors.toList()); + final List uploadStatusObjectList = artifactUploadState.getUploadedFileStatusList().stream() + .filter(e -> e.getFilename().equals(filename)).collect(Collectors.toList()); if (!uploadStatusObjectList.isEmpty()) { - UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + final UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); uploadStatusObject.setStatus(status); uploadStatusObject.setReason(errorReason); } @@ -428,8 +425,8 @@ public class UploadStatusInfoWindow extends Window { return resizeBtn; } - private void resizeWindow(ClickEvent event) { - if (event.getButton().getIcon() == FontAwesome.EXPAND) { + private void resizeWindow(final ClickEvent event) { + if (FontAwesome.EXPAND.equals(event.getButton().getIcon())) { event.getButton().setIcon(FontAwesome.COMPRESS); setWindowMode(WindowMode.MAXIMIZED); resetColumnWidth(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java index d3b13adb3..09f88d655 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java @@ -13,10 +13,6 @@ import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; /** * Converts 2d-coordinates to a Color. - * - * - * - * */ public class CoordinatesToColor implements Coordinates2Color { @@ -30,32 +26,31 @@ public class CoordinatesToColor implements Coordinates2Color { @Override public int[] calculate(final Color color) { final float[] hsv = color.getHSV(); - final int x = Math.round(hsv[0] * 220f); - int y = 0; - y = calculateYCoordinateOfColor(hsv); + final int x = Math.round(hsv[0] * 220F); + final int y = calculateYCoordinateOfColor(hsv); return new int[] { x, y }; } - private Color calculateHSVColor(final int x, final int y) { - final float h = x / 220f; - float s = 1f; - float v = 1f; + private static Color calculateHSVColor(final int x, final int y) { + final float h = x / 220F; + float s = 1F; + float v = 1F; if (y < 110) { - s = y / 110f; + s = y / 110F; } else if (y > 110) { - v = 1f - (y - 110f) / 110f; + v = 1F - (y - 110F) / 110F; } return new Color(Color.HSVtoRGB(h, s, v)); } - private int calculateYCoordinateOfColor(final float[] hsv) { + private static int calculateYCoordinateOfColor(final float[] hsv) { int y; // lower half /* Assuming hsv[] array value will have in the range of 0 to 1 */ - if (hsv[1] < 1f) { - y = Math.round(hsv[1] * 110f); + if (hsv[1] < 1F) { + y = Math.round(hsv[1] * 110F); } else { - y = Math.round(110f - (hsv[1] + hsv[2]) * 110f); + y = Math.round(110F - (hsv[1] + hsv[2]) * 110F); } return y; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java index d3892a9dc..04fd2c316 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java @@ -33,45 +33,43 @@ import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** - * + * * DistributionSet Metadata details layout. * */ @SpringComponent @VaadinSessionScope -public class DistributionSetMetadatadetailslayout extends Table{ - +public class DistributionSetMetadatadetailslayout extends Table { + private static final long serialVersionUID = 2913758299611837718L; - - - private DistributionSetManagement distributionSetManagement; - - private DsMetadataPopupLayout dsMetadataPopupLayout; private static final String METADATA_KEY = "Key"; - - private static final String VIEW ="view"; + + private static final String VIEW = "view"; + + private transient DistributionSetManagement distributionSetManagement; + + private DsMetadataPopupLayout dsMetadataPopupLayout; private SpPermissionChecker permissionChecker; - + private transient EntityFactory entityFactory; private I18N i18n; - - private Long selectedDistSetId; - - /** - * - * @param i18n - * @param permissionChecker - * @param distributionSetManagement - * @param dsMetadataPopupLayout - */ + + private Long selectedDistSetId; + + /** + * + * @param i18n + * @param permissionChecker + * @param distributionSetManagement + * @param dsMetadataPopupLayout + */ public void init(final I18N i18n, final SpPermissionChecker permissionChecker, - final DistributionSetManagement distributionSetManagement, - final DsMetadataPopupLayout dsMetadataPopupLayout, - final EntityFactory entityFactory) { + final DistributionSetManagement distributionSetManagement, + final DsMetadataPopupLayout dsMetadataPopupLayout, final EntityFactory entityFactory) { this.i18n = i18n; this.permissionChecker = permissionChecker; this.distributionSetManagement = distributionSetManagement; @@ -80,45 +78,44 @@ public class DistributionSetMetadatadetailslayout extends Table{ createDSMetadataTable(); addCustomGeneratedColumns(); } - /** * Populate software module metadata. - * + * * @param distributionSet */ public void populateDSMetadata(final DistributionSet distributionSet) { removeAllItems(); if (null == distributionSet) { - return; + return; } selectedDistSetId = distributionSet.getId(); final List dsMetadataList = distributionSet.getMetadata(); if (null != dsMetadataList && !dsMetadataList.isEmpty()) { dsMetadataList.forEach(dsMetadata -> setDSMetadataProperties(dsMetadata)); } - + } - + /** - * Create metadata . - * + * Create metadata. + * * @param metadataKeyName */ - public void createMetadata(final String 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){ + public void deleteMetadata(final String metadataKeyName) { final IndexedContainer metadataContainer = (IndexedContainer) getContainerDataSource(); - metadataContainer.removeItem(metadataKeyName); + metadataContainer.removeItem(metadataKeyName); } private void createDSMetadataTable() { @@ -131,9 +128,9 @@ public class DistributionSetMetadatadetailslayout extends Table{ setContainerDataSource(getDistSetContainer()); setColumnHeaderMode(ColumnHeaderMode.EXPLICIT); addDSMetadataTableHeader(); - setSizeFull(); - //same as height of other tabs in details tabsheet - setHeight(116,Unit.PIXELS); + setSizeFull(); + // same as height of other tabs in details tabsheet + setHeight(116, Unit.PIXELS); } private IndexedContainer getDistSetContainer() { @@ -141,7 +138,7 @@ public class DistributionSetMetadatadetailslayout extends Table{ 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); @@ -154,39 +151,36 @@ public class DistributionSetMetadatadetailslayout extends Table{ setColumnHeader(METADATA_KEY, i18n.get("header.key")); } - - private void setDSMetadataProperties(final DistributionSetMetadata dsMetadata){ + 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 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); + 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(SPUIComponentIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name) - .toString(); + return new StringBuilder(SPUIComponentIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name).toString(); } - - private void showMetadataDetails(final Long selectedDistSetId , final String metadataKey) { - DistributionSet distSet = distributionSetManagement.findDistributionSetById(selectedDistSetId); - + + private void showMetadataDetails(final Long selectedDistSetId, final String metadataKey) { + final DistributionSet distSet = distributionSetManagement.findDistributionSetById(selectedDistSetId); + /* display the window */ UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(distSet, - entityFactory.generateDistributionSetMetadata(distSet, metadataKey, "") )); + entityFactory.generateDistributionSetMetadata(distSet, metadataKey, ""))); } - + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index aec0029d0..621bf3b8f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.common.filterlayout; +import static org.eclipse.hawkbit.ui.utils.SPUIDefinitions.NO_TAG_BUTTON_ID; + import java.util.ArrayList; import java.util.List; @@ -50,7 +52,7 @@ public abstract class AbstractFilterButtons extends Table { /** * Initialize layout of filter buttons. - * + * * @param filterButtonClickBehaviour * click behaviour of filter buttons. */ @@ -95,16 +97,12 @@ public abstract class AbstractFilterButtons extends Table { container.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, null, true, true); } - @SuppressWarnings("serial") protected void addColumn() { addGeneratedColumn(FILTER_BUTTON_COLUMN, (source, itemId, columnId) -> addGeneratedCell(itemId)); } - /** - * @param itemId - * @return - */ private DragAndDropWrapper addGeneratedCell(final Object itemId) { + final Item item = getItem(itemId); final Long id = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_ID).getValue(); final String name = (String) item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); @@ -116,16 +114,18 @@ public abstract class AbstractFilterButtons extends Table { ? item.getItemProperty(SPUILabelDefinitions.VAR_COLOR).getValue().toString() : DEFAULT_GREEN; final Button typeButton = createFilterButton(id, name, desc, color, itemId); typeButton.addClickListener(event -> filterButtonClickBehaviour.processFilterButtonClick(event)); - if (typeButton.getData().equals(SPUIDefinitions.NO_TAG_BUTTON_ID) && isNoTagSateSelected()) { - filterButtonClickBehaviour.setDefaultClickedButton(typeButton); - } else if (id != null && isClickedByDefault(name)) { + + if ((NO_TAG_BUTTON_ID.equals(typeButton.getData()) && isNoTagStateSelected()) + || (id != null && isClickedByDefault(name))) { + filterButtonClickBehaviour.setDefaultClickedButton(typeButton); } + return createDragAndDropWrapper(typeButton, name, id); } - protected boolean isNoTagSateSelected() { - return Boolean.FALSE; + protected boolean isNoTagStateSelected() { + return false; } private DragAndDropWrapper createDragAndDropWrapper(final Button tagButton, final String name, final Long id) { @@ -195,21 +195,21 @@ public abstract class AbstractFilterButtons extends Table { /** * Id of the buttons table to be used in test cases. - * + * * @return Id of the Button table. */ protected abstract String getButtonsTableId(); /** * create new lazyquery container to display the buttons. - * + * * @return reference of {@link LazyQueryContainer} */ protected abstract LazyQueryContainer createButtonsLazyQueryContainer(); /** * Check if button should be displayed as clicked by default. - * + * * @param buttonCaption * button caption * @return true if button is clicked @@ -218,7 +218,7 @@ public abstract class AbstractFilterButtons extends Table { /** * Get filter button Id. - * + * * @param name * @return */ @@ -226,7 +226,7 @@ public abstract class AbstractFilterButtons extends Table { /** * Get Drop Handler for Filter Buttons. - * + * * @return */ protected abstract DropHandler getFilterButtonDropHandler(); @@ -234,14 +234,14 @@ public abstract class AbstractFilterButtons extends Table { /** * Get prefix Id of Button Wrapper to be used for drag and drop, delete and * test cases. - * + * * @return prefix Id of Button Wrapper */ protected abstract String getButttonWrapperIdPrefix(); /** * Get info to be set for the button wrapper. - * + * * @return button wrapper info. */ protected abstract String getButtonWrapperData(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 8161c2895..9bfb81a27 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -15,9 +15,9 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; +import org.eclipse.hawkbit.ui.decorators.HeaderLayoutDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; -import org.eclipse.hawkbit.ui.decorators.HeaderLayoutDecorator; import org.eclipse.hawkbit.ui.decorators.SPUILabelDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextAreaDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextFieldDecorator; @@ -82,8 +82,6 @@ public final class SPUIComponentProvider { /** * Get HorizontalLayout UI component. * - * @param className - * as Layout * @return HorizontalLayout as UI */ public static HorizontalLayout getHorizontalLayout() { @@ -117,8 +115,7 @@ public final class SPUIComponentProvider { hLayout = layoutDecorator.decorate(hLayout); } catch (final InstantiationException | IllegalAccessException exception) { - LOG.error("Error occured while creating horizontal decorator " + HeaderLayoutDecorator.class, - exception); + LOG.error("Error occured while creating horizontal decorator " + HeaderLayoutDecorator.class, exception); } return hLayout; @@ -139,7 +136,7 @@ public final class SPUIComponentProvider { /** * Get window component. - * + * * @param caption * window caption * @param id @@ -154,7 +151,7 @@ public final class SPUIComponentProvider { /** * Get Label UI component. - * + * * @param caption * set the caption of the textfield * @param style @@ -182,7 +179,7 @@ public final class SPUIComponentProvider { /** * Get Label UI component. * - * + * * @param caption * set the caption of the textArea * @param style @@ -206,7 +203,7 @@ public final class SPUIComponentProvider { /** * Get Label UI component. - * + * * @param caption * caption of the combo box * @param height @@ -252,7 +249,7 @@ public final class SPUIComponentProvider { /** * Get Button - Factory Approach for decoration. - * + * * @param id * as string * @param buttonName @@ -289,7 +286,7 @@ public final class SPUIComponentProvider { /** * Get the style required. - * + * * @return String */ public static String getPinButtonStyle() { @@ -305,7 +302,7 @@ public final class SPUIComponentProvider { /** * Get DistributionSet Info Panel. - * + * * @param distributionSet * as DistributionSet * @param caption @@ -323,7 +320,7 @@ public final class SPUIComponentProvider { /** * Method to CreateName value labels. - * + * * @param label * as string * @param values @@ -356,7 +353,7 @@ public final class SPUIComponentProvider { /** * Create label which represents the {@link BaseEntity#getCreatedBy()} by * user name - * + * * @param i18n * the i18n * @param baseEntity @@ -371,7 +368,7 @@ public final class SPUIComponentProvider { /** * Create label which represents the * {@link BaseEntity#getLastModifiedBy()()} by user name - * + * * @param i18n * the i18n * @param baseEntity @@ -385,7 +382,7 @@ public final class SPUIComponentProvider { /** * Get Bold Text. - * + * * @param text * as String * @return String as bold @@ -396,7 +393,7 @@ public final class SPUIComponentProvider { /** * Get the layout for Target:Controller Attributes. - * + * * @param controllerAttibs * as Map * @return VerticalLayout @@ -407,7 +404,7 @@ public final class SPUIComponentProvider { /** * Get Tabsheet. - * + * * @return SPUITabSheet */ public static TabSheet getDetailsTabSheet() { @@ -416,7 +413,7 @@ public final class SPUIComponentProvider { /** * Layout of tabs in detail tabsheet. - * + * * @return VerticalLayout */ public static VerticalLayout getDetailTabLayout() { @@ -429,7 +426,7 @@ public final class SPUIComponentProvider { /** * Method to create a link. - * + * * @param id * of the link * @param name @@ -465,10 +462,10 @@ public final class SPUIComponentProvider { /** * Generates help/documentation links from within management UI. - * + * * @param uri * to documentation site - * + * * @return generated link */ public static Link getHelpLink(final String uri) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java index 2175dea29..ca58648ac 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java @@ -17,21 +17,22 @@ import com.vaadin.client.renderers.ClickableRenderer.RendererClickHandler; import com.vaadin.shared.ui.Connect; import elemental.json.JsonObject; + /** * A connector for {@link CustomObjectRenderer }. * */ @Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer.class) public class RolloutRendererConnector extends ClickableRendererConnector { - private static final long serialVersionUID = 7734682321931830566L; + private static final long serialVersionUID = 7734682321931830566L; - public org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRenderer getRenderer() { - return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRenderer) super.getRenderer(); - } + @Override + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRenderer) super.getRenderer(); + } - @Override - protected HandlerRegistration addClickHandler( - RendererClickHandler handler) { + @Override + protected HandlerRegistration addClickHandler(final RendererClickHandler handler) { return getRenderer().addClickHandler(handler); - } + } } \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java index 6c751e6a2..7e212ea67 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java @@ -11,52 +11,42 @@ package org.eclipse.hawkbit.ui.customrenderers.client.renderers; import java.io.Serializable; /** - * RendererData class with Name and Status. - * + * RendererData class with name and status. */ - public class RolloutRendererData implements Serializable { - private static final long serialVersionUID = -5018181529953620263L; - private String name; + private static final long serialVersionUID = -5018181529953620263L; - private String status; + private String name; - /** - * Initialize the RendererData. - */ - public RolloutRendererData() { + private String status; - } + /** + * Initialize the RendererData. + * + * @param name + * Name of the Rollout. + * @param status + * Status of Rollout. + */ + public RolloutRendererData(final String name, final String status) { + this.name = name; + this.status = status; + } - /** - * Initialize the RendererData. - * - * @param name - * Name of the Rollout. - * @param status - * Status of Rollout. - */ - public RolloutRendererData(String name, String status) { - super(); - this.name = name; - this.status = status; - } + public String getName() { + return name; + } - public String getName() { - return name; - } + public void setName(final String name) { + this.name = name; + } - public void setName(String name) { - this.name = name; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } + public String getStatus() { + return status; + } + public void setStatus(final String status) { + this.status = status; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java index 29663dd9d..8af3ccfc9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java @@ -16,46 +16,44 @@ import com.vaadin.ui.renderers.ClickableRenderer; import elemental.json.JsonValue; /** - * Renders button with provided CustomObject. - * Used to display button with link. - * + * Renders button with provided CustomObject. Used to display button with link. */ - public class RolloutRenderer extends ClickableRenderer { - private static final long serialVersionUID = -8754180585906263554L; + private static final long serialVersionUID = -8754180585906263554L; - /** - * Creates a new custom object renderer. - */ - public RolloutRenderer() { - super(RolloutRendererData.class, null); - } - - /** - * Initialize custom object renderer with {@link Class} - * - * @param presentationType - * Class - */ + /** + * Creates a new custom object renderer. + */ + public RolloutRenderer() { + super(RolloutRendererData.class, null); + } - public RolloutRenderer(Class presentationType) { - super(presentationType); - } + /** + * Initialize custom object renderer with the given type. + * + * @param presentationType + * Class + */ - /** - * Creates a new custom object renderer and adds the given click listener to it. - * - * @param listener - * the click listener to register - */ - public RolloutRenderer(RendererClickListener listener) { - this(); - addClickListener(listener); - } + public RolloutRenderer(final Class presentationType) { + super(presentationType); + } - @Override - public JsonValue encode(RolloutRendererData resource) { - return super.encode(resource, RolloutRendererData.class); - } + /** + * Creates a new custom object renderer and adds the given click listener to + * it. + * + * @param listener + * the click listener to register + */ + public RolloutRenderer(final RendererClickListener listener) { + this(); + addClickListener(listener); + } + + @Override + public JsonValue encode(final RolloutRendererData resource) { + return super.encode(resource, RolloutRendererData.class); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index 714f1f3a3..da60b83d1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -21,9 +21,6 @@ import com.vaadin.ui.Window; /** * Decorator for Window. - * - * - * */ public final class SPUIWindowDecorator { @@ -36,7 +33,7 @@ public final class SPUIWindowDecorator { /** * Decorates window based on type. - * + * * @param caption * window caption * @param id @@ -48,36 +45,38 @@ public final class SPUIWindowDecorator { public static CommonDialogWindow getWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final String helpLink, final AbstractLayout layout, - final I18N i18n) { - CommonDialogWindow window = null; - if (SPUIDefinitions.CUSTOM_METADATA_WINDOW.equals(type)) { - window = new CustomCommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, layout, i18n); - window.setDraggable(true); - window.setClosable(true); - } else { - window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, layout, i18n); - if (null != id) { - window.setId(id); - } - if (SPUIDefinitions.CONFIRMATION_WINDOW.equals(type)) { - window.setDraggable(false); - window.setClosable(true); - window.addStyleName(SPUIStyleDefinitions.CONFIRMATION_WINDOW_CAPTION); + final I18N i18n) { - } else if (SPUIDefinitions.CREATE_UPDATE_WINDOW.equals(type)) { - window.setDraggable(true); - window.setClosable(true); - } - } - return window; - } + CommonDialogWindow window; + + if (SPUIDefinitions.CUSTOM_METADATA_WINDOW.equals(type)) { + window = new CustomCommonDialogWindow(caption, content, helpLink, saveButtonClickListener, + cancelButtonClickListener, layout, i18n); + window.setDraggable(true); + window.setClosable(true); + } else { + window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, + cancelButtonClickListener, layout, i18n); + if (null != id) { + window.setId(id); + } + if (SPUIDefinitions.CONFIRMATION_WINDOW.equals(type)) { + window.setDraggable(false); + window.setClosable(true); + window.addStyleName(SPUIStyleDefinitions.CONFIRMATION_WINDOW_CAPTION); + + } else if (SPUIDefinitions.CREATE_UPDATE_WINDOW.equals(type)) { + window.setDraggable(true); + window.setClosable(true); + } + } + + return window; + } - /** * Decorates window based on type. - * + * * @param caption * window caption * @param id diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java index 9b819e1b4..fb7285764 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java @@ -117,5 +117,4 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { private void refreshTypeTable() { setContainerDataSource(createButtonsLazyQueryContainer()); } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwMetadataPopupLayout.java index a6542cbd4..3ff0dd476 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwMetadataPopupLayout.java @@ -15,11 +15,9 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; 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.distributions.state.ManageDistUIState; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -27,7 +25,6 @@ import com.vaadin.spring.annotation.ViewScope; /** * Pop up layout to display software module metadata. - * */ @SpringComponent @ViewScope @@ -39,39 +36,35 @@ public class SwMetadataPopupLayout extends AbstractMetadataPopupLayout getMetadataList() { return getSelectedEntity().getMetadata(); } - + /** * delete metadata for SWModule. */ @Override - protected void deleteMetadata(SoftwareModule entity, String key, String value) { - SoftwareModuleMetadata swMetadata = entityFactory.generateSoftwareModuleMetadata(entity, key, value); + protected void deleteMetadata(final SoftwareModule entity, final String key, final String value) { + final SoftwareModuleMetadata swMetadata = entityFactory.generateSoftwareModuleMetadata(entity, key, value); softwareManagement.deleteSoftwareModuleMetadata(entity, key); eventBus.publish(this, new MetadataEvent(MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA, swMetadata)); } - + @Override protected boolean hasCreatePermission() { return permChecker.hasCreateDistributionPermission(); } - + @Override protected boolean hasUpdatePermission() { return permChecker.hasUpdateDistributionPermission(); } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java index 4fd478bda..9fe3ec3f1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java @@ -8,6 +8,11 @@ */ package org.eclipse.hawkbit.ui.distributions.smtype; +import static org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.ADD_SOFTWARE_MODULE_TYPE; +import static org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.UPDATE_SOFTWARE_MODULE_TYPE; +import static org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider.SW_MODULE_TYPE_TABLE_ID; +import static org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions.VAR_NAME; + import java.util.HashMap; import java.util.Map; @@ -19,7 +24,6 @@ import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -35,10 +39,9 @@ import com.vaadin.spring.annotation.ViewScope; /** * Software Module Type filter buttons. - * */ -@SpringComponent @ViewScope +@SpringComponent public class DistSMTypeFilterButtons extends AbstractFilterButtons { private static final long serialVersionUID = 6804534533362387433L; @@ -51,7 +54,7 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { @Override protected String getButtonsTableId() { - return SPUIComponentIdProvider.SW_MODULE_TYPE_TABLE_ID; + return SW_MODULE_TYPE_TABLE_ID; } @Override @@ -60,7 +63,7 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { final BeanQueryFactory typeQF = new BeanQueryFactory<>( SoftwareModuleTypeBeanQuery.class); typeQF.setQueryConfiguration(queryConfig); - return new LazyQueryContainer(new LazyQueryDefinition(true, 20, SPUILabelDefinitions.VAR_NAME), typeQF); + return new LazyQueryContainer(new LazyQueryDefinition(true, 20, VAR_NAME), typeQF); } @Override @@ -70,8 +73,8 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { @Override protected boolean isClickedByDefault(final String typeName) { - return manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() - && manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().get().getName().equals(typeName); + return manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() && manageDistUIState + .getSoftwareModuleFilters().getSoftwareModuleType().get().getName().equals(typeName); } @Override @@ -104,13 +107,16 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleTypeEvent event) { - if (event.getSoftwareModuleTypeEnum() == SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.ADD_SOFTWARE_MODULE_TYPE - || event.getSoftwareModuleTypeEnum() == SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.UPDATE_SOFTWARE_MODULE_TYPE - && event.getSoftwareModuleType() != null) { + if (isCreateOrUpdate(event) && event.getSoftwareModuleType() != null) { refreshTypeTable(); } } + private boolean isCreateOrUpdate(final SoftwareModuleTypeEvent event) { + return event.getSoftwareModuleTypeEnum() == ADD_SOFTWARE_MODULE_TYPE + || event.getSoftwareModuleTypeEnum() == UPDATE_SOFTWARE_MODULE_TYPE; + } + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SaveActionWindowEvent event) { if (event == SaveActionWindowEvent.SAVED_DELETE_SW_MODULE_TYPES) { @@ -121,6 +127,4 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { private void refreshTypeTable() { setContainerDataSource(createButtonsLazyQueryContainer()); } - - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java index 45ad7ac89..caac53147 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java @@ -8,8 +8,9 @@ */ package org.eclipse.hawkbit.ui.distributions.state; +import static java.util.Collections.emptySet; + import java.io.Serializable; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -49,7 +50,7 @@ public class ManageDistUIState implements ManagmentEntityState selectedSoftwareModules = Collections.emptySet(); + private Set selectedSoftwareModules = emptySet(); private Set selectedDeleteDistSetTypes = new HashSet<>(); @@ -57,23 +58,23 @@ public class ManageDistUIState implements ManagmentEntityState deleteSofwareModulesList = new HashMap<>(); - private boolean swModuleTableMaximized = Boolean.FALSE; + private boolean swModuleTableMaximized; - private boolean dsTableMaximized = Boolean.FALSE; + private boolean dsTableMaximized; private final Map assignedSoftwareModuleDetails = new HashMap<>(); private final Map>> consolidatedDistSoftwarewList = new HashMap<>(); - private boolean noDataAvilableSwModule = Boolean.FALSE; + private boolean noDataAvilableSwModule; - private boolean noDataAvailableDist = Boolean.FALSE; + private boolean noDataAvailableDist; /** * @return the manageDistFilters @@ -117,6 +118,7 @@ public class ManageDistUIState implements ManagmentEntityState values) { selectedDistributions = values; } @@ -223,7 +225,7 @@ public class ManageDistUIState implements ManagmentEntityState discard(), null, mainLayout, i18n); return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 9544776a6..f56cd0ae7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -118,12 +118,10 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat /** * RESET. - * - * @param event */ @Override - public void discard(final ClickEvent event) { - super.discard(event); + public void discard() { + super.discard(); resetDistTagValues(); } @@ -144,7 +142,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat /** * Select tag & set tag name & tag desc values corresponding to selected * tag. - * + * * @param distTagSelected * as the selected tag from combo */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java index deaace968..8b5ee85cf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java @@ -121,7 +121,7 @@ public class DistributionTagButtons extends AbstractFilterButtons { } @Override - protected boolean isNoTagSateSelected() { + protected boolean isNoTagStateSelected() { return managementUIState.getDistributionTableFilters().isNoTagSelected(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java index 83082be01..14b096fcf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java @@ -391,22 +391,22 @@ public class BulkUploadHandler extends CustomComponent eventBus.publish(this, new BulkUploadValidationMessageEvent(errorMessage.toString())); } } - } - private void addNewTarget(final String controllerId, final String name) { - final String newControllerId = HawkbitCommonUtil.trimAndNullIfEmpty(controllerId); - if (mandatoryCheck(newControllerId) && duplicateCheck(newControllerId)) { - final String newName = HawkbitCommonUtil.trimAndNullIfEmpty(name); - final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); + private void addNewTarget(final String controllerId, final String name) { + final String newControllerId = HawkbitCommonUtil.trimAndNullIfEmpty(controllerId); + if (mandatoryCheck(newControllerId) && duplicateCheck(newControllerId)) { + final String newName = HawkbitCommonUtil.trimAndNullIfEmpty(name); + final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); + + /* create new target entity */ + final Target newTarget = entityFactory.generateTarget(newControllerId); + setTargetValues(newTarget, newName, newDesc); + targetManagement.createTarget(newTarget); + managementUIState.getTargetTableFilters().getBulkUpload().getTargetsCreated().add(newControllerId); + successfullTargetCount++; + } - /* create new target entity */ - final Target newTarget = entityFactory.generateTarget(newControllerId); - setTargetValues(newTarget, newName, newDesc); - targetManagement.createTarget(newTarget); - managementUIState.getTargetTableFilters().getBulkUpload().getTargetsCreated().add(newControllerId); - successfullTargetCount++; } - } private static void setTargetValues(final Target target, final String name, final String description) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index e9d3f6e1e..c1287e978 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -131,7 +131,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } @Override - protected boolean isNoTagSateSelected() { + protected boolean isNoTagStateSelected() { return managementUIState.getTargetTableFilters().isNoTagSelected(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java index defcc82c0..4016d5fd7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java @@ -37,6 +37,7 @@ import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.UIScope; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; @@ -52,14 +53,11 @@ import com.vaadin.ui.themes.ValoTheme; * A responsive menu component providing user information and the controls for * primary navigation between the views. */ -@SpringComponent @UIScope +@SpringComponent public final class DashboardMenu extends CustomComponent { - private static final String STYLE_VISIBLE = "valo-menu-visible"; - public static final String ID = "dashboard-menu"; - public static final String REPORTS_BADGE_ID = "dashboard-menu-reports-badge"; - public static final String NOTIFICATIONS_BADGE_ID = "dashboard-menu-notifications-badge"; + private static final String ID = "dashboard-menu"; @Autowired private I18N i18n; @@ -208,13 +206,7 @@ public final class DashboardMenu extends CustomComponent { } private Component buildToggleButton() { - final Button valoMenuToggleButton = new Button("Menu", (ClickListener) event -> { - if (getCompositionRoot().getStyleName().contains(STYLE_VISIBLE)) { - getCompositionRoot().removeStyleName(STYLE_VISIBLE); - } else { - getCompositionRoot().addStyleName(STYLE_VISIBLE); - } - }); + final Button valoMenuToggleButton = new Button("Menu", new MenuToggleClickListenerMyClickListener()); valoMenuToggleButton.setIcon(FontAwesome.LIST); valoMenuToggleButton.addStyleName("valo-menu-toggle"); valoMenuToggleButton.addStyleName(ValoTheme.BUTTON_BORDERLESS); @@ -244,7 +236,7 @@ public final class DashboardMenu extends CustomComponent { /** * Returns all views which are currently accessible by the current logged in * user. - * + * * @return a list of all views which are currently visible and accessible * for the current logged in user */ @@ -264,7 +256,7 @@ public final class DashboardMenu extends CustomComponent { /** * Returns the view name for the start page after login. - * + * * @return the initialViewName of the start page */ public String getInitialViewName() { @@ -273,7 +265,7 @@ public final class DashboardMenu extends CustomComponent { /** * Is a View available. - * + * * @return the accessibleViewsEmpty no rights for any view a * view is available */ @@ -284,7 +276,7 @@ public final class DashboardMenu extends CustomComponent { /** * notifies the dashboard that the view has been changed and the button * needs to be re-styled. - * + * * @param event * the post view change event */ @@ -294,7 +286,7 @@ public final class DashboardMenu extends CustomComponent { /** * Returns the dashboard view type by a given view name. - * + * * @param viewName * the name of the view to retrieve * @return the dashboard view for a given viewname or {@code null} if view @@ -313,7 +305,7 @@ public final class DashboardMenu extends CustomComponent { /** * Is the given view accessible. - * + * * @param viewName * the view name * @return = denied, = accessible @@ -329,15 +321,28 @@ public final class DashboardMenu extends CustomComponent { return accessDeined; } + private class MenuToggleClickListenerMyClickListener implements ClickListener { + + private static final long serialVersionUID = 1L; + private static final String STYLE_VISIBLE = "valo-menu-visible"; + + @Override + public void buttonClick(final ClickEvent event) { + if (getCompositionRoot().getStyleName().contains(STYLE_VISIBLE)) { + getCompositionRoot().removeStyleName(STYLE_VISIBLE); + } else { + getCompositionRoot().addStyleName(STYLE_VISIBLE); + } + } + } + /** * An menu item button wrapper for the dashboard menu item. - * - * - * - * */ public static final class ValoMenuItemButton extends Button { + private static final long serialVersionUID = 1L; + private static final String STYLE_SELECTED = "selected"; private final DashboardMenuItem view; @@ -345,7 +350,7 @@ public final class DashboardMenu extends CustomComponent { /** * creates a new button in case of pressed switches to the given * {@code view}. - * + * * @param view * the view to switch to in case the button is pressed */ @@ -358,12 +363,11 @@ public final class DashboardMenu extends CustomComponent { /* Avoid double click */ setDisableOnClick(true); addClickListener(event -> event.getComponent().getUI().getNavigator().navigateTo(view.getViewName())); - } /** * notifies the button to change his style. - * + * * @param event * the post view change event */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java index 4d46945ca..3d167d4cb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java @@ -20,6 +20,7 @@ import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; * */ public final class DistributionBarHelper { + private static final String HTML_DIV_END = ""; private static final int PARENT_SIZE_IN_PCT = 100; private static final double MINIMUM_PART_SIZE = 10; private static final String DISTRIBUTION_BAR_PART_MAIN_STYLE = GwtDistributionBar.CLASSNAME + "-part"; @@ -38,23 +39,23 @@ public final class DistributionBarHelper { * * @return string of format "status1:count,status2:count" */ - public static String getDistributionBarAsHTMLString(Map statusTotalCountMap) { - StringBuilder htmlString = new StringBuilder(); - Map statusMapWithNonZeroValues = getStatusMapWithNonZeroValues(statusTotalCountMap); - Long totalValue = getTotalSizes(statusTotalCountMap); + public static String getDistributionBarAsHTMLString(final Map statusTotalCountMap) { + final StringBuilder htmlString = new StringBuilder(); + final Map statusMapWithNonZeroValues = getStatusMapWithNonZeroValues(statusTotalCountMap); + final Long totalValue = getTotalSizes(statusTotalCountMap); if (statusMapWithNonZeroValues.size() <= 0) { return getUnintialisedBar(); } int partIndex = 1; htmlString.append(getParentDivStart()); - for (Map.Entry entry : statusMapWithNonZeroValues.entrySet()) { + for (final Map.Entry entry : statusMapWithNonZeroValues.entrySet()) { if (entry.getValue() > 0) { htmlString.append(getPart(partIndex, entry.getKey(), entry.getValue(), totalValue, statusMapWithNonZeroValues.size())); partIndex++; } } - htmlString.append(getParentDivEnd()); + htmlString.append(HTML_DIV_END); return htmlString.toString(); } @@ -65,7 +66,7 @@ public final class DistributionBarHelper { * map with status and count * @return map with non zero values */ - public static Map getStatusMapWithNonZeroValues(Map statusTotalCountMap) { + public static Map getStatusMapWithNonZeroValues(final Map statusTotalCountMap) { return statusTotalCountMap.entrySet().stream().filter(p -> p.getValue() > 0) .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); } @@ -77,19 +78,20 @@ public final class DistributionBarHelper { * map with status and count details * @return tool tip */ - public static String getTooltip(Map statusCountMap) { - Map nonZeroStatusCountMap = DistributionBarHelper.getStatusMapWithNonZeroValues(statusCountMap); - StringBuilder tooltip = new StringBuilder(); - for (Entry entry : nonZeroStatusCountMap.entrySet()) { + public static String getTooltip(final Map statusCountMap) { + final Map nonZeroStatusCountMap = DistributionBarHelper + .getStatusMapWithNonZeroValues(statusCountMap); + final StringBuilder tooltip = new StringBuilder(); + for (final Entry entry : nonZeroStatusCountMap.entrySet()) { tooltip.append(entry.getKey().toString().toLowerCase()).append(" : ").append(entry.getValue()) .append("
    "); } return tooltip.toString(); } - private static String getPartStyle(int partIndex, int noOfParts, String customStyle) { - StringBuilder mainStyle = new StringBuilder(); - StringBuilder styleName = new StringBuilder(GwtDistributionBar.CLASSNAME); + private static String getPartStyle(final int partIndex, final int noOfParts, final String customStyle) { + final StringBuilder mainStyle = new StringBuilder(); + final StringBuilder styleName = new StringBuilder(GwtDistributionBar.CLASSNAME); if (noOfParts == 1) { styleName.append("-only"); } else if (partIndex == 1) { @@ -108,15 +110,16 @@ public final class DistributionBarHelper { return mainStyle.toString(); } - private static String getPartWidth(Long value, Long totalValue, int noOfParts) { + private static String getPartWidth(final Long value, final Long totalValue, final int noOfParts) { final double minTotalSize = MINIMUM_PART_SIZE * noOfParts; final double availableSize = PARENT_SIZE_IN_PCT - minTotalSize; - double val = MINIMUM_PART_SIZE + (double) value / totalValue * availableSize; + final double val = MINIMUM_PART_SIZE + (double) value / totalValue * availableSize; return String.format("%.3f", val) + "%"; } - private static String getPart(int partIndex, Status status, Long value, Long totalValue, int noOfParts) { - String partValue = status.toString().toLowerCase(); + private static String getPart(final int partIndex, final Status status, final Long value, final Long totalValue, + final int noOfParts) { + final String partValue = status.toString().toLowerCase(); return "
    " + value + "
    "; @@ -127,9 +130,9 @@ public final class DistributionBarHelper { + DISTRIBUTION_BAR_PART_VALUE_CLASSNAME + "\">uninitialized"; } - private static Long getTotalSizes(Map statusTotalCountMap) { + private static Long getTotalSizes(final Map statusTotalCountMap) { Long total = 0L; - for (Long value : statusTotalCountMap.values()) { + for (final Long value : statusTotalCountMap.values()) { total = total + value; } return total; @@ -139,8 +142,4 @@ public final class DistributionBarHelper { return "
    "; } - - private static String getParentDivEnd() { - return "
    "; - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 8a7d11df1..6a20bf9f0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -152,7 +152,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { /** * Get the window. - * + * * @param rolloutId * the rollout id * @return the window @@ -499,14 +499,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return errorThresoldPercent; } - private boolean validateFields() { - if (!noOfGroups.isValid() || !errorThreshold.isValid() || !triggerThreshold.isValid()) { - uiNotification.displayValidationError(i18n.get("message.correct.invalid.value")); - return false; - } - return true; - } - private boolean duplicateCheck() { if (rolloutManagement.findRolloutByName(getRolloutName()) != null) { uiNotification.displayValidationError( @@ -694,9 +686,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } /** - * + * * Populate rollout details. - * + * * @param rolloutId * rollout id */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 0d78763be..19df8b139 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -52,7 +52,7 @@ import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; import com.vaadin.ui.renderers.HtmlRenderer; /** - * + * * Rollout group list grid component. * */ @@ -86,10 +86,10 @@ public class RolloutGroupListGrid extends AbstractGrid { } /** - * + * * Handles the RolloutGroupChangeEvent to refresh the item in the grid. - * - * + * + * * @param rolloutGroupChangeEvent * the event which contains the rollout group which has been * change @@ -242,6 +242,12 @@ public class RolloutGroupListGrid extends AbstractGrid { } } + private void onClickOfRolloutGroupName(final RendererClickEvent event) { + rolloutUIState + .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); + } + @Override protected void setHiddenColumns() { final List columnsToBeHidden = new ArrayList<>(); @@ -261,12 +267,6 @@ public class RolloutGroupListGrid extends AbstractGrid { return this::getDescription; } - private void onClickOfRolloutGroupName(final RendererClickEvent event) { - rolloutUIState - .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); - } - private void createRolloutGroupStatusToFontMap() { statusIconMap.put(RolloutGroupStatus.FINISHED, new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); @@ -311,7 +311,7 @@ public class RolloutGroupListGrid extends AbstractGrid { } /** - * + * * Converts {@link TotalTargetCountStatus} into formatted string with status * and count details. * @@ -346,7 +346,7 @@ public class RolloutGroupListGrid extends AbstractGrid { } /** - * + * * Converts {@link RolloutGroupStatus} to string. * */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java index 329318b0f..584f28931 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java @@ -161,13 +161,13 @@ public class AuthenticationConfigurationView extends BaseConfigurationView final CheckBox checkBox = (CheckBox) event.getProperty(); AuthenticationConfigurationItem configurationItem; - if (checkBox == gatewaySecTokenCheckBox) { + if (gatewaySecTokenCheckBox.equals(checkBox)) { configurationItem = gatewaySecurityTokenAuthenticationConfigurationItem; - } else if (checkBox == targetSecTokenCheckBox) { + } else if (targetSecTokenCheckBox.equals(checkBox)) { configurationItem = targetSecurityTokenAuthenticationConfigurationItem; - } else if (checkBox == certificateAuthCheckbox) { + } else if (certificateAuthCheckbox.equals(checkBox)) { configurationItem = certificateAuthenticationConfigurationItem; - } else if (checkBox == downloadAnonymousCheckBox) { + } else if (downloadAnonymousCheckBox.equals(checkBox)) { configurationItem = anonymousDownloadAuthenticationConfigurationItem; } else { return; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index b5ac26d11..18ffda663 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -441,7 +441,7 @@ public final class HawkbitCommonUtil { */ public static float findRequiredExtraHeight(final float newBrowserHeight) { return newBrowserHeight > SPUIDefinitions.REQ_MIN_BROWSER_HEIGHT - ? newBrowserHeight - SPUIDefinitions.REQ_MIN_BROWSER_HEIGHT : 0; + ? (newBrowserHeight - SPUIDefinitions.REQ_MIN_BROWSER_HEIGHT) : 0; } /** @@ -453,7 +453,7 @@ public final class HawkbitCommonUtil { */ public static float findRequiredSwModuleExtraHeight(final float newBrowserHeight) { return newBrowserHeight > SPUIDefinitions.REQ_MIN_UPLOAD_BROWSER_HEIGHT - ? newBrowserHeight - SPUIDefinitions.REQ_MIN_UPLOAD_BROWSER_HEIGHT : 0; + ? (newBrowserHeight - SPUIDefinitions.REQ_MIN_UPLOAD_BROWSER_HEIGHT) : 0; } /** @@ -465,7 +465,7 @@ public final class HawkbitCommonUtil { */ public static float findRequiredSwModuleExtraWidth(final float newBrowserWidth) { return newBrowserWidth > SPUIDefinitions.REQ_MIN_UPLOAD_BROWSER_WIDTH - ? newBrowserWidth - SPUIDefinitions.REQ_MIN_UPLOAD_BROWSER_WIDTH : 0; + ? (newBrowserWidth - SPUIDefinitions.REQ_MIN_UPLOAD_BROWSER_WIDTH) : 0; } /** @@ -528,7 +528,7 @@ public final class HawkbitCommonUtil { */ public static float findExtraWidth(final float newBrowserWidth) { return newBrowserWidth > SPUIDefinitions.REQ_MIN_BROWSER_WIDTH - ? newBrowserWidth - SPUIDefinitions.REQ_MIN_BROWSER_WIDTH : 0; + ? (newBrowserWidth - SPUIDefinitions.REQ_MIN_BROWSER_WIDTH) : 0; } /** @@ -570,7 +570,7 @@ public final class HawkbitCommonUtil { final float requiredExtraWidth = findExtraWidth(newBrowserWidth); float expectedDistWidth = minTableWidth; if (requiredExtraWidth > 0) { - expectedDistWidth = expectedDistWidth + Math.round(requiredExtraWidth * 0.5f); + expectedDistWidth = expectedDistWidth + Math.round(requiredExtraWidth * 0.5F); } return expectedDistWidth; } @@ -741,6 +741,8 @@ public final class HawkbitCommonUtil { * base software module type * @param description * base software module description + * @param entityFactory + * the entity factory to create new entity instances * @return BaseSoftwareModule new base software module */ public static SoftwareModule addNewBaseSoftware(final EntityFactory entityFactory, final String bsname, diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index f035c4995..c4091bde2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -273,10 +273,6 @@ public final class SPUIDefinitions { * New Target save icon id. */ public static final String NEW_TARGET_SAVE = "target.add.save"; - /** - * New Target discard icon id. - */ - // public static final String NEW_TARGET_DISCARD = "target.add.discard"; /** * New Target add icon id. */ @@ -1017,12 +1013,12 @@ public final class SPUIDefinitions { * Rollout action column property. */ public static final String ROLLOUT_ACTION = "rollout-action"; - + /** * DistributionSet Metadata tab Id */ public static final String DISTRIBUTIONSET_METADATA_TAB_ID = "distSet.metadata.tab.id"; - + /** * SoftwareModule Metadata tab Id */ @@ -1031,7 +1027,7 @@ public final class SPUIDefinitions { /*** * Custom window for metadata. */ - public static final String CUSTOM_METADATA_WINDOW = "custom.metadata.window"; + public static final String CUSTOM_METADATA_WINDOW = "custom.metadata.window"; /** * /** Constructor. From aa5e4d0601394d470a004db6356d39589a02c677 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 15 Aug 2016 17:57:52 +0200 Subject: [PATCH 03/27] - Fix ds assignment result - Fix drag and drop to assignment Signed-off-by: SirWayne --- .../DistributionSetAssignmentResult.java | 5 ++++ .../jpa/DistributionSetManagementTest.java | 23 +++++++++++++++++++ .../management/targettable/TargetTable.java | 6 +++++ .../targettag/TargetTagFilterButtons.java | 9 +++++++- .../src/main/resources/messages.properties | 1 + .../src/main/resources/messages_de.properties | 1 + .../src/main/resources/messages_en.properties | 1 + 7 files changed, 45 insertions(+), 1 deletion(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index f21763883..704bb38e9 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -13,6 +13,7 @@ import java.util.List; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.Target; +import org.springframework.util.CollectionUtils; /** * A bean which holds a complex result of an service operation to combine the @@ -61,6 +62,10 @@ public class DistributionSetAssignmentResult extends AssignmentResult { @Override public List getAssignedEntity() { + if (CollectionUtils.isEmpty(assignedTargets)) { + return Collections.emptyList(); + } + return targetManagement.findTargetByControllerID(assignedTargets); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index b7da2ff06..14f1838b0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -16,6 +16,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedException; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; @@ -818,6 +819,28 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { .isEqualTo(2); } + @Test + @Description("Test different assignment results, after assign a ds") + public void testAlreadyAssignedTargetsToDs() { + DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3"); + + // create assigned DS + dsToTargetAssigned = distributionSetManagement.findDistributionSetByNameAndVersion(dsToTargetAssigned.getName(), + dsToTargetAssigned.getVersion()); + final Target target = new JpaTarget("4712"); + final Target savedTarget = targetManagement.createTarget(target); + final List toAssign = new ArrayList<>(); + toAssign.add(savedTarget); + DistributionSetAssignmentResult assignmentResult = deploymentManagement + .assignDistributionSet(dsToTargetAssigned, toAssign); + assertThat(assignmentResult.getAssignedEntity()).hasSize(1); + + assignmentResult = deploymentManagement.assignDistributionSet(dsToTargetAssigned, toAssign); + assertThat(assignmentResult.getAssignedEntity()).hasSize(0); + + assertThat(distributionSetRepository.findAll()).hasSize(1); + } + private Rollout createRolloutByVariables(final String rolloutName, final String rolloutDescription, final int groupSize, final String filterQuery, final DistributionSet distributionSet, final String successCondition, final String errorCondition) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 4e43ea39b..87ce33e39 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -558,6 +558,12 @@ public class TargetTable extends AbstractTable { } final String targTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); + if (targetList.isEmpty()) { + final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + notification.displayValidationError(actionDidNotWork); + return; + } + final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index e9d3f6e1e..7ecea2f9c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -158,7 +158,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { final TableTransferable tbl = (TableTransferable) event.getTransferable(); final Table source = tbl.getSourceComponent(); if (source.getId().equals(SPUIComponentIdProvider.TARGET_TABLE_ID)) { - processTargetDrop(event); + UI.getCurrent().access(() -> processTargetDrop(event)); } } } @@ -216,11 +216,18 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { private void processTargetDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); + @SuppressWarnings("unchecked") final AbstractTable targetTable = (AbstractTable) transferable .getSourceComponent(); final Set targetSelected = targetTable.getDeletedEntityByTransferable(transferable); + if (targetSelected.isEmpty()) { + final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + notification.displayValidationError(actionDidNotWork); + return; + } + final Set targetList = targetSelected.stream().map(t -> t.getControllerId()) .collect(Collectors.toSet()); diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index bb399ddf1..6a68eeff8 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -287,6 +287,7 @@ message.forcequit.action.failed = Force Quitting the action is not possible ! message.forcequit.action.confirm = Attention!\nForce quit should only be used when the assignment action is not working properly.\nForce quitting an action has no effect on the connected target. It is just resetting \nthe data stored on the SP update server. \nAre you absolutely sure that you want to force quit this action? message.distribution.no.update = distribution {0} set is already assigned to targets and cannot be changed message.action.not.allowed = Action not allowed +message.action.did.not.work = Action did not work. Please try again. message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index fa62091fd..e46be6b6e 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -284,6 +284,7 @@ message.force.action.confirm = Are you sure that you want to force this action? message.force.action.success = Action forced successfully ! message.distribution.no.update = distribution {0} set is already assigned to targets and cannot be changed message.action.not.allowed = Action not allowed +message.action.did.not.work = Action did not work. Please try again. message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 65e63c228..4328b83f8 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -282,6 +282,7 @@ message.force.action.confirm = Are you sure that you want to force this action? message.force.action.success = Action forced successfully ! message.distribution.no.update = distribution {0} set is already assigned to targets and cannot be changed message.action.not.allowed = Action not allowed +message.action.did.not.work = Action did not work. Please try again. message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name From a9e15041d82c24372cd88f4b3d88b8d40bbf7dd9 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Mon, 15 Aug 2016 13:32:57 +0200 Subject: [PATCH 04/27] Minor code improvements Signed-off-by: Dominic Schabel --- .../hawkbit/repository/FieldNameProvider.java | 7 +- .../model/EntityPropertyChangeListener.java | 4 +- .../artifacts/details/ArtifactBeanQuery.java | 8 +- .../smtable/BaseSwModuleBeanQuery.java | 4 +- .../common/AbstractMetadataPopupLayout.java | 4 +- .../components/SPTargetAttributesLayout.java | 12 +- .../client/renderers/RolloutRendererData.java | 7 + .../dstable/ManageDistBeanQuery.java | 4 +- .../smtable/SwModuleBeanQuery.java | 4 +- .../CustomTargetBeanQuery.java | 34 +- .../TargetFilterBeanQuery.java | 4 +- .../dstable/DistributionBeanQuery.java | 2 +- .../management/footer/CountMessageLabel.java | 21 +- .../targettable/TargetBeanQuery.java | 8 +- .../management/targettable/TargetTable.java | 93 ++--- .../ui/rollout/rollout/RolloutBeanQuery.java | 15 +- .../ui/rollout/rollout/RolloutListGrid.java | 36 +- .../rolloutgroup/RolloutGroupBeanQuery.java | 8 +- .../rolloutgroup/RolloutGroupListGrid.java | 30 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 348 ++++-------------- 20 files changed, 209 insertions(+), 444 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java index 841f6d7e6..d8fd4281c 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldNameProvider.java @@ -17,7 +17,9 @@ import java.util.Map; * which is used as string representation of the field, e.g. for sorting the * fields over REST. */ +@FunctionalInterface public interface FieldNameProvider { + /** * Separator for the sub attributes */ @@ -56,7 +58,6 @@ public interface FieldNameProvider { } /** - * * @return all sub entities attributes. */ default List getSubEntityAttributes() { @@ -64,7 +65,7 @@ public interface FieldNameProvider { } /** - * the database column for the key + * The database column for the key * * @return key fieldname */ @@ -73,7 +74,7 @@ public interface FieldNameProvider { } /** - * the database column for the value + * The database column for the value * * @return key fieldname */ diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java index 6b1385440..53b3dca25 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java @@ -22,7 +22,6 @@ import org.eclipse.hawkbit.repository.jpa.model.helper.EventBusHolder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.descriptors.DescriptorEventAdapter; import org.eclipse.persistence.internal.sessions.ObjectChangeSet; @@ -46,7 +45,6 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { afterCommit.afterCommit(() -> eventBus.post(new ActionCreatedEvent(action))); } } - } @Override @@ -63,7 +61,7 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { } } - private Map getChangeSet(final DescriptorEvent event) { + private Map getChangeSet(final DescriptorEvent event) { final ObjectChangeSet changeSet = ((UpdateObjectQuery) event.getQuery()).getObjectChangeSet(); return changeSet.getChanges().stream().filter(record -> record instanceof DirectToFieldChangeRecord) .map(record -> (DirectToFieldChangeRecord) record) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java index 4ba722284..faf43b4ca 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.artifacts.details; +import static org.apache.commons.lang3.ArrayUtils.isEmpty; + import java.util.List; import java.util.Map; @@ -39,7 +41,7 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { /** * Parametric Constructor. - * + * * @param definition * as Def * @param queryConfig @@ -53,11 +55,11 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { final Object[] sortIds, final boolean[] sortStates) { super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { baseSwModuleId = (Long) queryConfig.get(SPUIDefinitions.BY_BASE_SOFTWARE_MODULE); } - if (HawkbitCommonUtil.checkBolArray(sortStates)) { + if (isEmpty(sortStates)) { // Initalize Sor sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); // Add sort. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java index 29bea30eb..103481f89 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java @@ -43,7 +43,7 @@ public class BaseSwModuleBeanQuery extends AbstractBeanQuery queryConfig, final Object[] sortIds, final boolean[] sortStates) { super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { type = (SoftwareModuleType) queryConfig.get(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE); searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); if (!Strings.isNullOrEmpty(searchText)) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index ff1cc3db1..b9d48d321 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -407,9 +407,9 @@ public abstract class AbstractMetadataPopupLayout controllerAttibs) { targetAttributesLayout = new VerticalLayout(); @@ -44,7 +44,7 @@ public class SPTargetAttributesLayout { /** * Custom Decorate. - * + * * @param controllerAttibs */ private void decorate(final Map controllerAttibs) { @@ -52,7 +52,7 @@ public class SPTargetAttributesLayout { final Label title = new Label(i18n.get("label.target.controller.attrs"), ContentMode.HTML); title.addStyleName(SPUIDefinitions.TEXT_STYLE); targetAttributesLayout.addComponent(title); - if (HawkbitCommonUtil.mapCheckStrings(controllerAttibs)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(controllerAttibs)) { for (final Map.Entry entry : controllerAttibs.entrySet()) { targetAttributesLayout.addComponent( SPUIComponentProvider.createNameValueLabel(entry.getKey() + ": ", entry.getValue())); @@ -62,7 +62,7 @@ public class SPTargetAttributesLayout { /** * GET Target Attributes Layout. - * + * * @return VerticalLayout as UI */ public VerticalLayout getTargetAttributesLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java index 7e212ea67..e72f81779 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java @@ -21,6 +21,13 @@ public class RolloutRendererData implements Serializable { private String status; + /** + * Initialize the RendererData empty. + */ + public RolloutRendererData() { + // Needed by Vaadin for compiling the widget set. + } + /** * Initialize the RendererData. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java index a262f0d20..391d05048 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java @@ -50,7 +50,7 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { private DistributionSetType distributionSetType = null; /** - * + * * @param definition * @param queryConfig * @param sortPropertyIds @@ -60,7 +60,7 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { final Object[] sortPropertyIds, final boolean[] sortStates) { super(definition, queryConfig, sortPropertyIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); if (!Strings.isNullOrEmpty(searchText)) { searchText = String.format("%%%s%%", searchText); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java index 16636e64b..7222b1012 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java @@ -42,7 +42,7 @@ public class SwModuleBeanQuery extends AbstractBeanQuery /** * Parametric Constructor. - * + * * @param definition * as Def * @param queryConfig @@ -55,7 +55,7 @@ public class SwModuleBeanQuery extends AbstractBeanQuery public SwModuleBeanQuery(final QueryDefinition definition, final Map queryConfig, final Object[] sortIds, final boolean[] sortStates) { super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { type = (SoftwareModuleType) queryConfig.get(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE); searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); if (!Strings.isNullOrEmpty(searchText)) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java index 35f88f5a1..17eafc47a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.filtermanagement; +import static org.apache.commons.lang3.ArrayUtils.isEmpty; + import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -47,7 +49,7 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { /** * Parametric Constructor. - * + * * @param definition * as Def * @param queryConfig @@ -61,10 +63,10 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { final Object[] sortIds, final boolean[] sortStates) { super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { filterQuery = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_QUERY); } - if (HawkbitCommonUtil.checkBolArray(sortStates)) { + if (isEmpty(sortStates)) { // Initalize Sor sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); // Add sort. @@ -74,25 +76,12 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { } } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#constructBean() - */ @Override protected ProxyTarget constructBean() { return new ProxyTarget(); } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int, - * int) - */ @Override protected List loadBeans(final int startIndex, final int count) { Slice targetBeans; @@ -131,23 +120,11 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { return proxyTargetBeans; } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#saveBeans(java - * .util.List, java.util.List, java.util.List) - */ @Override protected void saveBeans(final List arg0, final List arg1, final List arg2) { // CRUD operations on Target will be done through repository methods } - /* - * (non-Javadoc) - * - * @see org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#size() - */ @Override public int size() { long size = 0; @@ -184,5 +161,4 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { } return i18N; } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java index 4a2d6da6c..9231b1658 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java @@ -44,7 +44,7 @@ public class TargetFilterBeanQuery extends AbstractBeanQuery private transient TargetFilterQueryManagement targetFilterQueryManagement; /** - * + * * @param definition * @param queryConfig * @param sortPropertyIds @@ -53,7 +53,7 @@ public class TargetFilterBeanQuery extends AbstractBeanQuery public TargetFilterBeanQuery(final QueryDefinition definition, final Map queryConfig, final Object[] sortPropertyIds, final boolean[] sortStates) { super(definition, queryConfig, sortPropertyIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); if (!Strings.isNullOrEmpty(searchText)) { searchText = String.format("%%%s%%", searchText); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java index 63ed91250..82a73df72 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java @@ -65,7 +65,7 @@ public class DistributionBeanQuery extends AbstractBeanQuery final Object[] sortPropertyIds, final boolean[] sortStates) { super(definition, queryConfig, sortPropertyIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { distributionTags = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java index fccee7cb5..b5282207a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java @@ -34,6 +34,7 @@ import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; +import com.google.common.base.Strings; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; @@ -43,7 +44,7 @@ import com.vaadin.ui.Label; /** * Count message label which display current filter details and details on * pinning. - * + * * */ @SpringComponent @@ -82,7 +83,7 @@ public class CountMessageLabel extends Label { /** * Event Listener to show the message count. - * + * * @param event */ @EventBusListenerMethod(scope = EventScope.SESSION) @@ -104,7 +105,7 @@ public class CountMessageLabel extends Label { /** * Event Listener for Pinning Distribution. - * + * * @param event */ @EventBusListenerMethod(scope = EventScope.SESSION) @@ -119,7 +120,7 @@ public class CountMessageLabel extends Label { } /** - * + * */ private void applyStyle() { /* Create label for Targets count message displaying below the table */ @@ -220,7 +221,7 @@ public class CountMessageLabel extends Label { /** * Get Status Message. - * + * * @param status * as status * @return String as msg. @@ -231,7 +232,7 @@ public class CountMessageLabel extends Label { /** * Get Tags Message. - * + * * @param noTargetTagSelected * @param tags * as tags @@ -244,18 +245,18 @@ public class CountMessageLabel extends Label { /** * Get Search Text Message. - * + * * @param searchTxt * as search text * @return String as msg. */ private static String getSerachMsg(final String searchTxt, final String param) { - return HawkbitCommonUtil.checkValidString(searchTxt) ? param : HawkbitCommonUtil.SP_STRING_SPACE; + return Strings.isNullOrEmpty(searchTxt) ? HawkbitCommonUtil.SP_STRING_SPACE : param; } /** * Get Dist set Message. - * + * * @param distId * as serach * @return String as msg. @@ -266,7 +267,7 @@ public class CountMessageLabel extends Label { /** * Get the custom target filter message. - * + * * @param targetFilterQuery * @param param * @return diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java index aa9f346a1..c5d8382b3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.management.targettable; +import static org.apache.commons.lang3.ArrayUtils.isEmpty; + import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -57,7 +59,7 @@ public class TargetBeanQuery extends AbstractBeanQuery { /** * Parametric Constructor. - * + * * @param definition * as Def * @param queryConfig @@ -71,7 +73,7 @@ public class TargetBeanQuery extends AbstractBeanQuery { final Object[] sortIds, final boolean[] sortStates) { super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { status = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS); targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); @@ -84,7 +86,7 @@ public class TargetBeanQuery extends AbstractBeanQuery { pinnedDistId = (Long) queryConfig.get(SPUIDefinitions.ORDER_BY_DISTRIBUTION); } - if (HawkbitCommonUtil.checkBolArray(sortStates)) { + if (isEmpty(sortStates)) { // Initalize Sor sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); // Add sort. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 4e43ea39b..a106b0302 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -8,6 +8,15 @@ */ package org.eclipse.hawkbit.ui.management.targettable; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.FILTER_BY_DISTRIBUTION; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.FILTER_BY_TAG; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.FILTER_BY_TARGET_FILTER_QUERY; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.FILTER_BY_TEXT; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.REMOVE_FILTER_BY_TAG; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.REMOVE_FILTER_BY_TARGET_FILTER_QUERY; +import static org.eclipse.hawkbit.ui.management.event.TargetFilterEvent.REMOVE_FILTER_BY_TEXT; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -137,7 +146,7 @@ public class TargetTable extends AbstractTable { public void onEvents(final List events) { final Object firstEvent = events.get(0); if (TargetCreatedEvent.class.isInstance(firstEvent)) { - onTargetCreatedEvents(); + refreshTargets(); } else if (TargetInfoUpdateEvent.class.isInstance(firstEvent)) { onTargetInfoUpdateEvents((List) events); } else if (TargetDeletedEvent.class.isInstance(firstEvent)) { @@ -236,12 +245,6 @@ public class TargetTable extends AbstractTable { return targetTableContainer; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#addContainerProperties - * (com.vaadin.data.Container ) - */ @Override protected void addContainerProperties(final Container container) { HawkbitCommonUtil.addTargetTableContainerProperties(container); @@ -263,10 +266,7 @@ public class TargetTable extends AbstractTable { @Override protected Object getItemIdToSelect() { - if (managementUIState.getSelectedTargetIdName().isPresent()) { - return managementUIState.getSelectedTargetIdName().get(); - } - return null; + return managementUIState.getSelectedTargetIdName().orElse(null); } @Override @@ -303,7 +303,6 @@ public class TargetTable extends AbstractTable { columnList.add(new TableColumn(SPUIDefinitions.TARGET_STATUS_PIN_TOGGLE_ICON, "", 0.0F)); } return columnList; - } @Override @@ -437,14 +436,8 @@ public class TargetTable extends AbstractTable { } private boolean isPinned(final String targetId) { - boolean result; - if (managementUIState.getDistributionTableFilters().getPinnedTargetId().isPresent() - && targetId.equals(managementUIState.getDistributionTableFilters().getPinnedTargetId().get())) { - result = true; - } else { - result = false; - } - return result; + return managementUIState.getDistributionTableFilters().getPinnedTargetId().isPresent() + && targetId.equals(managementUIState.getDistributionTableFilters().getPinnedTargetId().get()); } /** @@ -461,7 +454,6 @@ public class TargetTable extends AbstractTable { } else { unPinTarget(event.getButton()); } - } /** @@ -516,9 +508,7 @@ public class TargetTable extends AbstractTable { /** * Set style of target table. - * */ - @SuppressWarnings("serial") private void styleTargetTable() { setCellStyleGenerator((source, itemId, propertyId) -> null); } @@ -530,7 +520,6 @@ public class TargetTable extends AbstractTable { && isNoTagAssigned(event)) { tagAssignment(event); } - } private Boolean isNoTagAssigned(final DragAndDropEvent event) { @@ -727,24 +716,22 @@ public class TargetTable extends AbstractTable { } private static boolean checkFilterEvent(final TargetFilterEvent filterEvent) { - boolean isFilterEvent; - boolean isFilter; - boolean isRemoveFilters; - boolean isStatusFilter; - isFilter = filterEvent == TargetFilterEvent.FILTER_BY_TEXT || filterEvent == TargetFilterEvent.FILTER_BY_TAG - || filterEvent == TargetFilterEvent.FILTER_BY_DISTRIBUTION - || filterEvent == TargetFilterEvent.FILTER_BY_TARGET_FILTER_QUERY; + return isNormalFilter(filterEvent) || isRemoveFilterEvent(filterEvent) || isStatusFilterEvent(filterEvent); + } - isRemoveFilters = filterEvent == TargetFilterEvent.REMOVE_FILTER_BY_TEXT - || filterEvent == TargetFilterEvent.REMOVE_FILTER_BY_TAG - || filterEvent == TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION - || filterEvent == TargetFilterEvent.REMOVE_FILTER_BY_TARGET_FILTER_QUERY; - isStatusFilter = filterEvent == TargetFilterEvent.FILTER_BY_STATUS + private static boolean isStatusFilterEvent(final TargetFilterEvent filterEvent) { + return filterEvent == TargetFilterEvent.FILTER_BY_STATUS || filterEvent == TargetFilterEvent.REMOVE_FILTER_BY_STATUS; + } - isFilterEvent = isFilter || isRemoveFilters || isStatusFilter; + private static boolean isRemoveFilterEvent(final TargetFilterEvent filterEvent) { + return filterEvent == REMOVE_FILTER_BY_TEXT || filterEvent == REMOVE_FILTER_BY_TAG + || filterEvent == REMOVE_FILTER_BY_DISTRIBUTION || filterEvent == REMOVE_FILTER_BY_TARGET_FILTER_QUERY; + } - return isFilterEvent; + private static boolean isNormalFilter(final TargetFilterEvent filterEvent) { + return filterEvent == FILTER_BY_TEXT || filterEvent == FILTER_BY_TAG || filterEvent == FILTER_BY_DISTRIBUTION + || filterEvent == FILTER_BY_TARGET_FILTER_QUERY; } private String getTargetTableStyle(final Long assignedDistributionSetId, final Long installedDistributionSetId) { @@ -757,14 +744,8 @@ public class TargetTable extends AbstractTable { return SPUIDefinitions.HIGHTLIGHT_ORANGE; } return null; - } - /** - * @param itemId - * @param propertyId - * @return - */ private String createTargetTableStyle(final Object itemId, final Object propertyId) { if (null == propertyId) { final Item item = getItem(itemId); @@ -775,7 +756,6 @@ public class TargetTable extends AbstractTable { return getTargetTableStyle(assignedDistributionSetId, installedDistributionSetId); } return null; - } private void styleTargetTableOnPinning() { @@ -800,12 +780,6 @@ public class TargetTable extends AbstractTable { }); } - /** - * To add new target to the table on Top. - * - * @param newTarget - * as reference - */ private void refreshTargets() { final LazyQueryContainer targetContainer = (LazyQueryContainer) getContainerDataSource(); final int size = targetContainer.size(); @@ -864,9 +838,7 @@ public class TargetTable extends AbstractTable { } } // workaround until push is available for action history, re-select - // the - // updated target so - // the action history gets refreshed. + // the updated target so the action history gets refreshed. if (isLastSelectedTarget(targetIdName)) { lastSelectedTarget = target; } @@ -879,10 +851,6 @@ public class TargetTable extends AbstractTable { } } - private void onTargetCreatedEvents() { - refreshTargets(); - } - private List getTargetTableFilters(final Target target) { final TargetTableFilters targetTableFilters = managementUIState.getTargetTableFilters(); final List filters = new ArrayList<>(); @@ -901,7 +869,6 @@ public class TargetTable extends AbstractTable { */ @Override public void selectAll() { - // As Vaadin Table only returns the current ItemIds which are visible // you don't need to search explicit for them. setValue(getItemIds()); @@ -923,7 +890,6 @@ public class TargetTable extends AbstractTable { * Set total target count and count of targets truncated in target table. */ private void resetTargetCountDetails() { - final long size; final long totalTargetsCount = getTotalTargetsCount(); managementUIState.setTargetsCountAll(totalTargetsCount); @@ -931,11 +897,10 @@ public class TargetTable extends AbstractTable { String[] targetTags = null; Long distributionId = null; String searchText = null; - Boolean noTagClicked; Long pinnedDistId = null; if (isFilteredByTags()) { - targetTags = (String[]) managementUIState.getTargetTableFilters().getClickedTargetTags().toArray(); + targetTags = managementUIState.getTargetTableFilters().getClickedTargetTags().toArray(new String[0]); } if (isFilteredByStatus()) { status = managementUIState.getTargetTableFilters().getClickedStatusTargetTags(); @@ -946,12 +911,12 @@ public class TargetTable extends AbstractTable { if (isFilteredByText()) { searchText = String.format("%%%s%%", managementUIState.getTargetTableFilters().getSearchText().get()); } - noTagClicked = managementUIState.getTargetTableFilters().isNoTagSelected(); + final boolean noTagClicked = managementUIState.getTargetTableFilters().isNoTagSelected(); if (managementUIState.getTargetTableFilters().getPinnedDistId().isPresent()) { pinnedDistId = managementUIState.getTargetTableFilters().getPinnedDistId().get(); } - size = getTargetsCountWithFilter(totalTargetsCount, status, targetTags, distributionId, searchText, + final long size = getTargetsCountWithFilter(totalTargetsCount, status, targetTags, distributionId, searchText, noTagClicked, pinnedDistId); if (size > SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java index 0bfa349d0..a1ab1024a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java @@ -8,10 +8,13 @@ */ package org.eclipse.hawkbit.ui.rollout.rollout; +import static org.apache.commons.lang3.ArrayUtils.isEmpty; + import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.ArrayUtils; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -34,7 +37,7 @@ import org.vaadin.addons.lazyquerycontainer.QueryDefinition; import com.google.common.base.Strings; /** - * + * * Simple implementation of generics bean query which dynamically loads a batch * of {@link ProxyRollout} beans. * @@ -55,7 +58,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { /** * Parametric Constructor. - * + * * @param definition * as QueryDefinition * @param queryConfig @@ -71,7 +74,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { searchText = getSearchText(); - if (HawkbitCommonUtil.checkBolArray(sortStates)) { + if (isEmpty(sortStates)) { // Initalize Sor sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); // Add sort. @@ -95,7 +98,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { /* * (non-Javadoc) - * + * * @see * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int, * int) @@ -149,7 +152,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { /* * (non-Javadoc) - * + * * @see * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#saveBeans(java * .util.List, java.util.List, java.util.List) @@ -164,7 +167,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { /* * (non-Javadoc) - * + * * @see org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#size() */ @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 9ebb1d065..be7339324 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -8,10 +8,15 @@ */ package org.eclipse.hawkbit.ui.rollout.rollout; +import static org.eclipse.hawkbit.ui.rollout.DistributionBarHelper.getTooltip; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_CLOSE_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_OPEN_TAG; +import static org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions.ACTION; +import static org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions.VAR_DIST_NAME_VERSION; +import static org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions.VAR_STATUS; +import static org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS; import java.util.ArrayList; import java.util.Arrays; @@ -122,7 +127,7 @@ public class RolloutListGrid extends AbstractGrid { /** * Handles the RolloutChangeEvent to refresh the item in the grid. - * + * * @param rolloutChangeEvent * the event which contains the rollout which has been changed */ @@ -428,19 +433,22 @@ public class RolloutListGrid extends AbstractGrid { } private String getDescription(final CellReference cell) { - if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { - return cell.getProperty().getValue().toString().toLowerCase(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); + + String description = null; + + if (VAR_STATUS.equals(cell.getPropertyId())) { + description = cell.getProperty().getValue().toString().toLowerCase(); + } else if (ACTION.equals(cell.getPropertyId())) { + description = ACTION.toLowerCase(); } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { - return ((RolloutRendererData) cell.getProperty().getValue()).getName(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } else if (SPUILabelDefinitions.VAR_DIST_NAME_VERSION.equals(cell.getPropertyId())) { - return getDSDetails(cell.getItem()); + description = ((RolloutRendererData) cell.getProperty().getValue()).getName(); + } else if (VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + description = getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } else if (VAR_DIST_NAME_VERSION.equals(cell.getPropertyId())) { + description = getDSDetails(cell.getItem()); } - return null; + + return description; } private static String getDSDetails(final Item rolloutItem) { @@ -497,7 +505,7 @@ public class RolloutListGrid extends AbstractGrid { /** * Constructor - * + * * @param containerDataSource * the container */ @@ -548,7 +556,7 @@ public class RolloutListGrid extends AbstractGrid { } /** - * + * * Converter to convert {@link RolloutStatus} to string. * */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java index 5a37d1341..002adbe03 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.ArrayUtils; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -52,7 +53,7 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery /** * Parametric Constructor. - * + * * @param definition * as QueryDefinition * @param queryConfig @@ -68,7 +69,7 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery rolloutId = getRolloutId(); - if (HawkbitCommonUtil.checkBolArray(sortStates)) { + if (ArrayUtils.isEmpty(sortStates)) { // Initalize Sor sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortPropertyIds[0]); // Add sort. @@ -79,9 +80,6 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery } } - /** - * @return - */ private Long getRolloutId() { return getRolloutUIState().getRolloutId().isPresent() ? getRolloutUIState().getRolloutId().get() : null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 19df8b139..1e66d1977 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -49,6 +49,7 @@ import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; +import com.vaadin.ui.renderers.ClickableRenderer.RendererClickListener; import com.vaadin.ui.renderers.HtmlRenderer; /** @@ -238,16 +239,10 @@ public class RolloutGroupListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), new TotalTargetCountStatusConverter()); if (permissionChecker.hasRolloutTargetsReadPermission()) { - getColumn(ROLLOUT_RENDERER_DATA).setRenderer(new RolloutRenderer(this::onClickOfRolloutGroupName)); + getColumn(ROLLOUT_RENDERER_DATA).setRenderer(new RolloutRenderer(new RolloutGroupClickListener())); } } - private void onClickOfRolloutGroupName(final RendererClickEvent event) { - rolloutUIState - .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); - } - @Override protected void setHiddenColumns() { final List columnsToBeHidden = new ArrayList<>(); @@ -310,11 +305,22 @@ public class RolloutGroupListGrid extends AbstractGrid { }); } + private class RolloutGroupClickListener implements RendererClickListener { + + private static final long serialVersionUID = 1L; + + @Override + public void click(final RendererClickEvent event) { + rolloutUIState.setRolloutGroup( + rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); + } + } + /** * * Converts {@link TotalTargetCountStatus} into formatted string with status * and count details. - * */ class TotalTargetCountStatusConverter implements Converter { @@ -322,15 +328,13 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override public TotalTargetCountStatus convertToModel(final String value, - final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + final Class targetType, final Locale locale) { return null; } @Override public String convertToPresentation(final TotalTargetCountStatus value, - final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + final Class targetType, final Locale locale) { return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); } @@ -346,9 +350,7 @@ public class RolloutGroupListGrid extends AbstractGrid { } /** - * * Converts {@link RolloutGroupStatus} to string. - * */ class RolloutGroupStatusConverter implements Converter { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index 18ffda663..3270e07b4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -8,15 +8,12 @@ */ package org.eclipse.hawkbit.ui.utils; -import java.io.FileOutputStream; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.TimeZone; import org.eclipse.hawkbit.repository.EntityFactory; @@ -30,10 +27,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -53,9 +47,6 @@ import com.vaadin.ui.UI; /** * Common util class. - * - * - * */ public final class HawkbitCommonUtil { @@ -78,13 +69,11 @@ public final class HawkbitCommonUtil { public static final String HTML_UL_CLOSE_TAG = ""; public static final String HTML_UL_OPEN_TAG = "
      "; - private static final Logger LOG = LoggerFactory.getLogger(HawkbitCommonUtil.class); - private static final String JS_DRAG_COUNT_REM_CHILD = " if(x) { document.head.removeChild(x); } "; - public static final String DIV_DESCRIPTION = "

      "; + public static final String DIV_DESCRIPTION_START = "

      "; - public static final String DIV_CLOSE = "

      "; + public static final String DIV_DESCRIPTION_END = "

      "; private static final String DRAG_COUNT_ELEMENT = "var x = document.getElementById('sp-drag-count'); "; private static final String CLOSE_BRACE = "\"; }';"; @@ -112,129 +101,25 @@ public final class HawkbitCommonUtil { private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; private static final String INSTALL_DIST_SET = "installedDistributionSet"; - /** - * Define empty string. - */ - /** - * Private Constructor. - */ private HawkbitCommonUtil() { } /** - * Check Map is valid. - * - * @param mapCheck - * as Map - * @return boolean as flag + * Check wether the given map is not {@code null} and not empty. + * + * @param mapToCheck + * the map to validate + * @return {@code true} if the given map is not {@code null} and not empty. + * Otherwise {@code false} */ - public static boolean mapCheckObjKey(final Map mapCheck) { - boolean validMap = false; - if (mapCheck != null && !mapCheck.isEmpty()) { - validMap = true; - } - - return validMap; - } - - /** - * Check Map is valid. - * - * @param mapCheck - * as Map - * @return boolean as flag - */ - public static boolean mapCheckStrKey(final Map mapCheck) { - boolean validMap = false; - if (mapCheck != null && !mapCheck.isEmpty()) { - validMap = true; - } - - return validMap; - } - - /** - * Check Map is valid. - * - * @param mapCheck - * as Map - * @return boolean as flag - */ - public static boolean mapCheckStrings(final Map mapCheck) { - boolean validMap = false; - if (mapCheck != null && !mapCheck.isEmpty()) { - validMap = true; - } - - return validMap; - } - - /** - * Check List is valid. - * - * @param listCheck - * as List - * @return boolean as flag - */ - public static boolean listCheckObj(final List listCheck) { - boolean validList = false; - if (listCheck != null && !listCheck.isEmpty()) { - validList = true; - } - - return validList; - } - - /** - * Check Boolean Array is valid. - * - * @param bolArray - * as List - * @return boolean as flag - */ - public static boolean checkBolArray(final boolean[] bolArray) { - boolean validBolArray = false; - if (bolArray != null && bolArray.length > 0) { - validBolArray = true; - } - - return validBolArray; - } - - /** - * Check String null, return empty. - * - * @param nString - * as String - * @return String - */ - public static String getEmptyString(final String nString) { - String emptyStr = SP_STRING_SPACE; - if (nString != null && nString.length() > 0) { - emptyStr = nString; - } - return emptyStr; - } - - /** - * Check valid String. - * - * @param nString - * as String - * @return boolean as flag - */ - public static boolean checkValidString(final String nString) { - boolean strValid = false; - if (nString != null && nString.length() > 0) { - strValid = true; - } - return strValid; + public static boolean isNotNullOrEmpty(final Map mapToCheck) { + return mapToCheck != null && !mapToCheck.isEmpty(); } /** * Trim the text and convert into null in case of empty string. - * + * * @param text * as text to be trimed * @return null if the text is null or if the text is blank, text.trim() if @@ -251,7 +136,7 @@ public final class HawkbitCommonUtil { /** * Concatenate the given text all the string arguments with the given * delimiter. - * + * * @param delimiter * the delimiter text to be used while concatenation. * @param texts @@ -277,7 +162,7 @@ public final class HawkbitCommonUtil { /** * Returns the input text within html bold tag ... - * + * * @param text * is the text to be converted in to Bold * @return null if the input text param is null returns text with ... @@ -296,16 +181,13 @@ public final class HawkbitCommonUtil { /** * Get target label Id. - * + * * @param controllerId * as String * @return String as label name */ public static String getTargetLabelId(final String controllerId) { - final StringBuilder labelId = new StringBuilder("target"); - labelId.append('.'); - labelId.append(controllerId); - return labelId.toString(); + return new StringBuilder("target").append('.').append(controllerId).toString(); } /** @@ -318,12 +200,7 @@ public final class HawkbitCommonUtil { * @return String distribution label id */ public static String getDistributionLabelId(final String name, final String version) { - final StringBuilder labelId = new StringBuilder("dist"); - labelId.append('.'); - labelId.append(name); - labelId.append('.'); - labelId.append(version); - return labelId.toString(); + return new StringBuilder("dist").append('.').append(name).append('.').append(version).toString(); } /** @@ -336,12 +213,7 @@ public final class HawkbitCommonUtil { * @return String software module label id */ public static String getSwModuleLabelId(final String name, final String version) { - final StringBuilder labelId = new StringBuilder("swModule"); - labelId.append('.'); - labelId.append(name); - labelId.append('.'); - labelId.append(version); - return labelId.toString(); + return new StringBuilder("swModule").append('.').append(name).append('.').append(version).toString(); } /** @@ -354,28 +226,26 @@ public final class HawkbitCommonUtil { * @return String */ public static String getSwModuleNameDescLabel(final String name, final String desc) { - final StringBuilder labelDesc = new StringBuilder(); - labelDesc.append(DIV_DESCRIPTION + getBoldHTMLText(getFormattedName(name)) + "
      " + getFormattedName(desc)); - labelDesc.append(DIV_CLOSE); - return labelDesc.toString(); + return new StringBuilder().append( + DIV_DESCRIPTION_START + getBoldHTMLText(getFormattedName(name)) + "
      " + getFormattedName(desc)) + .append(DIV_DESCRIPTION_END).toString(); } /** * Get Label for Artifact Details. - * + * * @param name * @return */ public static String getArtifactoryDetailsLabelId(final String name) { - final StringBuilder labelDesc = new StringBuilder(); - labelDesc.append(DIV_DESCRIPTION + "Artifact Details of " + getBoldHTMLText(getFormattedName(name))); - labelDesc.append(DIV_CLOSE); - return labelDesc.toString(); + return new StringBuilder() + .append(DIV_DESCRIPTION_START + "Artifact Details of " + getBoldHTMLText(getFormattedName(name))) + .append(DIV_DESCRIPTION_END).toString(); } /** * Get Label for Artifact Details. - * + * * @param caption * as caption of the details * @param name @@ -383,28 +253,26 @@ public final class HawkbitCommonUtil { * @return */ public static String getSoftwareModuleName(final String caption, final String name) { - final StringBuilder labelDesc = new StringBuilder(); - labelDesc.append(DIV_DESCRIPTION + caption + " : " + getBoldHTMLText(getFormattedName(name))); - labelDesc.append(DIV_CLOSE); - return labelDesc.toString(); + return new StringBuilder() + .append(DIV_DESCRIPTION_START + caption + " : " + getBoldHTMLText(getFormattedName(name))) + .append(DIV_DESCRIPTION_END).toString(); } /** * Get Label for Action History Details. - * + * * @param name * @return */ public static String getActionHistoryLabelId(final String name) { - final StringBuilder labelDesc = new StringBuilder(); - labelDesc.append(DIV_DESCRIPTION + "Action History For " + getBoldHTMLText(getFormattedName(name))); - labelDesc.append(DIV_CLOSE); - return labelDesc.toString(); + return new StringBuilder() + .append(DIV_DESCRIPTION_START + "Action History For " + getBoldHTMLText(getFormattedName(name))) + .append(DIV_DESCRIPTION_END).toString(); } /** * Get tool tip for Poll status. - * + * * @param pollStatus * @param i18N * @return @@ -434,7 +302,7 @@ public final class HawkbitCommonUtil { /** * Find extra height required to increase by all the components to utilize * the full height of browser for the responsive UI. - * + * * @param newBrowserHeight * as current browser height. * @return extra height required to increase. @@ -600,17 +468,16 @@ public final class HawkbitCommonUtil { * @return String name */ public static String removePrefix(final String text, final String prefix) { - String str = null; - if (null != text) { - str = text.replaceFirst(prefix, ""); + if (text != null) { + return text.replaceFirst(prefix, ""); } - return str; + return null; } /** * Create javascript to display number of targets or distributions your are * dragging in the drag image. - * + * * @param count * @return */ @@ -630,7 +497,7 @@ public final class HawkbitCommonUtil { /** * Get formatted label.Appends ellipses if content does not fit the label. - * + * * @param labelContent * content * @return Label @@ -640,7 +507,6 @@ public final class HawkbitCommonUtil { labelValue.setSizeFull(); labelValue.addStyleName(SPUIDefinitions.TEXT_STYLE); labelValue.addStyleName("label-style"); - return labelValue; } @@ -669,14 +535,11 @@ public final class HawkbitCommonUtil { final float extraBrowserHeight = HawkbitCommonUtil.findRequiredSwModuleExtraHeight(newHeight); final float tableHeight = SPUIDefinitions.MIN_UPLOAD_ARTIFACT_TABLE_HEIGHT + extraBrowserHeight; artifactDetailsLayout.setHeight(tableHeight, Unit.PIXELS); - } /** * Set height of artifact details table and drop area layout. * - * @param dropLayout - * drop area layout * @param artifactDetailsLayout * artifact details table * @param newHeight @@ -687,28 +550,11 @@ public final class HawkbitCommonUtil { final float tableHeight = SPUIDefinitions.MIN_TARGET_DIST_TABLE_HEIGHT + HawkbitCommonUtil.findRequiredExtraHeight(newHeight) + 62; artifactDetailsLayout.setHeight(tableHeight, Unit.PIXELS); - - } - - /** - * Close output stream. - * - * @param fos - * out stream to be closed - */ - public static void closeOutoutStream(final FileOutputStream fos) { - try { - if (fos != null) { - fos.close(); - } - } catch (final IOException ioe) { - LOG.error("Colud not close output stream", ioe); - } } /** * Duplicate check - Unique Key. - * + * * @param name * as string * @param version @@ -721,16 +567,12 @@ public final class HawkbitCommonUtil { final SoftwareManagement swMgmtService = SpringContextHelper.getBean(SoftwareManagement.class); final SoftwareModule swModule = swMgmtService.findSoftwareModuleByNameAndVersion(name, version, swMgmtService.findSoftwareModuleTypeByName(type)); - boolean duplicate = false; - if (swModule != null) { - duplicate = true; - } - return duplicate; + return swModule != null; } /** * Add new base software module. - * + * * @param bsname * base software module name * @param bsversion @@ -773,20 +615,16 @@ public final class HawkbitCommonUtil { * @return */ public static String getDistributionNameAndVersion(final String distName, final String distVersion) { - final StringBuilder stringBuilder = new StringBuilder(distName); - stringBuilder.append(':').append(distVersion); - return stringBuilder.toString(); + return new StringBuilder(distName).append(':').append(distVersion).toString(); } /** * Display Target Tag action message. - * + * * @param tagName * as tag name * @param result * as TargetTagAssigmentResult - * @param tagsClickedList - * as clicked tag list * @param i18n * I18N * @return message @@ -827,7 +665,7 @@ public final class HawkbitCommonUtil { /** * Create a lazy query container for the given query bean factory with empty * configurations. - * + * * @param queryFactory * is reference of {@link BeanQueryFactory} on which lazy container should create. @@ -841,9 +679,9 @@ public final class HawkbitCommonUtil { } /** - * + * * Create lazy query container for DS type. - * + * * @param queryFactory * @return LazyQueryContainer */ @@ -856,7 +694,7 @@ public final class HawkbitCommonUtil { /** * Set distribution table column properties. - * + * * @param container * table container */ @@ -874,7 +712,7 @@ public final class HawkbitCommonUtil { /** * Reset the software module table rows highlight css. - * + * * @return javascript to rest software module table rows highlight css. */ public static String getScriptSMHighlightReset() { @@ -883,73 +721,66 @@ public final class HawkbitCommonUtil { /** * Highlight software module rows with the color of sw-type. - * + * * @param colorCSS * color to generate the css script. * @return javascript to append software module table rows with highlighted * color. */ public static String getScriptSMHighlightWithColor(final String colorCSS) { - final StringBuilder scriptBuilder = new StringBuilder(); - scriptBuilder.append(SM_HIGHLIGHT_SCRIPT_CURRENT).append("smHighlightStyle = smHighlightStyle + \"") - .append(colorCSS).append("\";").append(SM_HIGHLIGHT_SCRIPT_APPEND); - return scriptBuilder.toString(); + return new StringBuilder().append(SM_HIGHLIGHT_SCRIPT_CURRENT) + .append("smHighlightStyle = smHighlightStyle + \"").append(colorCSS).append("\";") + .append(SM_HIGHLIGHT_SCRIPT_APPEND).toString(); } /** * Get javascript to reflect new color selection in color picker preview for * name and description fields . - * + * * @param colorPickedPreview * changed color * @return javascript for the selected color. */ public static String changeToNewSelectedPreviewColor(final String colorPickedPreview) { - final StringBuilder scriptBuilder = new StringBuilder(); - scriptBuilder.append(NEW_PREVIEW_COLOR_REMOVE_SCRIPT).append(NEW_PREVIEW_COLOR_CREATE_SCRIPT) + return new StringBuilder().append(NEW_PREVIEW_COLOR_REMOVE_SCRIPT).append(NEW_PREVIEW_COLOR_CREATE_SCRIPT) .append("var newColorPreviewStyle = \".v-app .new-tag-name{ border: solid 3px ") .append(colorPickedPreview) .append(" !important; width:138px; margin-left:2px !important; box-shadow:none !important; } \"; ") .append("newColorPreviewStyle = newColorPreviewStyle + \".v-app .new-tag-desc{ border: solid 3px ") .append(colorPickedPreview) .append(" !important; width:138px; height:75px !important; margin-top:4px !important; margin-left:2px !important;;box-shadow:none !important;} \"; ") - .append(NEW_PREVIEW_COLOR_SET_STYLE_SCRIPT); - return scriptBuilder.toString(); + .append(NEW_PREVIEW_COLOR_SET_STYLE_SCRIPT).toString(); } /** * Get javascript to reflect new color selection for preview button. - * + * * @param color * changed color * @return javascript for the selected color. */ public static String getPreviewButtonColorScript(final String color) { - final StringBuilder scriptBuilder = new StringBuilder(); - scriptBuilder.append(PREVIEW_BUTTON_COLOR_REMOVE_SCRIPT).append(PREVIEW_BUTTON_COLOR_CREATE_SCRIPT) + return new StringBuilder().append(PREVIEW_BUTTON_COLOR_REMOVE_SCRIPT).append(PREVIEW_BUTTON_COLOR_CREATE_SCRIPT) .append("var tagColorPreviewStyle = \".v-app .tag-color-preview{ height: 15px !important; padding: 0 10px !important; border: 0px !important; margin-left:12px !important; margin-top: 4px !important; border-width: 0 !important; background: ") .append(color) .append(" } .v-app .tag-color-preview:after{ border-color: none !important; box-shadow:none !important;} \"; ") - .append(PREVIEW_BUTTON_COLOR_SET_STYLE_SCRIPT); - return scriptBuilder.toString(); + .append(PREVIEW_BUTTON_COLOR_SET_STYLE_SCRIPT).toString(); } /** * Java script to display drop hints for tags. - * + * * @return javascript */ public static String dispTargetTagsDropHintScript() { final String targetDropStyle = "document.getElementById('show-filter-drop-hint').innerHTML = '." + UI.getCurrent().getTheme() + " .target-tag-drop-hint { border: 1px dashed #26547a !important; }';"; - final StringBuilder scriptBuilder = new StringBuilder(); - scriptBuilder.append(TARGET_TAG_DROP_CREATE_SCRIPT).append(targetDropStyle); - return scriptBuilder.toString(); + return new StringBuilder().append(TARGET_TAG_DROP_CREATE_SCRIPT).append(targetDropStyle).toString(); } /** * Java script to hide drop hints for tags. - * + * * @return javascript */ public static String hideTargetTagsDropHintScript() { @@ -958,20 +789,18 @@ public final class HawkbitCommonUtil { /** * Java script to display drop hint for Delete button. - * + * * @return javascript */ public static String dispDeleteDropHintScript() { final String deleteTagDropStyle = "document.getElementById('show-delete-drop-hint').innerHTML = '." + UI.getCurrent().getTheme() + " .show-delete-drop-hint { border: 1px dashed #26547a !important; }';"; - final StringBuilder scriptBuilder = new StringBuilder(); - scriptBuilder.append(DELETE_DROP_CREATE_SCRIPT).append(deleteTagDropStyle); - return scriptBuilder.toString(); + return new StringBuilder().append(DELETE_DROP_CREATE_SCRIPT).append(deleteTagDropStyle).toString(); } /** * Java script to hide drop hint for delete button. - * + * * @return javascript */ public static String hideDeleteDropHintScript() { @@ -979,9 +808,8 @@ public final class HawkbitCommonUtil { } /** - * * Add target table container properties. - * + * * @param container * table container */ @@ -1013,13 +841,11 @@ public final class HawkbitCommonUtil { targetTableContainer.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); targetTableContainer.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); - } /** - * * Apply style for status label in target table. - * + * * @param targetTable * target table * @param pinBtn @@ -1049,7 +875,7 @@ public final class HawkbitCommonUtil { /** * Set status progress bar value. - * + * * @param bar * DistributionBar * @param statusName @@ -1068,7 +894,7 @@ public final class HawkbitCommonUtil { /** * Initialize status progress bar with values and number of parts on load. - * + * * @param bar * DistributionBar * @param item @@ -1087,7 +913,6 @@ public final class HawkbitCommonUtil { 0); HawkbitCommonUtil.setBarPartSize(bar, TotalTargetCountStatus.Status.FINISHED.toString().toLowerCase(), 0, 1); - } else { bar.setNumberOfParts(6); setProgressBarDetails(bar, item); @@ -1097,7 +922,7 @@ public final class HawkbitCommonUtil { /** * Formats the finished percentage of a rollout group into a string with one * digit after comma. - * + * * @param rolloutGroup * the rollout group * @param finishedPercentage @@ -1126,7 +951,7 @@ public final class HawkbitCommonUtil { /** * Reset the values of status progress bar on change of values. - * + * * @param bar * DistributionBar * @param item @@ -1150,38 +975,17 @@ public final class HawkbitCommonUtil { } private static boolean isNoTargets(final Long... statusCount) { - if (Arrays.asList(statusCount).stream().filter(value -> value > 0).toArray().length > 0) { - return false; - } - return true; + return (Arrays.asList(statusCount).stream().filter(value -> value > 0).toArray().length) == 0; } private static Long getStatusCount(final String propertName, final Item item) { return (Long) item.getItemProperty(propertName).getValue(); } - /** - * Get the formatted string of status and target count details. - * - * @param details - * details of status and count - * @return String - */ - public static String getFormattedString(final Map details) { - final StringBuilder val = new StringBuilder(); - if (details == null || details.isEmpty()) { - return null; - } - for (final Entry entry : details.entrySet()) { - val.append(entry.getKey()).append(":").append(entry.getValue()).append(","); - } - return val.substring(0, val.length() - 1); - } - /** * Returns a formatted string as needed by label custom render .This string * holds the properties of a status label. - * + * * @param value * label value * @param style @@ -1198,13 +1002,12 @@ public final class HawkbitCommonUtil { if (!Strings.isNullOrEmpty(style)) { val.append("style:").append(style).append(","); } - val.append("id:").append(id); - return val.toString(); + return val.append("id:").append(id).toString(); } /** * Receive the code point of a given StatusFontIcon. - * + * * @param statusFontIcon * the status font icon * @return the code point of the StatusFontIcon @@ -1216,5 +1019,4 @@ public final class HawkbitCommonUtil { return statusFontIcon.getFontIcon() != null ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; } - } From ce2bdf82df45ae41df4250242cb691e5e8c0406c Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Tue, 16 Aug 2016 09:45:19 +0200 Subject: [PATCH 05/27] Ignored test removed Signed-off-by: Dominic Schabel --- .../rest/resource/MgmtTargetResourceTest.java | 64 ------------------- 1 file changed, 64 deletions(-) diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index f647106af..57e2c096d 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -52,9 +52,7 @@ import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.util.IpUtil; -import org.json.JSONException; import org.json.JSONObject; -import org.junit.Ignore; import org.junit.Test; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; @@ -80,7 +78,6 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { private static final String TARGET_DESCRIPTION_TEST = "created in test"; - // json paths private static final String JSON_PATH_ROOT = "$"; // fields, attributes @@ -633,69 +630,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String knownName = "someName"; createSingleTarget(knownControllerId, knownName); - // test - mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/installedDS")) .andExpect(status().isNoContent()).andExpect(content().string("")); - - } - - @Test - @Ignore - public void getInstalledDistributionSetOfTarget() throws JSONException, Exception { - // create first a target which can be retrieved by rest interface - final String knownControllerId = "1"; - final String knownName = "someName"; - createSingleTarget(knownControllerId, knownName); - final DistributionSet ds = testdataFactory.createDistributionSet(""); - // assign ds to target - final Long actionId = deploymentManagement.assignDistributionSet(ds.getId(), knownControllerId).getActions() - .get(0); - // give feedback, so installedDS is in SNYC - feedbackToByInSync(actionId); - // test - - final SoftwareModule os = ds.findFirstModuleByType(osType); - final SoftwareModule jvm = ds.findFirstModuleByType(runtimeType); - final SoftwareModule bApp = ds.findFirstModuleByType(appType); - mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/installedDS")) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(JSON_PATH_ID, equalTo(ds.getId().intValue()))) - .andExpect(jsonPath(JSON_PATH_NAME, equalTo(ds.getName()))) - .andExpect(jsonPath(JSON_PATH_DESCRIPTION, equalTo(ds.getDescription()))) - // os - .andExpect( - jsonPath("$modules.[?(@.type==" + osType.getKey() + ")][0].id", equalTo(os.getId().intValue()))) - .andExpect(jsonPath("$modules.[?(@.type==" + osType.getKey() + ")][0].name", equalTo(os.getName()))) - .andExpect(jsonPath("$modules.[?(@.type==" + osType.getKey() + ")][0].description", - equalTo(os.getDescription()))) - .andExpect( - jsonPath("$modules.[?(@.type==" + osType.getKey() + ")][0].version", equalTo(os.getVersion()))) - .andExpect(jsonPath("$modules.[?(@.type==" + osType.getKey() + ")][0].vendor", equalTo(os.getVendor()))) - .andExpect(jsonPath("$modules.[?(@.type==" + osType.getKey() + ")][0].type", equalTo("os"))) - // jvm - .andExpect(jsonPath("$modules.[?(@.type==" + runtimeType.getKey() + ")][0].id", - equalTo(jvm.getId().intValue()))) - .andExpect( - jsonPath("$modules.[?(@.type==" + runtimeType.getKey() + ")][0].name", equalTo(jvm.getName()))) - .andExpect(jsonPath("$modules.[?(@.type==" + runtimeType.getKey() + ")][0].description", - equalTo(jvm.getDescription()))) - .andExpect(jsonPath("$modules.[?(@.type==" + runtimeType.getKey() + ")][0].version", - equalTo(jvm.getVersion()))) - .andExpect(jsonPath("$modules.[?(@.type==" + runtimeType.getKey() + ")][0].vendor", - equalTo(jvm.getVendor()))) - .andExpect(jsonPath("$modules.[?(@.type==" + runtimeType.getKey() + ")][0].type", equalTo("runtime"))) - // baseApp - .andExpect(jsonPath("$modules.[?(@.type==" + appType.getKey() + ")][0].id", - equalTo(bApp.getId().intValue()))) - .andExpect(jsonPath("$modules.[?(@.type==" + appType.getKey() + ")][0].name", equalTo(bApp.getName()))) - .andExpect(jsonPath("$modules.[?(@.type==" + appType.getKey() + ")][0].description", - equalTo(bApp.getDescription()))) - .andExpect(jsonPath("$modules.[?(@.type==" + appType.getKey() + ")][0].version", - equalTo(bApp.getVersion()))) - .andExpect( - jsonPath("$modules.[?(@.type==" + appType.getKey() + ")][0].vendor", equalTo(bApp.getVendor()))) - .andExpect(jsonPath("$modules.[?(@.type==" + appType.getKey() + ")][0].type", equalTo("application"))); } @Test From 4e7f547392d006b7cbb1e6b1f0cc33d079c992a2 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 11:46:42 +0200 Subject: [PATCH 06/27] Add a WindowBuilder for the dialogs Signed-off-by: SirWayne --- .../SoftwareModuleAddUpdateWindow.java | 9 +- .../common/AbstractMetadataPopupLayout.java | 10 +- .../hawkbit/ui/common/CommonDialogWindow.java | 3 +- .../footer/AbstractDeleteActionsLayout.java | 8 +- .../ui/components/SPUIComponentProvider.java | 17 --- .../ui/decorators/SPUIWindowDecorator.java | 107 ------------------ .../AbstractCreateUpdateTagLayout.java | 8 +- .../DistributionAddUpdateWindowLayout.java | 9 +- .../TargetAddUpdateWindowLayout.java | 8 +- .../TargetBulkUpdateWindowLayout.java | 6 +- .../rollout/AddUpdateRolloutWindowLayout.java | 8 +- 11 files changed, 41 insertions(+), 152 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index c8eb74313..52f377366 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -18,9 +18,9 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -181,8 +181,11 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se setCompositionRoot(formLayout); - window = SPUIWindowDecorator.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), null, null, formLayout, i18n); + window = new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW) + .caption(i18n.get("upload.caption.add.new.swmodule")).content(this) + .saveButtonClickListener(event -> saveOrUpdate()).layout(formLayout).i18n(i18n) + .buildCommonDialogWindow(); + window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.setEnabled(!editSwModule); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index b9d48d321..972722d36 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -16,10 +16,10 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.MetaData; import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -115,9 +115,11 @@ public abstract class AbstractMetadataPopupLayout onSave(), event -> onCancel(), null, mainLayout, - i18n); + + metadataWindow = new WindowBuilder(SPUIDefinitions.CUSTOM_METADATA_WINDOW) + .caption(getMetadataCaption(nameVersion)).content(this).saveButtonClickListener(event -> onSave()) + .cancelButtonClickListener(event -> onCancel()).layout(mainLayout).i18n(i18n).buildCommonDialogWindow(); + metadataWindow.setId(SPUIComponentIdProvider.METADATA_POPUP_ID); metadataWindow.setHeight(550, Unit.PIXELS); metadataWindow.setWidth(800, Unit.PIXELS); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 25c4bfc94..34abbeb90 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.common; import static com.google.common.base.Preconditions.checkNotNull; -import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -70,7 +69,7 @@ import com.vaadin.ui.themes.ValoTheme; * corner and a save and cancel button at the bottom. Is not intended to reuse. * */ -public class CommonDialogWindow extends Window implements Serializable { +public class CommonDialogWindow extends Window { private static final long serialVersionUID = 1L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java index b324f0325..a0d6e108a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java @@ -12,6 +12,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -215,11 +216,10 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme if (!hasUnsavedActions()) { return; } - unsavedActionsWindow = SPUIComponentProvider.getWindow(getUnsavedActionsWindowCaption(), - SPUIComponentIdProvider.SAVE_ACTIONS_POPUP, SPUIDefinitions.CONFIRMATION_WINDOW); + unsavedActionsWindow = new WindowBuilder(SPUIDefinitions.CONFIRMATION_WINDOW) + .caption(getUnsavedActionsWindowCaption()).id(SPUIComponentIdProvider.CONFIRMATION_POPUP_ID) + .content(getUnsavedActionsWindowContent()).buildWindow(); unsavedActionsWindow.addCloseListener(event -> unsavedActionsWindowClosed()); - unsavedActionsWindow.setContent(getUnsavedActionsWindowContent()); - unsavedActionsWindow.setId(SPUIComponentIdProvider.CONFIRMATION_POPUP_ID); UI.getCurrent().addWindow(unsavedActionsWindow); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 9bfb81a27..1d8880d91 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -21,7 +21,6 @@ import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; import org.eclipse.hawkbit.ui.decorators.SPUILabelDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextAreaDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextFieldDecorator; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.slf4j.Logger; @@ -42,7 +41,6 @@ import com.vaadin.ui.TabSheet; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; /** @@ -134,21 +132,6 @@ public final class SPUIComponentProvider { return SPUILabelDecorator.getDeocratedLabel(name, type); } - /** - * Get window component. - * - * @param caption - * window caption - * @param id - * window id - * @param type - * type of window - * @return Window - */ - public static Window getWindow(final String caption, final String id, final String type) { - return SPUIWindowDecorator.getDeocratedWindow(caption, id, type); - } - /** * Get Label UI component. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java deleted file mode 100644 index da60b83d1..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ /dev/null @@ -1,107 +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.decorators; - -import org.eclipse.hawkbit.ui.common.CommonDialogWindow; -import org.eclipse.hawkbit.ui.common.CustomCommonDialogWindow; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; - -import com.vaadin.ui.AbstractLayout; -import com.vaadin.ui.Button.ClickListener; -import com.vaadin.ui.Component; -import com.vaadin.ui.Window; - -/** - * Decorator for Window. - */ -public final class SPUIWindowDecorator { - - /** - * Private Constructor. - */ - private SPUIWindowDecorator() { - - } - - /** - * Decorates window based on type. - * - * @param caption - * window caption - * @param id - * window id - * @param type - * window type - * @return Window - */ - public static CommonDialogWindow getWindow(final String caption, final String id, final String type, - final Component content, final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener, final String helpLink, final AbstractLayout layout, - final I18N i18n) { - - CommonDialogWindow window; - - if (SPUIDefinitions.CUSTOM_METADATA_WINDOW.equals(type)) { - window = new CustomCommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, layout, i18n); - window.setDraggable(true); - window.setClosable(true); - } else { - window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, layout, i18n); - if (null != id) { - window.setId(id); - } - if (SPUIDefinitions.CONFIRMATION_WINDOW.equals(type)) { - window.setDraggable(false); - window.setClosable(true); - window.addStyleName(SPUIStyleDefinitions.CONFIRMATION_WINDOW_CAPTION); - - } else if (SPUIDefinitions.CREATE_UPDATE_WINDOW.equals(type)) { - window.setDraggable(true); - window.setClosable(true); - } - } - - return window; - } - - /** - * Decorates window based on type. - * - * @param caption - * window caption - * @param id - * window id - * @param type - * window type - * @return Window - */ - public static Window getDeocratedWindow(final String caption, final String id, final String type) { - final Window window = new Window(caption); - window.setSizeUndefined(); - window.setModal(true); - window.setResizable(false); - if (null != id) { - window.setId(id); - } - if (SPUIDefinitions.CONFIRMATION_WINDOW.equals(type)) { - window.setDraggable(false); - window.setClosable(true); - window.addStyleName(SPUIStyleDefinitions.CONFIRMATION_WINDOW_CAPTION); - - } else if (SPUIDefinitions.CREATE_UPDATE_WINDOW.equals(type)) { - window.setDraggable(true); - window.setClosable(false); - } - return window; - } -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 33ec3f52d..91b11146a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -19,8 +19,8 @@ import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerLayout; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -460,8 +460,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent public CommonDialogWindow getWindow() { reset(); - window = SPUIWindowDecorator.getWindow(getWindowCaption(), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, - this::save, cancleEvent -> discard(), null, mainLayout, i18n); + window = new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW).caption(getWindowCaption()).content(this) + .saveButtonClickListener(this::save).cancelButtonClickListener(event -> discard()).layout(mainLayout) + .i18n(i18n).buildCommonDialogWindow(); + return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 069b9b407..12ed73cc8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -22,9 +22,9 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -325,8 +325,11 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { resetComponents(); populateDistSetTypeNameCombo(); populateValuesOfDistribution(editDistId); - window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.dist"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), null, null, formLayout, i18n); + + window = new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW).caption(i18n.get("caption.add.new.dist")) + .content(this).saveButtonClickListener(event -> saveDistribution()).layout(formLayout).i18n(i18n) + .buildCommonDialogWindow(); + window.getButtonsLayout().removeStyleName("actionButtonsMargin"); return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 2b08c4dbf..84c933cba 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -16,9 +16,9 @@ import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -166,8 +166,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), null, null, formLayout, i18n); + window = new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW).caption(i18n.get("caption.add.new.target")) + .content(this).saveButtonClickListener(event -> saveTargetListner()).layout(formLayout).i18n(i18n) + .buildCommonDialogWindow(); + return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index b77576411..3e2100483 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.dstable.DistributionBeanQuery; @@ -357,10 +358,11 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { */ public Window getWindow() { managementUIState.setBulkUploadWindowMinimised(false); - bulkUploadWindow = SPUIComponentProvider.getWindow("", null, SPUIDefinitions.CREATE_UPDATE_WINDOW); + + bulkUploadWindow = new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW).caption("").content(this) + .buildWindow(); bulkUploadWindow.addStyleName("bulk-upload-window"); bulkUploadWindow.setImmediate(true); - bulkUploadWindow.setContent(this); if (isNoBulkUploadInProgress()) { bulkUploader.getUpload().setEnabled(true); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 6a20bf9f0..bd18ea113 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -30,8 +30,8 @@ import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; +import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout; import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout.ActionTypeOption; @@ -165,9 +165,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public CommonDialogWindow getWindow() { resetComponents(); - return SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), null, - uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n); + return new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW).caption(i18n.get("caption.configure.rollout")) + .content(this).saveButtonClickListener(event -> onRolloutSave()).layout(this).i18n(i18n) + .helpLink(uiProperties.getLinks().getDocumentation().getRolloutView()).buildCommonDialogWindow(); } /** From d3d07046ecfebeebc9285b8b0f5eca8b889fc080 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 11:47:24 +0200 Subject: [PATCH 07/27] Add a WindowBuilder for the dialogs Signed-off-by: SirWayne --- .../ui/common/builder/WindowBuilder.java | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/WindowBuilder.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/WindowBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/WindowBuilder.java new file mode 100644 index 000000000..c18d117db --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/WindowBuilder.java @@ -0,0 +1,187 @@ +package org.eclipse.hawkbit.ui.common.builder; + +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.common.CustomCommonDialogWindow; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; + +import com.vaadin.ui.AbstractLayout; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Component; +import com.vaadin.ui.Window; + +/** + * Builder for Window. + */ +public class WindowBuilder { + + private String caption; + private Component content; + private ClickListener saveButtonClickListener; + private ClickListener cancelButtonClickListener; + private String helpLink; + private AbstractLayout layout; + private I18N i18n; + private final String type; + private String id; + + /** + * Constructor. + * + * @param type + * window type + */ + public WindowBuilder(final String type) { + this.type = type; + } + + /** + * Set the caption. + * + * @param caption + * the caption + * @return the window builder + */ + public WindowBuilder caption(final String caption) { + this.caption = caption; + return this; + } + + /** + * Set the content. + * + * @param content + * the content + * @return the window builder + */ + public WindowBuilder content(final Component content) { + this.content = content; + return this; + } + + /** + * Set the saveButtonClickListener. + * + * @param saveButtonClickListener + * the saveButtonClickListener + * @return the window builder + */ + public WindowBuilder saveButtonClickListener(final ClickListener saveButtonClickListener) { + this.saveButtonClickListener = saveButtonClickListener; + return this; + } + + /** + * Set the cancelButtonClickListener. + * + * @param cancelButtonClickListener + * the cancelButtonClickListener + * @return the window builder + */ + public WindowBuilder cancelButtonClickListener(final ClickListener cancelButtonClickListener) { + this.cancelButtonClickListener = cancelButtonClickListener; + return this; + } + + /** + * Set the helpLink. + * + * @param helpLink + * the helpLink + * @return the window builder + */ + public WindowBuilder helpLink(final String helpLink) { + this.helpLink = helpLink; + return this; + } + + /** + * Set the layout. + * + * @param layout + * the layout + * @return the window builder + */ + public WindowBuilder layout(final AbstractLayout layout) { + this.layout = layout; + return this; + } + + /** + * Set the i18n. + * + * @param i18n + * the i18n + * @return the window builder + */ + public WindowBuilder i18n(final I18N i18n) { + this.i18n = i18n; + return this; + } + + /** + * @param id + * the id to set * @return the window builder + */ + public WindowBuilder id(final String id) { + this.id = id; + return this; + } + + /** + * Build the common dialog window. + * + * @return the window. + */ + public CommonDialogWindow buildCommonDialogWindow() { + CommonDialogWindow window; + + if (SPUIDefinitions.CUSTOM_METADATA_WINDOW.equals(type)) { + window = new CustomCommonDialogWindow(caption, content, helpLink, saveButtonClickListener, + cancelButtonClickListener, layout, i18n); + window.setDraggable(true); + window.setClosable(true); + return window; + } + window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, cancelButtonClickListener, + layout, i18n); + + decorateWindow(window); + + return window; + + } + + private void decorateWindow(final Window window) { + if (id != null) { + window.setId(id); + } + + if (SPUIDefinitions.CONFIRMATION_WINDOW.equals(type)) { + window.setDraggable(false); + window.setClosable(true); + window.addStyleName(SPUIStyleDefinitions.CONFIRMATION_WINDOW_CAPTION); + + } else if (SPUIDefinitions.CREATE_UPDATE_WINDOW.equals(type)) { + window.setDraggable(true); + window.setClosable(true); + } + } + + /** + * Build window based on type. + * + * @return Window + */ + public Window buildWindow() { + final Window window = new Window(caption); + window.setContent(content); + window.setSizeUndefined(); + window.setModal(true); + window.setResizable(false); + + decorateWindow(window); + return window; + } +} From 9e1754126ed295e2c020f70b5fa6daf053d509fd Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Tue, 16 Aug 2016 12:51:15 +0200 Subject: [PATCH 08/27] Added missing NOT and did some small other code improvements Signed-off-by: Dominic Schabel --- .../targettable/TargetBeanQuery.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java index c5d8382b3..93d627ee8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java @@ -9,6 +9,10 @@ package org.eclipse.hawkbit.ui.management.targettable; import static org.apache.commons.lang3.ArrayUtils.isEmpty; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.isNotNullOrEmpty; +import static org.eclipse.hawkbit.ui.utils.SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER; +import static org.springframework.data.domain.Sort.Direction.ASC; +import static org.springframework.data.domain.Sort.Direction.DESC; import java.util.ArrayList; import java.util.Collection; @@ -32,7 +36,6 @@ import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; -import org.springframework.data.domain.Sort.Direction; import org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery; import org.vaadin.addons.lazyquerycontainer.QueryDefinition; @@ -41,11 +44,12 @@ import com.google.common.base.Strings; /** * Simple implementation of generics bean query which dynamically loads a batch * of beans. - * */ public class TargetBeanQuery extends AbstractBeanQuery { + private static final long serialVersionUID = -5645680058303167558L; - private Sort sort = new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"); + + private Sort sort = new Sort(TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"); private transient Collection status = null; private String[] targetTags = null; private Long distributionId = null; @@ -71,9 +75,10 @@ public class TargetBeanQuery extends AbstractBeanQuery { */ public TargetBeanQuery(final QueryDefinition definition, final Map queryConfig, final Object[] sortIds, final boolean[] sortStates) { + super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { + if (isNotNullOrEmpty(queryConfig)) { status = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS); targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); @@ -86,12 +91,12 @@ public class TargetBeanQuery extends AbstractBeanQuery { pinnedDistId = (Long) queryConfig.get(SPUIDefinitions.ORDER_BY_DISTRIBUTION); } - if (isEmpty(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. + if (!isEmpty(sortStates)) { + + sort = new Sort(sortStates[0] ? ASC : DESC, (String) sortIds[0]); + for (int targetId = 1; targetId < sortIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); + sort.and(new Sort(sortStates[targetId] ? ASC : DESC, (String) sortIds[targetId])); } } } @@ -222,5 +227,4 @@ public class TargetBeanQuery extends AbstractBeanQuery { } return i18N; } - } From e65849b9225b56e129212407b1a1857a6d6634af Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 13:20:07 +0200 Subject: [PATCH 09/27] Fix some code smells Signed-off-by: SirWayne --- .../jpa/DistributionSetManagementTest.java | 7 +++---- .../management/targettable/TargetTable.java | 3 +-- .../org/eclipse/hawkbit/ui/utils/I18N.java | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index 14f1838b0..223196e93 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -820,8 +820,8 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Test different assignment results, after assign a ds") - public void testAlreadyAssignedTargetsToDs() { + @Description("Verfiy that the DistributionSetAssignmentResult not contains already assigned targets.") + public void verifyDistributionSetAssignmentResultNotContainsAlreadyAssignedTargets() { DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3"); // create assigned DS @@ -829,8 +829,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { dsToTargetAssigned.getVersion()); final Target target = new JpaTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList<>(); - toAssign.add(savedTarget); + final List toAssign = Lists.newArrayList(savedTarget); DistributionSetAssignmentResult assignmentResult = deploymentManagement .assignDistributionSet(dsToTargetAssigned, toAssign); assertThat(assignmentResult.getAssignedEntity()).hasSize(1); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 87ce33e39..3864ad3a6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -518,7 +518,6 @@ public class TargetTable extends AbstractTable { * Set style of target table. * */ - @SuppressWarnings("serial") private void styleTargetTable() { setCellStyleGenerator((source, itemId, propertyId) -> null); } @@ -559,7 +558,7 @@ public class TargetTable extends AbstractTable { final String targTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); if (targetList.isEmpty()) { - final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + final String actionDidNotWork = i18n.get("message.action.did.not.work"); notification.displayValidationError(actionDidNotWork); return; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java index cef37085b..ce57a49a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java @@ -66,6 +66,25 @@ public class I18N implements Serializable { * @see #getLocale() */ public String get(final String code, final Object... args) { + return getMessage(code, args); + } + + /** + * Tries to resolve the message. + * + * @param code + * the code to lookup up. + * + * @return the resolved message, or the message code if the lookup fails. + * + * @see MessageSource#getMessage(String, Object[], Locale) + * @see #getLocale() + */ + public String get(final String code) { + return getMessage(code, null); + } + + private String getMessage(final String code, final Object[] args) { try { return source.getMessage(code, args, getLocale()); } catch (final NoSuchMessageException ex) { From 5e485694628a1e4d38d03df060e33c1086ac3182 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Tue, 16 Aug 2016 13:41:15 +0200 Subject: [PATCH 10/27] Found another place where a NOT was missing Signed-off-by: Dominic Schabel --- .../ui/artifacts/details/ArtifactBeanQuery.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java index faf43b4ca..d08474a5a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java @@ -9,6 +9,9 @@ package org.eclipse.hawkbit.ui.artifacts.details; import static org.apache.commons.lang3.ArrayUtils.isEmpty; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.isNotNullOrEmpty; +import static org.springframework.data.domain.Sort.Direction.ASC; +import static org.springframework.data.domain.Sort.Direction.DESC; import java.util.List; import java.util.Map; @@ -17,7 +20,6 @@ import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.LocalArtifact; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.springframework.data.domain.Page; @@ -53,18 +55,18 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { */ public ArtifactBeanQuery(final QueryDefinition definition, final Map queryConfig, final Object[] sortIds, final boolean[] sortStates) { + super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { + if (isNotNullOrEmpty(queryConfig)) { baseSwModuleId = (Long) queryConfig.get(SPUIDefinitions.BY_BASE_SOFTWARE_MODULE); } - if (isEmpty(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. + if (!isEmpty(sortStates)) { + sort = new Sort(sortStates[0] ? ASC : DESC, (String) sortIds[0]); + for (int targetId = 1; targetId < sortIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); + sort.and(new Sort(sortStates[targetId] ? ASC : DESC, (String) sortIds[targetId])); } } } From a51bf0ac029389425215135fe84874789efec44f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 14:38:21 +0200 Subject: [PATCH 11/27] Add LabelBuilder Signed-off-by: SirWayne --- .../details/ArtifactDetailsLayout.java | 5 +- .../CreateUpdateSoftwareTypeLayout.java | 6 +- .../common/AbstractMetadataPopupLayout.java | 4 +- .../ui/common/builder/LabelBuilder.java | 111 ++++++++++++++++++ .../ui/common/builder/WindowBuilder.java | 8 ++ .../AbstractConfirmationWindowLayout.java | 9 +- .../AbstractTableDetailsLayout.java | 4 +- .../filterlayout/AbstractFilterHeader.java | 3 +- .../ui/common/table/AbstractTableHeader.java | 5 +- .../ui/components/SPUIComponentProvider.java | 76 ------------ .../ui/components/SPUIHorizontalLayout.java | 49 -------- .../ui/decorators/SPUILabelDecorator.java | 65 ---------- .../CreateOrUpdateFilterHeader.java | 8 +- .../CreateOrUpdateFilterTable.java | 4 +- .../filtermanagement/TargetFilterHeader.java | 4 +- .../AbstractCreateUpdateTagLayout.java | 5 +- .../ui/layouts/CreateUpdateTypeLayout.java | 6 +- .../actionhistory/ActionHistoryHeader.java | 7 +- .../actionhistory/ActionHistoryTable.java | 12 +- .../targettag/FilterByStatusLayout.java | 6 +- .../rollout/AddUpdateRolloutWindowLayout.java | 9 +- .../ui/rollout/rollout/RolloutListHeader.java | 6 +- .../rolloutgroup/RolloutGroupsListHeader.java | 4 +- .../RolloutGroupTargetsListHeader.java | 4 +- ...AuthenticationTenantConfigurationItem.java | 5 +- ...ficateAuthenticationConfigurationItem.java | 5 +- ...yTokenAuthenticationConfigurationItem.java | 4 +- .../ui/utils/SPUILabelDefinitions.java | 12 -- .../ui/utils/SPUIComponentProviderTest.java | 20 ---- 29 files changed, 185 insertions(+), 281 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/LabelBuilder.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java index c62637117..8408f7c74 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java @@ -24,6 +24,7 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -149,8 +150,8 @@ public class ArtifactDetailsLayout extends VerticalLayout { final SoftwareModule softwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); labelStr = HawkbitCommonUtil.getFormattedNameVersion(softwareModule.getName(), softwareModule.getVersion()); } - titleOfArtifactDetails = SPUIComponentProvider.getLabel( - HawkbitCommonUtil.getArtifactoryDetailsLabelId(labelStr), SPUILabelDefinitions.SP_WIDGET_CAPTION); + titleOfArtifactDetails = new LabelBuilder().name(HawkbitCommonUtil.getArtifactoryDetailsLabelId(labelStr)) + .buildCaptionLabel(); titleOfArtifactDetails.setContentMode(ContentMode.HTML); titleOfArtifactDetails.setSizeFull(); titleOfArtifactDetails.setImmediate(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 06fb8ed18..f57bef2d1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -74,8 +75,9 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { singleAssignStr = i18n.get("label.singleAssign.type"); multiAssignStr = i18n.get("label.multiAssign.type"); - singleAssign = SPUIComponentProvider.getLabel(singleAssignStr, null); - multiAssign = SPUIComponentProvider.getLabel(multiAssignStr, null); + singleAssign = new LabelBuilder().name(singleAssignStr).buildLabel(); + + multiAssign = new LabelBuilder().name(multiAssignStr).buildLabel(); tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index 972722d36..d3893e40d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -16,6 +16,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.MetaData; import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; @@ -24,7 +25,6 @@ import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; @@ -303,7 +303,7 @@ public abstract class AbstractMetadataPopupLayout extends } private Label createHeaderCaption() { - return SPUIComponentProvider.getLabel(getDefaultCaption(), SPUILabelDefinitions.SP_WIDGET_CAPTION); + return new LabelBuilder().name(getDefaultCaption()).buildCaptionLabel(); } protected VerticalLayout getTabLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java index ae497e41e..104d602dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.common.filterlayout; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -91,7 +92,7 @@ public abstract class AbstractFilterHeader extends VerticalLayout { } private Label createHeaderCaption() { - return SPUIComponentProvider.getLabel(getTitle(), SPUILabelDefinitions.SP_WIDGET_CAPTION); + return new LabelBuilder().name(getTitle()).buildCaptionLabel(); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java index 3631b6678..54fee678f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java @@ -12,6 +12,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -203,9 +204,7 @@ public abstract class AbstractTableHeader extends VerticalLayout { } private Label createHeaderCaption() { - final Label captionLabel = SPUIComponentProvider.getLabel(getHeaderCaption(), - SPUILabelDefinitions.SP_WIDGET_CAPTION); - return captionLabel; + return new LabelBuilder().name(getHeaderCaption()).buildCaptionLabel(); } private TextField createSearchField() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 1d8880d91..063a5325f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -15,10 +15,8 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; -import org.eclipse.hawkbit.ui.decorators.HeaderLayoutDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; -import org.eclipse.hawkbit.ui.decorators.SPUILabelDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextAreaDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextFieldDecorator; import org.eclipse.hawkbit.ui.utils.I18N; @@ -33,7 +31,6 @@ import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Link; import com.vaadin.ui.Panel; @@ -59,79 +56,6 @@ public final class SPUIComponentProvider { } - /** - * @param className - * @return - */ - public static HorizontalLayout getHorizontalLayout(final Class className) { - HorizontalLayout hLayout = null; - try { - - hLayout = className.newInstance(); - } catch (final InstantiationException exception) { - LOG.error("Error occured while creating HorizontalLayout-" + className, exception); - } catch (final IllegalAccessException exception) { - LOG.error("Error occured while acessing HorizontalLayout-" + className, exception); - } - - return hLayout; - } - - /** - * Get HorizontalLayout UI component. - * - * @return HorizontalLayout as UI - */ - public static HorizontalLayout getHorizontalLayout() { - HorizontalLayout hLayout = null; - try { - hLayout = HorizontalLayout.class.newInstance(); - } catch (final InstantiationException exception) { - LOG.error("Error occured while creating HorizontalLayout-", exception); - } catch (final IllegalAccessException exception) { - LOG.error("Error occured while acessing HorizontalLayout-", exception); - } - - return hLayout; - } - - /** - * @param tableHeaderLayoutDecorator - * @return - */ - public static HorizontalLayout getHeaderLayout( - final Class tableHeaderLayoutDecorator) { - // Do we really need this??? - HorizontalLayout hLayout = getHorizontalLayout(new SPUIHorizontalLayout().getUiHorizontalLayout().getClass()); - - if (tableHeaderLayoutDecorator == null) { - return hLayout; - } - - try { - final HeaderLayoutDecorator layoutDecorator = tableHeaderLayoutDecorator.newInstance(); - hLayout = layoutDecorator.decorate(hLayout); - - } catch (final InstantiationException | IllegalAccessException exception) { - LOG.error("Error occured while creating horizontal decorator " + HeaderLayoutDecorator.class, exception); - } - - return hLayout; - } - - /** - * Get Label UI component. - * - * @param name - * label caption - * @param type - * string simple|Confirm|Message - * @return Label - */ - public static Label getLabel(final String name, final String type) { - return SPUILabelDecorator.getDeocratedLabel(name, type); - } - /** * Get Label UI component. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java deleted file mode 100644 index 33d040330..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java +++ /dev/null @@ -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.components; - -import com.vaadin.ui.HorizontalLayout; - -/** - * Plain Horizontal Layout. - * - * - * - */ - -public class SPUIHorizontalLayout { - private final HorizontalLayout uiHorizontalLayout; - - /** - * Default constructor. - */ - public SPUIHorizontalLayout() { - uiHorizontalLayout = new HorizontalLayout(); - decorate(); - } - - /** - * Decorate. - */ - private void decorate() { - uiHorizontalLayout.setImmediate(false); - uiHorizontalLayout.setMargin(false); - uiHorizontalLayout.setSpacing(true); - - } - - /** - * Get HorizontalLayout. - * - * @return HorizontalLayout as UI - */ - public HorizontalLayout getUiHorizontalLayout() { - return uiHorizontalLayout; - } -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java deleted file mode 100644 index a42b51566..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java +++ /dev/null @@ -1,65 +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.decorators; - -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; - -import com.vaadin.shared.ui.label.ContentMode; -import com.vaadin.ui.Label; -import com.vaadin.ui.themes.ValoTheme; - -/** - * Simple Decorator for the label. - * - * - * - * - * - */ -public final class SPUILabelDecorator { - - /** - * Private Constructor. - */ - private SPUILabelDecorator() { - - } - - /** - * Simple decorator. - * - * @param name - * as String - * @param type - * as String - * @return Label - */ - public static Label getDeocratedLabel(final String name, final String type) { - final Label spUILabel = new Label(name); - // Set style. - final StringBuilder style = new StringBuilder(ValoTheme.LABEL_SMALL); - style.append(' '); - style.append(ValoTheme.LABEL_BOLD); - spUILabel.addStyleName(style.toString()); - if (SPUILabelDefinitions.SP_WIDGET_CAPTION.equalsIgnoreCase(type)) { - spUILabel.setValue(name); - spUILabel.addStyleName("header-caption"); - } else if (SPUILabelDefinitions.SP_LABEL_MESSAGE.equalsIgnoreCase(type)) { - spUILabel.setContentMode(ContentMode.HTML); - spUILabel.addStyleName(SPUILabelDefinitions.SP_LABEL_MESSAGE_STYLE); - } else { - spUILabel.setImmediate(false); - spUILabel.setWidth("-1px"); - spUILabel.setHeight("-1px"); - } - - return spUILabel; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index 1023d98ed..a5ff7be66 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -217,10 +218,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button breadcrumbButton = createBreadcrumbButton(); - headerCaption = SPUIComponentProvider.getLabel(SPUILabelDefinitions.VAR_CREATE_FILTER, - SPUILabelDefinitions.SP_WIDGET_CAPTION); + headerCaption = new LabelBuilder().name(SPUILabelDefinitions.VAR_CREATE_FILTER).buildCaptionLabel(); - nameLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + nameLabel = new LabelBuilder().name("").buildLabel(); nameLabel.setId(SPUIComponentIdProvider.TARGET_FILTER_QUERY_NAME_LABEL_ID); nameTextField = createNameTextField(); @@ -307,7 +307,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button breadcrumbLayout = new HorizontalLayout(); breadcrumbLayout.addComponent(breadcrumbButton); breadcrumbLayout.addComponent(new Label(">")); - breadcrumbName = SPUIComponentProvider.getLabel(null, SPUILabelDefinitions.SP_WIDGET_CAPTION); + breadcrumbName = new LabelBuilder().buildCaptionLabel(); breadcrumbLayout.addComponent(breadcrumbName); breadcrumbName.addStyleName("breadcrumbPaddingLeft"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java index bb5707c40..e447a257a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java @@ -19,7 +19,7 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.AssignInstalledDSTooltipGenerator; @@ -209,7 +209,7 @@ public class CreateOrUpdateFilterTable extends Table { final Item row1 = getItem(itemId); final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1 .getItemProperty(SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); - final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label label = new LabelBuilder().name("").buildLabel(); label.setContentMode(ContentMode.HTML); if (targetStatus == TargetUpdateStatus.PENDING) { label.setDescription("Pending"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java index b5d796ebb..32347ae24 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.filtermanagement; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -78,8 +79,7 @@ public class TargetFilterHeader extends VerticalLayout { } private Label createHeaderCaption() { - return SPUIComponentProvider.getLabel(SPUIDefinitions.TARGET_FILTER_LIST_HEADER_CAPTION, - SPUILabelDefinitions.SP_WIDGET_CAPTION); + return new LabelBuilder().name(SPUIDefinitions.TARGET_FILTER_LIST_HEADER_CAPTION).buildCaptionLabel(); } private void buildLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 91b11146a..bd62a0cb0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerLayout; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -147,8 +148,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent createTagStr = i18n.get("label.create.tag"); updateTagStr = i18n.get("label.update.tag"); - comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag"), null); - colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); + comboLabel = new LabelBuilder().name(i18n.get("label.choose.tag")).buildLabel(); + colorLabel = new LabelBuilder().name(i18n.get("label.choose.tag.color")).buildLabel(); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index f25a4b485..e15dcffc3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -13,6 +13,7 @@ import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -56,8 +57,9 @@ public abstract class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayo createTypeStr = i18n.get("label.create.type"); updateTypeStr = i18n.get("label.update.type"); - comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); - colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); + comboLabel = new LabelBuilder().name(i18n.get("label.choose.type")).buildLabel(); + colorLabel = new LabelBuilder().name(i18n.get("label.choose.type.color")).buildLabel(); + colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java index 828b61d43..22551f28c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.management.actionhistory; import javax.annotation.PostConstruct; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -17,7 +18,6 @@ import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -63,8 +63,9 @@ public class ActionHistoryHeader extends VerticalLayout { private void buildComponent() { // create default title - it will be shown even when no data is // available - titleOfActionHistory = SPUIComponentProvider.getLabel(HawkbitCommonUtil.getArtifactoryDetailsLabelId(""), - SPUILabelDefinitions.SP_WIDGET_CAPTION); + titleOfActionHistory = new LabelBuilder().name(HawkbitCommonUtil.getArtifactoryDetailsLabelId("")) + .buildCaptionLabel(); + titleOfActionHistory.setImmediate(true); titleOfActionHistory.setContentMode(ContentMode.HTML); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index ffc7d1e3a..71c489aa0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -25,6 +25,7 @@ import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -36,7 +37,6 @@ import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -357,7 +357,7 @@ public class ActionHistoryTable extends TreeTable { private Component getForcedColumn(final Object itemId) { final Action actionWithActiveStatus = (Action) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).getValue(); - final Label actionLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label actionLabel = new LabelBuilder().name("").buildCaptionLabel(); actionLabel.setContentMode(ContentMode.HTML); actionLabel.setStyleName("action-history-table-col-forced-label"); if (actionWithActiveStatus != null && actionWithActiveStatus.getActionType() == ActionType.FORCED) { @@ -522,7 +522,7 @@ public class ActionHistoryTable extends TreeTable { * @return Label as UI */ private Label getStatusIcon(final Action.Status status) { - final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label label = new LabelBuilder().name("").buildLabel(); final String statusIconPending = "statusIconPending"; label.setContentMode(ContentMode.HTML); if (Action.Status.FINISHED == status) { @@ -576,7 +576,7 @@ public class ActionHistoryTable extends TreeTable { final long currentTimeMillis = System.currentTimeMillis(); final HorizontalLayout hLayout = new HorizontalLayout(); - final Label autoForceLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label autoForceLabel = new LabelBuilder().name("").buildLabel(); actionLabel.setValue(FontAwesome.BOLT.getHtml()); autoForceLabel.setContentMode(ContentMode.HTML); @@ -608,8 +608,8 @@ public class ActionHistoryTable extends TreeTable { * as String * @return Labeal as UI */ - private Label createActiveStatusLabel(final String activeValue, final boolean endedWithError) { - final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + private static Label createActiveStatusLabel(final String activeValue, final boolean endedWithError) { + final Label label = new LabelBuilder().name("").buildLabel(); label.setContentMode(ContentMode.HTML); if (SPUIDefinitions.SCHEDULED.equals(activeValue)) { label.setDescription("Scheduled"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java index 27a53bfed..67f74d064 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java @@ -12,6 +12,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -20,7 +21,6 @@ import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIButtonDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; @@ -84,8 +84,8 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click addStyleName("target-status-filters"); setMargin(false); - final Label targetFilterStatusLabel = SPUIComponentProvider.getLabel(i18n.get("label.filter.by.status"), - SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label targetFilterStatusLabel = new LabelBuilder().name(i18n.get("label.filter.by.status")).buildLabel(); + targetFilterStatusLabel.addStyleName("target-status-filters-title"); addComponent(targetFilterStatusLabel); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index bd18ea113..2e0399225 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -30,6 +30,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; @@ -258,7 +259,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private Label getLabel(final String key) { - return SPUIComponentProvider.getLabel(i18n.get(key), SPUILabelDefinitions.SP_LABEL_SIMPLE); + return new LabelBuilder().name(i18n.get(key)).buildLabel(); } private TextField getTextfield(final String key) { @@ -266,7 +267,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); } - private Label getPercentHintLabel() { + private static Label getPercentHintLabel() { final Label percentSymbol = new Label("%"); percentSymbol.addStyleName(ValoTheme.LABEL_TINY + " " + ValoTheme.LABEL_BOLD); percentSymbol.setSizeUndefined(); @@ -295,7 +296,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private Label createGroupSizeLabel() { - final Label groupSize = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label groupSize = new LabelBuilder().name("").buildLabel(); groupSize.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); groupSize.setImmediate(true); groupSize.setVisible(false); @@ -315,7 +316,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private Label createTotalTargetsLabel() { - final Label targetCountLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label targetCountLabel = new LabelBuilder().name("").buildLabel(); targetCountLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); targetCountLabel.setImmediate(true); targetCountLabel.setVisible(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 81608d42d..f0f14432b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -11,13 +11,12 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -134,8 +133,7 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected HorizontalLayout getHeaderCaptionLayout() { - final Label headerCaption = SPUIComponentProvider.getLabel(getHeaderCaption(), - SPUILabelDefinitions.SP_WIDGET_CAPTION); + final Label headerCaption = new LabelBuilder().name(getHeaderCaption()).buildCaptionLabel(); final HorizontalLayout headerCaptionLayout = new HorizontalLayout(); headerCaptionLayout.addComponent(headerCaption); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java index 9e4d18143..2e01a7c05 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -18,7 +19,6 @@ import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; @@ -149,7 +149,7 @@ public class RolloutGroupsListHeader extends AbstractGridHeader { @Override protected HorizontalLayout getHeaderCaptionLayout() { - headerCaption = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_WIDGET_CAPTION); + headerCaption = new LabelBuilder().name("").buildCaptionLabel(); headerCaption.setId(SPUIComponentIdProvider.ROLLOUT_GROUP_HEADER_CAPTION); final Button rolloutsListViewLink = SPUIComponentProvider.getButton(null, "", "", null, false, null, SPUIButtonStyleSmallNoBorder.class); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java index c22bed8dd..965e1e9b2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java @@ -12,6 +12,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -19,7 +20,6 @@ import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; @@ -164,7 +164,7 @@ public class RolloutGroupTargetsListHeader extends AbstractGridHeader { @Override protected HorizontalLayout getHeaderCaptionLayout() { - headerCaption = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_WIDGET_CAPTION); + headerCaption = new LabelBuilder().name("").buildCaptionLabel(); headerCaption.setStyleName(ValoTheme.LABEL_BOLD + " " + ValoTheme.LABEL_SMALL); final Button rolloutsListViewLink = SPUIComponentProvider.getButton(null, "", "", null, false, null, SPUIButtonStyleSmallNoBorder.class); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java index 4f222f080..a31de899f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java @@ -13,9 +13,8 @@ import java.util.List; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.ui.VerticalLayout; @@ -58,7 +57,7 @@ abstract class AbstractAuthenticationTenantConfigurationItem extends VerticalLay */ protected void init(final String labelText) { setImmediate(true); - addComponent(SPUIComponentProvider.getLabel(i18n.get(labelText), SPUILabelDefinitions.SP_LABEL_SIMPLE)); + addComponent(new LabelBuilder().name(i18n.get(labelText)).buildLabel()); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java index 872bdef29..d7203772a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java @@ -12,8 +12,8 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -61,8 +61,7 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti final HorizontalLayout caRootAuthorityLayout = new HorizontalLayout(); caRootAuthorityLayout.setSpacing(true); - final Label caRootAuthorityLabel = SPUIComponentProvider.getLabel("SSL Issuer Hash:", - SPUILabelDefinitions.SP_LABEL_SIMPLE); + final Label caRootAuthorityLabel = new LabelBuilder().name("SSL Issuer Hash:").buildLabel(); caRootAuthorityLabel.setDescription( "The SSL Issuer iRules.X509 hash, to validate against the controller request certifcate."); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java index 31e910ddc..572cfe763 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java @@ -13,6 +13,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -87,8 +88,7 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac gatewaytokenBtn.setIcon(FontAwesome.REFRESH); gatewaytokenBtn.addClickListener(event -> generateGatewayToken()); - gatewayTokenkeyLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); - gatewayTokenkeyLabel.setId("gatewaysecuritytokenkey"); + gatewayTokenkeyLabel = new LabelBuilder().id("gatewaysecuritytokenkey").name("").buildLabel(); gatewayTokenkeyLabel.addStyleName("gateway-token-label"); gatewayTokenkeyLabel.setImmediate(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java index 22d680872..a5bb24831 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java @@ -20,18 +20,6 @@ import com.vaadin.ui.themes.ValoTheme; */ public final class SPUILabelDefinitions { - /** - * Label - Table. - */ - public static final String SP_WIDGET_CAPTION = "Label-table"; - /** - * Label - Simple. - */ - public static final String SP_LABEL_SIMPLE = "Label-simple"; - /** - * Label - Message. - */ - public static final String SP_LABEL_MESSAGE = "Label-message"; /** * Label - Message hint. */ diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java index f818bc15d..9fc6c5855 100644 --- a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java +++ b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java @@ -15,9 +15,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorderUH; import org.junit.Test; -import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Button; -import com.vaadin.ui.Label; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -46,22 +44,4 @@ public class SPUIComponentProviderTest { assertThat(placeHolderButton.getStyleName()).isEqualTo(SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE); } - /** - * Test case for check Label factory. - * - * @throws Exception - */ - @Test - public void checkLabelFactory() throws Exception { - - Label placeHolderLabel = null; - placeHolderLabel = SPUIComponentProvider.getLabel("TestTable", SPUILabelDefinitions.SP_WIDGET_CAPTION); - assertThat(placeHolderLabel).isInstanceOf(Label.class); - assertThat(placeHolderLabel.getValue()).isEqualTo("TestTable"); - assertThat(placeHolderLabel.getContentMode()).isNotEqualTo(ContentMode.HTML); - placeHolderLabel = SPUIComponentProvider.getLabel("TestMSG", SPUILabelDefinitions.SP_LABEL_MESSAGE); - assertThat(placeHolderLabel.getValue()).isEqualTo("TestMSG"); - assertThat(placeHolderLabel.getContentMode()).isEqualTo(ContentMode.HTML); - } - } From 8ccc9811a8b27d2a099aab501ea15fabaf63353d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 14:51:36 +0200 Subject: [PATCH 12/27] Add LabelBuilder Signed-off-by: SirWayne --- .../ui/common/builder/LabelBuilder.java | 21 +++---------------- .../actionhistory/ActionHistoryTable.java | 4 +--- .../rollout/AddUpdateRolloutWindowLayout.java | 20 +++++------------- .../rolloutgroup/RolloutGroupsListHeader.java | 4 ++-- 4 files changed, 11 insertions(+), 38 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/LabelBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/LabelBuilder.java index 576c95c15..12d50149a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/LabelBuilder.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/LabelBuilder.java @@ -8,14 +8,11 @@ */ package org.eclipse.hawkbit.ui.common.builder; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; - -import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Label; import com.vaadin.ui.themes.ValoTheme; /** - * Simple Decorator for the label. + * Label Builder. * */ public class LabelBuilder { @@ -57,7 +54,7 @@ public class LabelBuilder { } /** - * Simple builder. + * Build caption label. * * @return Label */ @@ -69,19 +66,7 @@ public class LabelBuilder { } /** - * Simple builder. - * - * @return Label - */ - public Label buildMessageLabel() { - final Label label = createLabel(); - label.setContentMode(ContentMode.HTML); - label.addStyleName(SPUILabelDefinitions.SP_LABEL_MESSAGE_STYLE); - return label; - } - - /** - * Simple builder. + * Build label. * * @return Label */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index 71c489aa0..357ef04dc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -576,13 +576,11 @@ public class ActionHistoryTable extends TreeTable { final long currentTimeMillis = System.currentTimeMillis(); final HorizontalLayout hLayout = new HorizontalLayout(); - final Label autoForceLabel = new LabelBuilder().name("").buildLabel(); + final Label autoForceLabel = new LabelBuilder().name("").id("action.history.table.timedforceId").buildLabel(); actionLabel.setValue(FontAwesome.BOLT.getHtml()); autoForceLabel.setContentMode(ContentMode.HTML); autoForceLabel.setValue(FontAwesome.HISTORY.getHtml()); - // setted Id for TimedForced. - autoForceLabel.setId("action.history.table.timedforceId"); hLayout.addComponent(actionLabel); hLayout.addComponent(autoForceLabel); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 2e0399225..7679869a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -283,28 +283,27 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { populateTargetFilterQuery(); noOfGroups = createNoOfGroupsField(); - groupSizeLabel = createGroupSizeLabel(); + groupSizeLabel = createCountLabel(); triggerThreshold = createTriggerThreshold(); errorThreshold = createErrorThreshold(); description = createDescription(); errorThresholdOptionGroup = createErrorThresholdOptionGroup(); setDefaultSaveStartGroupOption(); actionTypeOptionGroupLayout.selectDefaultOption(); - totalTargetsLabel = createTotalTargetsLabel(); + totalTargetsLabel = createCountLabel(); targetFilterQuery = createTargetFilterQuery(); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); } - private Label createGroupSizeLabel() { - final Label groupSize = new LabelBuilder().name("").buildLabel(); + private static Label createCountLabel() { + final Label groupSize = new LabelBuilder().visible(false).name("").buildLabel(); groupSize.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); groupSize.setImmediate(true); - groupSize.setVisible(false); groupSize.setSizeUndefined(); return groupSize; } - private TextArea createTargetFilterQuery() { + private static TextArea createTargetFilterQuery() { final TextArea filterField = SPUIComponentProvider.getTextArea(null, "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, null, SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); @@ -315,15 +314,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return filterField; } - private Label createTotalTargetsLabel() { - final Label targetCountLabel = new LabelBuilder().name("").buildLabel(); - targetCountLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); - targetCountLabel.setImmediate(true); - targetCountLabel.setVisible(false); - targetCountLabel.setSizeUndefined(); - return targetCountLabel; - } - private OptionGroup createErrorThresholdOptionGroup() { final OptionGroup errorThresoldOptions = new OptionGroup(); for (final ERRORTHRESOLDOPTIONS option : ERRORTHRESOLDOPTIONS.values()) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java index 2e01a7c05..2549db85b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java @@ -149,8 +149,8 @@ public class RolloutGroupsListHeader extends AbstractGridHeader { @Override protected HorizontalLayout getHeaderCaptionLayout() { - headerCaption = new LabelBuilder().name("").buildCaptionLabel(); - headerCaption.setId(SPUIComponentIdProvider.ROLLOUT_GROUP_HEADER_CAPTION); + headerCaption = new LabelBuilder().id(SPUIComponentIdProvider.ROLLOUT_GROUP_HEADER_CAPTION).name("") + .buildCaptionLabel(); final Button rolloutsListViewLink = SPUIComponentProvider.getButton(null, "", "", null, false, null, SPUIButtonStyleSmallNoBorder.class); rolloutsListViewLink.setStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link rollout-caption-links"); From 6db64dd5df7ae3fd8a896290812ccf1f681fa73d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 15:27:45 +0200 Subject: [PATCH 13/27] Merge master Signed-off-by: SirWayne --- .../hawkbit/repository/jpa/model/JpaDistributionSet.java | 6 +++--- .../jpa/model/helper/EntityPropertyChangeHelper.java | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java index 0fa2d0c33..661474668 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java @@ -34,7 +34,7 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; -import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent.PropertyChange; import org.eclipse.hawkbit.repository.eventbus.event.DistributionCreatedEvent; import org.eclipse.hawkbit.repository.eventbus.event.DistributionDeletedEvent; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetUpdateEvent; @@ -299,8 +299,8 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen @Override public void fireUpdateEvent(final DescriptorEvent descriptorEvent) { - final Map.Values> changeSet = EntityPropertyChangeHelper - .getChangeSet(JpaDistributionSet.class, descriptorEvent); + final Map changeSet = EntityPropertyChangeHelper.getChangeSet(JpaDistributionSet.class, + descriptorEvent); EventBusHolder.getInstance().getEventBus().post(new DistributionSetUpdateEvent(this)); if (changeSet.containsKey(DELETED_PROPERTY)) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EntityPropertyChangeHelper.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EntityPropertyChangeHelper.java index 2be398e24..9e759640d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EntityPropertyChangeHelper.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EntityPropertyChangeHelper.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.model.helper; import java.util.Map; import java.util.stream.Collectors; -import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent.PropertyChange; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.internal.sessions.ObjectChangeSet; @@ -32,15 +32,14 @@ public class EntityPropertyChangeHelper { * @param event * @return the map of the changeSet */ - public static Map.Values> getChangeSet( - final Class clazz, final DescriptorEvent event) { + public static Map getChangeSet(final Class clazz, + final DescriptorEvent event) { final T rolloutGroup = clazz.cast(event.getObject()); final ObjectChangeSet changeSet = ((UpdateObjectQuery) event.getQuery()).getObjectChangeSet(); return changeSet.getChanges().stream().filter(record -> record instanceof DirectToFieldChangeRecord) .map(record -> (DirectToFieldChangeRecord) record) .collect(Collectors.toMap(record -> record.getAttribute(), - record -> new AbstractPropertyChangeEvent(rolloutGroup, null).new Values( - record.getOldValue(), record.getNewValue()))); + record -> new PropertyChange(record.getOldValue(), record.getNewValue()))); } } From 876c5996173de83753a6a4759cb20397180203ed Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Tue, 16 Aug 2016 15:28:45 +0200 Subject: [PATCH 14/27] Found another place where a NOT was missing Signed-off-by: Dominic Schabel --- .../CustomTargetBeanQuery.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java index e82c6560e..f7670e316 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java @@ -9,6 +9,10 @@ package org.eclipse.hawkbit.ui.filtermanagement; import static org.apache.commons.lang3.ArrayUtils.isEmpty; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.isNotNullOrEmpty; +import static org.eclipse.hawkbit.ui.utils.SPUIDefinitions.FILTER_BY_QUERY; +import static org.springframework.data.domain.Sort.Direction.ASC; +import static org.springframework.data.domain.Sort.Direction.DESC; import java.util.ArrayList; import java.util.List; @@ -63,22 +67,22 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { final Object[] sortIds, final boolean[] sortStates) { super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.isNotNullOrEmpty(queryConfig)) { - filterQuery = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_QUERY); + if (isNotNullOrEmpty(queryConfig)) { + filterQuery = (String) queryConfig.get(FILTER_BY_QUERY); } - if (isEmpty(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. + + if (!isEmpty(sortStates)) { + + sort = new Sort(sortStates[0] ? ASC : DESC, (String) sortIds[0]); + for (int targetId = 1; targetId < sortIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); + sort.and(new Sort(sortStates[targetId] ? ASC : DESC, (String) sortIds[targetId])); } } } @Override protected ProxyTarget constructBean() { - return new ProxyTarget(); } From 1094c3c12ff58a205be71c0ba2b9f66af63f2d29 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Tue, 16 Aug 2016 16:11:15 +0200 Subject: [PATCH 15/27] Found another place where a NOT was missing Signed-off-by: Dominic Schabel --- .../ui/rollout/rollout/RolloutBeanQuery.java | 7 +++---- .../rolloutgroup/RolloutGroupBeanQuery.java | 17 ++++++++++------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java index a1ab1024a..e13be8f3f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.apache.commons.lang3.ArrayUtils; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -74,10 +73,10 @@ public class RolloutBeanQuery extends AbstractBeanQuery { searchText = getSearchText(); - if (isEmpty(sortStates)) { - // Initalize Sor + if (!isEmpty(sortStates)) { + sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. + for (int targetId = 1; targetId < sortIds.length; targetId++) { sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java index 002adbe03..ab66b425d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java @@ -8,11 +8,14 @@ */ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; +import static org.apache.commons.lang3.ArrayUtils.isEmpty; +import static org.springframework.data.domain.Sort.Direction.ASC; +import static org.springframework.data.domain.Sort.Direction.DESC; + import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.apache.commons.lang3.ArrayUtils; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -65,17 +68,17 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery */ public RolloutGroupBeanQuery(final QueryDefinition definition, final Map queryConfig, final Object[] sortPropertyIds, final boolean[] sortStates) { + super(definition, queryConfig, sortPropertyIds, sortStates); rolloutId = getRolloutId(); - if (ArrayUtils.isEmpty(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortPropertyIds[0]); - // Add sort. + if (!isEmpty(sortStates)) { + + sort = new Sort(sortStates[0] ? ASC : DESC, (String) sortPropertyIds[0]); + for (int targetId = 1; targetId < sortPropertyIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, - (String) sortPropertyIds[targetId])); + sort.and(new Sort(sortStates[targetId] ? ASC : DESC, (String) sortPropertyIds[targetId])); } } } From 1d825f9c74363c2d691980292460bd0b2a37c1a8 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 17:33:06 +0200 Subject: [PATCH 16/27] Add a textfield builder Signed-off-by: SirWayne --- .../jpa/JpaDistributionSetManagement.java | 13 +- .../SoftwareModuleAddUpdateWindow.java | 24 ++- .../CreateUpdateSoftwareTypeLayout.java | 17 +- .../upload/UploadConfirmationWindow.java | 23 ++- .../common/AbstractMetadataPopupLayout.java | 7 +- .../ui/common/builder/TextFieldBuilder.java | 170 ++++++++++++++++++ .../DistributionSetMetadatadetailslayout.java | 2 +- .../ui/common/grid/AbstractGridHeader.java | 19 +- .../ui/common/table/AbstractTableHeader.java | 17 +- .../ui/components/SPUIComponentProvider.java | 30 ---- .../ui/decorators/SPUITextFieldDecorator.java | 88 --------- .../CreateUpdateDistSetTypeLayout.java | 19 +- .../CreateOrUpdateFilterHeader.java | 15 +- .../filtermanagement/TargetFilterHeader.java | 14 +- .../AbstractCreateUpdateTagLayout.java | 9 +- .../DistributionAddUpdateWindowLayout.java | 20 +-- .../TargetAddUpdateWindowLayout.java | 23 +-- .../rollout/AddUpdateRolloutWindowLayout.java | 44 +++-- ...ficateAuthenticationConfigurationItem.java | 7 +- ...yTokenAuthenticationConfigurationItem.java | 14 +- .../ui/utils/SPUILabelDefinitions.java | 4 - 21 files changed, 294 insertions(+), 285 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextFieldBuilder.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 8736fefd7..e170ccad7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -483,7 +483,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { if (distributionSetMetadataRepository.exists(metadata.getId())) { throwMetadataKeyAlreadyExists(metadata.getId().getKey()); } - + touch(metadata.getDistributionSet()); return distributionSetMetadataRepository.save(metadata); } @@ -515,7 +515,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { findOne(metadata.getDistributionSet(), metadata.getKey()); // touch it to update the lock revision because we are modifying the // DS indirectly - touch(metadata.getDistributionSet());; + touch(metadata.getDistributionSet()); return distributionSetMetadataRepository.save(metadata); } @@ -528,8 +528,11 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { } /** - * Method to get the latest distribution set based on ds ID after the metadata changes for that distribution set. - * @param distributionSet Distribution set + * Method to get the latest distribution set based on ds ID after the + * metadata changes for that distribution set. + * + * @param distributionSet + * Distribution set */ private void touch(final DistributionSet distributionSet) { final DistributionSet latestDistributionSet = findDistributionSetById(distributionSet.getId()); @@ -552,7 +555,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override public List findDistributionSetMetadataByDistributionSetId(final Long distributionSetId) { - return new ArrayList(distributionSetMetadataRepository + return new ArrayList<>(distributionSetMetadataRepository .findAll((Specification) (root, query, cb) -> cb.equal( root.get(JpaDistributionSetMetadata_.distributionSet).get(JpaDistributionSet_.id), distributionSetId))); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 52f377366..65310e6d3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -118,21 +119,13 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se } private void createRequiredComponents() { - /* name textfield */ - nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, - true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); - /* version text field */ - versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); + nameTextField = createTextField("textfield.name", SPUIComponentIdProvider.SOFT_MODULE_NAME); - /* Vendor text field */ - vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, - false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR); + versionTextField = createTextField("textfield.version", SPUIComponentIdProvider.SOFT_MODULE_VERSION); + + vendorTextField = createTextField("textfield.vendor", SPUIComponentIdProvider.SOFT_MODULE_VENDOR); + vendorTextField.setRequired(false); descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), @@ -148,6 +141,11 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se populateTypeNameCombo(); } + private TextField createTextField(final String in18Key, final String id) { + return new TextFieldBuilder().caption(i18n.get(in18Key)).required(true).prompt(i18n.get(in18Key)) + .immediate(true).id(id).buildTextField(); + } + private void populateTypeNameCombo() { typeComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(SoftwareModuleTypeBeanQuery.class))); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index f57bef2d1..63f93807a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareMo import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -36,6 +37,7 @@ import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; +import com.vaadin.ui.TextField; import com.vaadin.ui.components.colorpicker.ColorChangeListener; import com.vaadin.ui.themes.ValoTheme; @@ -79,15 +81,9 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { multiAssign = new LabelBuilder().name(multiAssignStr).buildLabel(); - tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", - ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - tagName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); + tagName = createTextField("textfield.name", SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME, SPUIDefinitions.TYPE_NAME); - typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", - ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY); + typeKey = createTextField("textfield.key", SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY, SPUIDefinitions.TYPE_KEY); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", @@ -99,6 +95,11 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { singleMultiOptionGroup(); } + private TextField createTextField(final String in18Key, final String id, final String styleName) { + return new TextFieldBuilder().caption(i18n.get(in18Key)).styleName(ValoTheme.TEXTFIELD_TINY + " " + styleName) + .required(true).prompt(i18n.get(in18Key)).immediate(true).id(id).buildTextField(); + } + @Override protected void buildLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationWindow.java index e5a9b72fc..c89ad723b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationWindow.java @@ -26,6 +26,7 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleTiny; @@ -248,29 +249,27 @@ public class UploadConfirmationWindow implements Button.ClickListener { deleteIcon.setData(itemId); newItem.getItemProperty(ACTION).setValue(deleteIcon); - final TextField sha1 = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - sha1.setId(swNameVersion + "/" + customFile.getFileName() + "/sha1"); + final TextField sha1 = createTextField(swNameVersion + "/" + customFile.getFileName() + "/sha1"); - final TextField md5 = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - md5.setId(swNameVersion + "/" + customFile.getFileName() + "/md5"); + final TextField md5 = createTextField(swNameVersion + "/" + customFile.getFileName() + "/md5"); + + createTextField(swNameVersion + "/" + customFile.getFileName() + "/customFileName"); - final TextField customFileName = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, - false, null, null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - customFileName.setId(swNameVersion + "/" + customFile.getFileName() + "/customFileName"); newItem.getItemProperty(SHA1_CHECKSUM).setValue(sha1); newItem.getItemProperty(MD5_CHECKSUM).setValue(md5); newItem.getItemProperty(CUSTOM_FILE).setValue(customFile); } } + private static TextField createTextField(final String id) { + return new TextFieldBuilder().immediate(true).id(id).buildTextField(); + } + private void addFileNameLayout(final Item newItem, final String baseSoftwareModuleNameVersion, final String customFileName, final String itemId) { final HorizontalLayout horizontalLayout = new HorizontalLayout(); - final TextField fileNameTextField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, - false, null, null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - fileNameTextField.setId(baseSoftwareModuleNameVersion + "/" + customFileName + "/customFileName"); + final TextField fileNameTextField = createTextField( + baseSoftwareModuleNameVersion + "/" + customFileName + "/customFileName"); fileNameTextField.setData(baseSoftwareModuleNameVersion + "/" + customFileName); fileNameTextField.setValue(customFileName); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index d3893e40d..8b80dee31 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.MetaData; import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; @@ -206,9 +207,9 @@ public abstract class AbstractMetadataPopupLayout onKeyChange(event)); keyField.setTextChangeEventMode(TextChangeEventMode.EAGER); keyField.setWidth("100%"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextFieldBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextFieldBuilder.java new file mode 100644 index 000000000..ebb9806d3 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextFieldBuilder.java @@ -0,0 +1,170 @@ +/** + * 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.builder; + +import org.apache.commons.lang3.StringUtils; + +import com.vaadin.event.FieldEvents.TextChangeListener; +import com.vaadin.server.Sizeable.Unit; +import com.vaadin.ui.AbstractTextField.TextChangeEventMode; +import com.vaadin.ui.TextField; +import com.vaadin.ui.themes.ValoTheme; + +/** + * Textfield builder. + * + */ +public class TextFieldBuilder { + + private static final int TEXT_FIELD_DEFAULT_MAX_LENGTH = 64; + + private String caption; + private String style; + private String styleName = ValoTheme.TEXTFIELD_TINY; + private String prompt; + private String id; + private boolean immediate; + private boolean required; + private int maxLengthAllowed = TEXT_FIELD_DEFAULT_MAX_LENGTH; + + /** + * @param caption + * the caption to set + * @return the builder + */ + public TextFieldBuilder caption(final String caption) { + this.caption = caption; + return this; + } + + /** + * @param style + * the style to set * @return the builder + * @return the builder + */ + public TextFieldBuilder style(final String style) { + this.style = style; + return this; + } + + /** + * @param styleName + * the styleName to set + * @return the builder + */ + public TextFieldBuilder styleName(final String styleName) { + this.styleName = styleName; + return this; + } + + /** + * @param required + * the required to set + * @return the builder + */ + public TextFieldBuilder required(final boolean required) { + this.required = required; + return this; + } + + /** + * @param prompt + * the prompt to set + * @return the builder + */ + public TextFieldBuilder prompt(final String prompt) { + this.prompt = prompt; + return this; + } + + /** + * @param immediate + * the immediate to set + * @return the builder + */ + public TextFieldBuilder immediate(final boolean immediate) { + this.immediate = immediate; + return this; + } + + /** + * @param maxLengthAllowed + * the maxLengthAllowed to set + * @return the builder + */ + public TextFieldBuilder maxLengthAllowed(final int maxLengthAllowed) { + this.maxLengthAllowed = maxLengthAllowed; + return this; + } + + /** + * @param id + * the id to set + * @return the builder + */ + public TextFieldBuilder id(final String id) { + this.id = id; + return this; + } + + /** + * Build a textfield + * + * @return textfield + */ + public TextField buildTextField() { + final TextField textField = new TextField(); + textField.addStyleName(ValoTheme.TEXTFIELD_SMALL); + textField.setRequired(required); + textField.setImmediate(immediate); + + if (StringUtils.isNotEmpty(caption)) { + textField.setCaption(caption); + } + + if (StringUtils.isNotEmpty(style)) { + textField.setStyleName(style); + } + + if (StringUtils.isNotEmpty(styleName)) { + textField.addStyleName(styleName); + } + if (StringUtils.isNotEmpty(prompt)) { + textField.setInputPrompt(prompt); + } + + if (maxLengthAllowed > 0) { + textField.setMaxLength(maxLengthAllowed); + } + + if (StringUtils.isNotEmpty(id)) { + textField.setId(id); + } + + return textField; + } + + /** + * Create a search text field. + * + * @param textChangeListener + * listener when text is changed. + * @return the textfield + */ + public TextField createSearchField(final TextChangeListener textChangeListener) { + final TextField textField = style("filter-box").styleName("text-style filter-box-hide").buildTextField(); + textField.setWidth(100.0F, Unit.PERCENTAGE); + textField.addTextChangeListener(textChangeListener); + textField.setTextChangeEventMode(TextChangeEventMode.LAZY); + // 1 seconds timeout. + textField.setTextChangeTimeout(1000); + return textField; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java index e4e0bd650..bcac6033b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java @@ -48,7 +48,7 @@ public class DistributionSetMetadatadetailslayout extends Table { private static final String VIEW = "view"; - private DistributionSetManagement distributionSetManagement; + private transient DistributionSetManagement distributionSetManagement; private DsMetadataPopupLayout dsMetadataPopupLayout; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java index 4ba8ec464..ebbaea4d9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java @@ -8,16 +8,15 @@ */ package org.eclipse.hawkbit.ui.common.grid; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import com.google.common.base.Strings; import com.vaadin.server.FontAwesome; -import com.vaadin.ui.AbstractTextField.TextChangeEventMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; @@ -61,7 +60,8 @@ public abstract class AbstractGridHeader extends VerticalLayout { private void createComponents() { headerCaptionLayout = getHeaderCaptionLayout(); if (isRollout()) { - searchField = createSearchField(); + searchField = new TextFieldBuilder().id(getSearchBoxId()) + .createSearchField(event -> searchBy(event.getText())); searchResetIcon = createSearchResetIcon(); addButton = createAddButton(); } @@ -92,7 +92,7 @@ public abstract class AbstractGridHeader extends VerticalLayout { addStyleName("no-border-bottom"); } - private HorizontalLayout createHeaderFilterIconLayout() { + private static HorizontalLayout createHeaderFilterIconLayout() { final HorizontalLayout titleFilterIconsLayout = new HorizontalLayout(); titleFilterIconsLayout.addStyleName(SPUIStyleDefinitions.WIDGET_TITLE); titleFilterIconsLayout.setSpacing(false); @@ -101,17 +101,6 @@ public abstract class AbstractGridHeader extends VerticalLayout { return titleFilterIconsLayout; } - private TextField createSearchField() { - final TextField textField = SPUIComponentProvider.getTextField("", "filter-box", "text-style filter-box-hide", - false, "", "", false, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - textField.setId(getSearchBoxId()); - textField.setWidth(100.0f, Unit.PERCENTAGE); - textField.addTextChangeListener(event -> searchBy(event.getText())); - textField.setTextChangeEventMode(TextChangeEventMode.LAZY); - textField.setTextChangeTimeout(1000); - return textField; - } - private SPUIButton createSearchResetIcon() { final SPUIButton button = (SPUIButton) SPUIComponentProvider.getButton(getSearchRestIconId(), "", "", null, false, FontAwesome.SEARCH, SPUIButtonStyleSmallNoBorder.class); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java index 54fee678f..8df142d7c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java @@ -13,20 +13,19 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; import com.vaadin.event.dd.DropHandler; import com.vaadin.server.FontAwesome; -import com.vaadin.ui.AbstractTextField.TextChangeEventMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.DragAndDropWrapper; @@ -87,7 +86,7 @@ public abstract class AbstractTableHeader extends VerticalLayout { private void createComponents() { headerCaption = createHeaderCaption(); - searchField = createSearchField(); + searchField = new TextFieldBuilder().id(getSearchBoxId()).createSearchField(event -> searchBy(event.getText())); searchResetIcon = createSearchResetIcon(); @@ -207,18 +206,6 @@ public abstract class AbstractTableHeader extends VerticalLayout { return new LabelBuilder().name(getHeaderCaption()).buildCaptionLabel(); } - private TextField createSearchField() { - final TextField textField = SPUIComponentProvider.getTextField("", "filter-box", "text-style filter-box-hide", - false, "", "", false, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - textField.setId(getSearchBoxId()); - textField.setWidth(100.0f, Unit.PERCENTAGE); - textField.addTextChangeListener(event -> searchBy(event.getText())); - textField.setTextChangeEventMode(TextChangeEventMode.LAZY); - // 1 seconds timeout. - textField.setTextChangeTimeout(1000); - return textField; - } - private SPUIButton createSearchResetIcon() { final SPUIButton button = (SPUIButton) SPUIComponentProvider.getButton(getSearchRestIconId(), "", "", null, false, FontAwesome.SEARCH, SPUIButtonStyleSmallNoBorder.class); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 063a5325f..1c56ac1d0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -18,7 +18,6 @@ import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextAreaDecorator; -import org.eclipse.hawkbit.ui.decorators.SPUITextFieldDecorator; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.slf4j.Logger; @@ -36,7 +35,6 @@ import com.vaadin.ui.Link; import com.vaadin.ui.Panel; import com.vaadin.ui.TabSheet; import com.vaadin.ui.TextArea; -import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; @@ -56,34 +54,6 @@ public final class SPUIComponentProvider { } - /** - * Get Label UI component. - * - * @param caption - * set the caption of the textfield - * @param style - * set style - * @param styleName - * add style - * @param required - * to set field as mandatory - * @param data - * component data - * @param prompt - * prompt user for input - * @param immediate - * set component's immediate mode specified mode - * @param maxLengthAllowed - * maximum characters allowed - * @return TextField text field - */ - public static TextField getTextField(final String caption, final String style, final String styleName, - final boolean required, final String data, final String prompt, final boolean immediate, - final int maxLengthAllowed) { - return SPUITextFieldDecorator.decorate(caption, style, styleName, required, data, prompt, immediate, - maxLengthAllowed); - } - /** * Get Label UI component. * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java deleted file mode 100644 index 647b1d5aa..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java +++ /dev/null @@ -1,88 +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.decorators; - -import org.apache.commons.lang3.StringUtils; - -import com.vaadin.ui.TextField; -import com.vaadin.ui.themes.ValoTheme; - -/** - * Decorate TextField with required style. - * - * - * - */ -public final class SPUITextFieldDecorator { - - /** - * Constructor. - */ - private SPUITextFieldDecorator() { - - } - - /** - * - * @param caption - * set the caption of the textfield - * @param style - * set style - * @param styleName - * add style - * @param required - * to set field as mandatory - * @param data - * component data - * @param prompt - * prompt user for input - * @param immediate - * as for display - * @param maxLengthAllowed - * maximum characters allowed - * @return Text field as decorated - */ - public static TextField decorate(final String caption, final String style, final String styleName, - final boolean required, final String data, final String prompt, final boolean immediate, - final int maxLengthAllowed) { - final TextField spUITxtFld = new TextField(); - if (StringUtils.isNotEmpty(caption)) { - spUITxtFld.setCaption(caption); - } - // Default settings - spUITxtFld.setRequired(false); - spUITxtFld.addStyleName(ValoTheme.TEXTFIELD_SMALL); - if (required) { - spUITxtFld.setRequired(true); - } - if (immediate) { - spUITxtFld.setImmediate(true); - } - // Add style - if (StringUtils.isNotEmpty(style)) { - spUITxtFld.setStyleName(style); - } - // Add style Name - if (StringUtils.isNotEmpty(styleName)) { - spUITxtFld.addStyleName(styleName); - } - if (StringUtils.isNotEmpty(prompt)) { - spUITxtFld.setInputPrompt(prompt); - } - if (StringUtils.isNotEmpty(data)) { - spUITxtFld.setData(data); - } - if (maxLengthAllowed > 0) { - spUITxtFld.setMaxLength(maxLengthAllowed); - } - - return spUITxtFld; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 65e52d448..0aa613fea 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; @@ -45,6 +46,7 @@ import com.vaadin.ui.CheckBox; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Table; +import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; @@ -84,15 +86,11 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { super.createRequiredComponents(); - tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", - ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", - i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - tagName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); + tagName = createTextField("textfield.name", SPUIDefinitions.DIST_SET_TYPE_NAME, + SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); - typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", - ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), - true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); + typeKey = createTextField("textfield.key", SPUIDefinitions.DIST_SET_TYPE_KEY, + SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", @@ -102,6 +100,11 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { tagDesc.setNullRepresentation(""); } + private TextField createTextField(final String in18Key, final String id, final String styleName) { + return new TextFieldBuilder().caption(i18n.get(in18Key)).styleName(ValoTheme.TEXTFIELD_TINY + " " + styleName) + .required(true).prompt(i18n.get(in18Key)).immediate(true).id(id).buildTextField(); + } + @Override protected void buildLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index a5ff7be66..7a5f6065e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -249,10 +250,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private TextField createNameTextField() { - final TextField nameField = SPUIComponentProvider.getTextField(i18n.get("textfield.customfiltername"), "", - ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.customfiltername"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - nameField.setId(SPUIComponentIdProvider.CUSTOM_FILTER_ADD_NAME); + final TextField nameField = new TextFieldBuilder().caption(i18n.get("textfield.customfiltername")) + .prompt(i18n.get("textfield.customfiltername")).immediate(true) + .id(SPUIComponentIdProvider.CUSTOM_FILTER_ADD_NAME).buildTextField(); nameField.setPropertyDataSource(nameLabel); nameField.addTextChangeListener(this::onFilterNameChange); return nameField; @@ -450,10 +450,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button return button; } - private TextField createSearchField() { - final TextField textField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, "", - "", true, SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); - textField.setId("custom.query.text.Id"); + private static TextField createSearchField() { + final TextField textField = new TextFieldBuilder().immediate(true).id("custom.query.text.Id") + .maxLengthAllowed(SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH).buildTextField(); textField.addStyleName("target-filter-textfield"); textField.setWidth(900.0F, Unit.PIXELS); textField.setTextChangeEventMode(TextChangeEventMode.LAZY); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java index 32347ae24..a1c5e9993 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java @@ -12,6 +12,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -19,7 +20,6 @@ import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -27,7 +27,6 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractTextField.TextChangeEventMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; @@ -121,14 +120,9 @@ public class TargetFilterHeader extends VerticalLayout { } private TextField createSearchField() { - final TextField campSearchTextField = SPUIComponentProvider.getTextField(null, "filter-box", - "text-style filter-box-hide", false, "", "", false, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - campSearchTextField.setId("target.filter.search.text.Id"); - campSearchTextField.setWidth(500.0f, Unit.PIXELS); - campSearchTextField.addTextChangeListener(event -> searchBy(event.getText())); - campSearchTextField.setTextChangeEventMode(TextChangeEventMode.LAZY); - // 1 seconds timeout. - campSearchTextField.setTextChangeTimeout(1000); + final TextField campSearchTextField = new TextFieldBuilder().id("target.filter.search.text.Id") + .createSearchField(event -> searchBy(event.getText())); + campSearchTextField.setWidth(500.0F, Unit.PIXELS); return campSearchTextField; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index bd62a0cb0..ed2495d35 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerLayout; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -152,10 +153,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorLabel = new LabelBuilder().name(i18n.get("label.choose.tag.color")).buildLabel(); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", - ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME); + tagName = new TextFieldBuilder().caption(i18n.get("textfield.name")) + .styleName(ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME).required(true) + .prompt(i18n.get("textfield.name")).immediate(true).id(SPUIDefinitions.NEW_TARGET_TAG_NAME) + .buildTextField(); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 6a40d8101..80badb249 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -25,6 +25,7 @@ import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -124,16 +125,8 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { * Create required UI components. */ private void createRequiredComponents() { - distNameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, - true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME); - distNameTextField.setNullRepresentation(""); - - distVersionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION); - distVersionTextField.setNullRepresentation(""); + distNameTextField = createTextField("textfield.name", SPUIComponentIdProvider.DIST_ADD_NAME); + distVersionTextField = createTextField("textfield.version", SPUIComponentIdProvider.DIST_ADD_VERSION); distsetTypeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, "", false, "", i18n.get("label.combobox.type")); @@ -154,6 +147,13 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK); } + private TextField createTextField(final String in18Key, final String id) { + final TextField buildTextField = new TextFieldBuilder().caption(i18n.get(in18Key)).required(true) + .prompt(i18n.get(in18Key)).immediate(true).id(id).buildTextField(); + buildTextField.setNullRepresentation(""); + return buildTextField; + } + /** * Get the LazyQueryContainer instance for DistributionSetTypes. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 84c933cba..d6f78909b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -82,15 +83,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } private void createRequiredComponents() { - /* Textfield for controller Id */ - controllerIDTextField = SPUIComponentProvider.getTextField(i18n.get("prompt.target.id"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.target.id"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - controllerIDTextField.setId(SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID); - /* Textfield for target name */ - nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, - false, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - nameTextField.setId(SPUIComponentIdProvider.TARGET_ADD_NAME); + controllerIDTextField = createTextField("prompt.target.id", SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID); + nameTextField = createTextField("textfield.name", SPUIComponentIdProvider.TARGET_ADD_NAME); + nameTextField.setRequired(false); /* Textarea for target description */ descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", @@ -100,12 +95,12 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); } - private void buildLayout() { + private TextField createTextField(final String in18Key, final String id) { + return new TextFieldBuilder().caption(i18n.get(in18Key)).required(true).prompt(i18n.get(in18Key)) + .immediate(true).id(id).buildTextField(); + } - /* - * The main layout of the window contains mandatory info, textboxes - * (controller Id, name & description) and action buttons layout - */ + private void buildLayout() { setSizeUndefined(); formLayout = new FormLayout(); formLayout.addComponent(controllerIDTextField); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 7679869a5..261c4f68e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -31,6 +31,7 @@ import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; @@ -262,9 +263,17 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return new LabelBuilder().name(i18n.get(key)).buildLabel(); } - private TextField getTextfield(final String key) { - return SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get(key), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + private TextField createTextField(final String in18Key, final String id) { + return new TextFieldBuilder().prompt(i18n.get(in18Key)).immediate(true).id(id).buildTextField(); + } + + private TextField createIntegerTextField(final String in18Key, final String id) { + final TextField textField = createTextField(in18Key, id); + textField.setNullRepresentation(""); + textField.setConverter(new StringToIntegerConverter()); + textField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); + textField.setSizeUndefined(); + return textField; } private static Label getPercentHintLabel() { @@ -514,39 +523,26 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private TextField createErrorThreshold() { - final TextField errorField = getTextfield("prompt.error.threshold"); - errorField.setNullRepresentation(""); + final TextField errorField = createIntegerTextField("prompt.error.threshold", + SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.addValidator(new ThresholdFieldValidator()); - errorField.setConverter(new StringToIntegerConverter()); - errorField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); - errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.setMaxLength(7); - errorField.setSizeUndefined(); return errorField; } private TextField createTriggerThreshold() { - final TextField thresholdField = getTextfield("prompt.tigger.threshold"); - thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); - thresholdField.setNullRepresentation(""); + final TextField thresholdField = createIntegerTextField("prompt.tigger.threshold", + SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.addValidator(new ThresholdFieldValidator()); - thresholdField.setConverter(new StringToIntegerConverter()); - thresholdField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); - thresholdField.setSizeUndefined(); - thresholdField.setMaxLength(3); return thresholdField; } private TextField createNoOfGroupsField() { - final TextField noOfGroupsField = getTextfield("prompt.number.of.groups"); - noOfGroupsField.setId(SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID); + final TextField noOfGroupsField = createIntegerTextField("prompt.number.of.groups", + SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID); noOfGroupsField.addValidator(new GroupNumberValidator()); - noOfGroupsField.setSizeUndefined(); noOfGroupsField.setMaxLength(3); - noOfGroupsField.setConverter(new StringToIntegerConverter()); - noOfGroupsField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); noOfGroupsField.addValueChangeListener(this::onGroupNumberChange); - noOfGroupsField.setNullRepresentation(""); return noOfGroupsField; } @@ -584,8 +580,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private TextField createRolloutNameField() { - final TextField rolloutNameField = getTextfield("textfield.name"); - rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); + final TextField rolloutNameField = createTextField("textfield.name", + SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setSizeUndefined(); return rolloutNameField; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java index d7203772a..50b3a33a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java @@ -13,7 +13,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -22,7 +22,6 @@ import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.themes.ValoTheme; /** * This class represents the UI item for the certificate authenticated by an @@ -65,10 +64,8 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti caRootAuthorityLabel.setDescription( "The SSL Issuer iRules.X509 hash, to validate against the controller request certifcate."); - caRootAuthorityTextField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - "", true, 128); + caRootAuthorityTextField = new TextFieldBuilder().immediate(true).maxLengthAllowed(128).buildTextField(); caRootAuthorityTextField.setWidth("500px"); - caRootAuthorityTextField.setImmediate(true); caRootAuthorityTextField.addTextChangeListener(event -> caRootAuthorityChanged()); caRootAuthorityLayout.addComponent(caRootAuthorityLabel); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java index 572cfe763..28cf7e242 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java @@ -14,9 +14,9 @@ import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.server.FontAwesome; @@ -46,12 +46,12 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac private Label gatewayTokenkeyLabel; - private boolean configurationEnabled = false; - private boolean configurationEnabledChange = false; + private boolean configurationEnabled; + private boolean configurationEnabledChange; - private boolean keyNameChanged = false; + private boolean keyNameChanged; - private boolean keyChanged = false; + private boolean keyChanged; private VerticalLayout detailLayout; @@ -75,9 +75,7 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac detailLayout = new VerticalLayout(); detailLayout.setImmediate(true); - gatewayTokenNameTextField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - "", true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - gatewayTokenNameTextField.setImmediate(true); + gatewayTokenNameTextField = new TextFieldBuilder().immediate(true).buildTextField(); // hide text field until we support multiple gateway tokens for a tenan gatewayTokenNameTextField.setVisible(false); gatewayTokenNameTextField.addTextChangeListener(event -> doKeyNameChanged()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java index a5bb24831..f3619d92a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java @@ -268,10 +268,6 @@ public final class SPUILabelDefinitions { */ public static final String UPDATE_CUSTOM_FILTER = "Update Custom Filter"; - /** - * Text area and text field max allowed length. - */ - public static final int TEXT_FIELD_MAX_LENGTH = 64; /** * Text area and text field max allowed length. */ From 7ea17c54f18987376b2db9c47cb6145d14ab4e76 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 17 Aug 2016 09:02:04 +0200 Subject: [PATCH 17/27] Add TextBuilderArea Signed-off-by: SirWayne --- .../SoftwareModuleAddUpdateWindow.java | 8 +- .../CreateUpdateSoftwareTypeLayout.java | 11 +- .../common/AbstractMetadataPopupLayout.java | 8 +- .../builder/AbstractTextFieldBuilder.java | 151 ++++++++++++++++++ .../ui/common/builder/TextAreaBuilder.java | 37 +++++ .../ui/common/builder/TextFieldBuilder.java | 138 +++------------- .../ui/common/grid/AbstractGridHeader.java | 3 +- .../ui/common/table/AbstractTableHeader.java | 4 +- .../ui/components/SPUIComponentProvider.java | 26 --- .../ui/decorators/SPUITextAreaDecorator.java | 81 ---------- .../CreateUpdateDistSetTypeLayout.java | 10 +- .../filtermanagement/TargetFilterHeader.java | 3 +- .../AbstractCreateUpdateTagLayout.java | 12 +- .../DistributionAddUpdateWindowLayout.java | 8 +- .../TargetAddUpdateWindowLayout.java | 12 +- .../TargetBulkUpdateWindowLayout.java | 8 +- .../rollout/AddUpdateRolloutWindowLayout.java | 15 +- .../ui/utils/SPUILabelDefinitions.java | 5 - 18 files changed, 254 insertions(+), 286 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/AbstractTextFieldBuilder.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextAreaBuilder.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 65310e6d3..25d579717 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.builder.TextAreaBuilder; import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; @@ -127,10 +128,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se vendorTextField = createTextField("textfield.vendor", SPUIComponentIdProvider.SOFT_MODULE_VENDOR); vendorTextField.setRequired(false); - descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", - ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), - SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION); + descTextArea = new TextAreaBuilder().caption(i18n.get("textfield.description")).style("text-area-style") + .prompt(i18n.get("textfield.description")).id(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION) + .buildTextField(); typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true, null, i18n.get("upload.swmodule.type")); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 63f93807a..e1c665751 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -19,8 +19,8 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareMo import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextAreaBuilder; import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -85,11 +85,10 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { typeKey = createTextField("textfield.key", SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY, SPUIDefinitions.TYPE_KEY); - tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", - ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", - i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); - tagDesc.setImmediate(true); + tagDesc = new TextAreaBuilder().caption(i18n.get("textfield.description")) + .styleName(ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC) + .prompt(i18n.get("textfield.description")).immediate(true).id(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC) + .buildTextField(); tagDesc.setNullRepresentation(""); singleMultiOptionGroup(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index 8b80dee31..c89dff4b6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.MetaData; import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; import org.eclipse.hawkbit.ui.common.builder.LabelBuilder; +import org.eclipse.hawkbit.ui.common.builder.TextAreaBuilder; import org.eclipse.hawkbit.ui.common.builder.TextFieldBuilder; import org.eclipse.hawkbit.ui.common.builder.WindowBuilder; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -49,7 +50,6 @@ import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; -import com.vaadin.ui.themes.ValoTheme; /** * @@ -217,9 +217,9 @@ public abstract class AbstractMetadataPopupLayout + * the concrete text component + */ +public abstract class AbstractTextFieldBuilder { + + private String caption; + private String style; + private String styleName; + private String prompt; + private String id; + private boolean immediate; + private boolean required; + private int maxLengthAllowed; + + /** + * @param caption + * the caption to set + * @return the builder + */ + public AbstractTextFieldBuilder caption(final String caption) { + this.caption = caption; + return this; + } + + /** + * @param style + * the style to set * @return the builder + * @return the builder + */ + public AbstractTextFieldBuilder style(final String style) { + this.style = style; + return this; + } + + /** + * @param styleName + * the styleName to set + * @return the builder + */ + public AbstractTextFieldBuilder styleName(final String styleName) { + this.styleName = styleName; + return this; + } + + /** + * @param required + * the required to set + * @return the builder + */ + public AbstractTextFieldBuilder required(final boolean required) { + this.required = required; + return this; + } + + /** + * @param prompt + * the prompt to set + * @return the builder + */ + public AbstractTextFieldBuilder prompt(final String prompt) { + this.prompt = prompt; + return this; + } + + /** + * @param immediate + * the immediate to set + * @return the builder + */ + public AbstractTextFieldBuilder immediate(final boolean immediate) { + this.immediate = immediate; + return this; + } + + /** + * @param maxLengthAllowed + * the maxLengthAllowed to set + * @return the builder + */ + public AbstractTextFieldBuilder maxLengthAllowed(final int maxLengthAllowed) { + this.maxLengthAllowed = maxLengthAllowed; + return this; + } + + /** + * @param id + * the id to set + * @return the builder + */ + public AbstractTextFieldBuilder id(final String id) { + this.id = id; + return this; + } + + /** + * Build a textfield + * + * @return textfield + */ + public E buildTextField() { + final E textComponent = createTextComponent(); + + textComponent.setRequired(required); + textComponent.setImmediate(immediate); + + if (StringUtils.isNotEmpty(caption)) { + textComponent.setCaption(caption); + } + + if (StringUtils.isNotEmpty(style)) { + textComponent.setStyleName(style); + } + + if (StringUtils.isNotEmpty(styleName)) { + textComponent.addStyleName(styleName); + } + if (StringUtils.isNotEmpty(prompt)) { + textComponent.setInputPrompt(prompt); + } + + if (maxLengthAllowed > 0) { + textComponent.setMaxLength(maxLengthAllowed); + } + + if (StringUtils.isNotEmpty(id)) { + textComponent.setId(id); + } + + return textComponent; + } + + protected abstract E createTextComponent(); + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextAreaBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextAreaBuilder.java new file mode 100644 index 000000000..d75b408d4 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/builder/TextAreaBuilder.java @@ -0,0 +1,37 @@ +/** + * 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.builder; + +import com.vaadin.ui.TextArea; +import com.vaadin.ui.themes.ValoTheme; + +/** + * TextArea builder. + * + */ +public class TextAreaBuilder extends AbstractTextFieldBuilder