From 3accac9aded02c55ebc75bbec9caf7bebe5ec342 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Mon, 15 Aug 2016 11:30:21 +0200 Subject: [PATCH 01/17] 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 a9e15041d82c24372cd88f4b3d88b8d40bbf7dd9 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Mon, 15 Aug 2016 13:32:57 +0200 Subject: [PATCH 02/17] 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 03/17] 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 04/17] 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 05/17] 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 06/17] 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 5e485694628a1e4d38d03df060e33c1086ac3182 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Tue, 16 Aug 2016 13:41:15 +0200 Subject: [PATCH 07/17] 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 08/17] 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 09/17] 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 10/17] 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 11/17] 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 12/17] 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 13/17] 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 14/17] 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