diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java index cafe0749d..e55cb02d2 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java @@ -8,21 +8,12 @@ */ package org.eclipse.hawkbit.app; -import org.eclipse.hawkbit.eventbus.EventSubscriber; -import org.eclipse.hawkbit.eventbus.event.EntityEvent; -import org.eclipse.hawkbit.ui.DispatcherRunnable; import org.eclipse.hawkbit.ui.HawkbitUI; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.context.HttpSessionSecurityContextRepository; -import org.vaadin.spring.events.EventBus.SessionEventBus; +import org.eclipse.hawkbit.ui.push.DelayedEventBusPushStrategy; +import org.springframework.beans.factory.annotation.Autowired; -import com.google.common.eventbus.AllowConcurrentEvents; -import com.google.common.eventbus.Subscribe; +import com.google.common.eventbus.EventBus; import com.vaadin.annotations.Push; -import com.vaadin.server.VaadinSession; -import com.vaadin.server.VaadinSession.State; -import com.vaadin.server.WrappedSession; import com.vaadin.shared.communication.PushMode; import com.vaadin.shared.ui.ui.Transport; import com.vaadin.spring.annotation.SpringUI; @@ -33,45 +24,16 @@ import com.vaadin.spring.annotation.SpringUI; * A {@link SpringUI} annotated class must be present in the classpath. The * easiest way to get an hawkBit UI running is to extend the {@link HawkbitUI} * and to annotated it with {@link SpringUI} as in this example. - * - * * */ @SpringUI @Push(value = PushMode.AUTOMATIC, transport = Transport.WEBSOCKET) -@EventSubscriber public class MyUI extends HawkbitUI { private static final long serialVersionUID = 1L; - /** - * An {@link com.google.common.eventbus.EventBus} subscriber which - * subscribes {@link EntityEvent} from the repository to dispatch these - * events to the UI {@link SessionEventBus}. - * - * @param event - * the entity event which has been published from the repository - */ - @Override - @Subscribe - @AllowConcurrentEvents - public void dispatch(final org.eclipse.hawkbit.eventbus.event.Event event) { - final VaadinSession session = getSession(); - if (session != null && session.getState() == State.OPEN) { - final WrappedSession wrappedSession = session.getSession(); - if (wrappedSession != null) { - final SecurityContext userContext = (SecurityContext) wrappedSession - .getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY); - if (eventSecurityCheck(userContext, event)) { - final SecurityContext oldContext = SecurityContextHolder.getContext(); - try { - access(new DispatcherRunnable(eventBus, session, userContext, event)); - } finally { - SecurityContextHolder.setContext(oldContext); - } - } - } - } + @Autowired + public MyUI(final EventBus systemEventBus, final org.vaadin.spring.events.EventBus.SessionEventBus eventBus) { + super(new DelayedEventBusPushStrategy(eventBus, systemEventBus)); } - } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java index 840f16182..b209dbe8b 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java @@ -25,7 +25,7 @@ public class SoftwareModuleAssigmentBuilder { private final List ids; public SoftwareModuleAssigmentBuilder() { - ids = new ArrayList(); + ids = new ArrayList<>(); } /** diff --git a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java index 2d1b99c98..acf50ad3f 100644 --- a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java +++ b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java @@ -75,7 +75,7 @@ public class RedisConfiguration { */ @Bean public RedisTemplate redisTemplate() { - final RedisTemplate redisTemplate = new RedisTemplate(); + final RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(jedisConnectionFactory()); redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer()); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); diff --git a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java index e52128cbc..8749340f0 100644 --- a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java +++ b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java @@ -95,7 +95,7 @@ public class EventDistributor { * wants to subscribe */ public Collection getTopics() { - final List topics = new ArrayList(); + final List topics = new ArrayList<>(); topics.add(new PatternTopic(SUB_DISTRIBUTION_CHANNEL)); return topics; } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java index 06d6e1719..435f1b2e1 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java @@ -51,7 +51,12 @@ public class TenantAwareCacheManager implements TenancyCacheManager { @Override public Cache getCache(final String name) { - final String currentTenant = tenantAware.getCurrentTenant().toUpperCase(); + String currentTenant = tenantAware.getCurrentTenant(); + if (currentTenant == null) { + return null; + } + + currentTenant = currentTenant.toUpperCase(); if (currentTenant.contains(TENANT_CACHE_DELIMITER)) { return null; } @@ -60,7 +65,12 @@ public class TenantAwareCacheManager implements TenancyCacheManager { @Override public Collection getCacheNames() { - final String currentTenant = tenantAware.getCurrentTenant().toUpperCase(); + String currentTenant = tenantAware.getCurrentTenant(); + if (currentTenant == null) { + return null; + } + + currentTenant = currentTenant.toUpperCase(); if (currentTenant.contains(TENANT_CACHE_DELIMITER)) { return Collections.emptyList(); } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 988a68ada..d2cd1eab8 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -23,6 +23,7 @@ import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -121,11 +122,22 @@ public class AmqpConfiguration { /** * Create amqp handler service bean. * - * @return + * @return handler service bean */ @Bean public AmqpMessageHandlerService amqpMessageHandlerService() { - return new AmqpMessageHandlerService(); + return new AmqpMessageHandlerService(rabbitTemplate); + } + + /** + * Create default amqp sender service bean. + * + * @return the default amqp sender service bean + */ + @Bean + @ConditionalOnMissingBean + public AmqpSenderService amqpSenderServiceBean() { + return new DefaultAmqpSenderService(rabbitTemplate); } /** diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java index dd36ef1fd..9b98cadfa 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java @@ -127,10 +127,7 @@ public class AmqpControllerAuthentfication { LOGGER.debug("preAuthenticatedPrincipal = {} trying to authenticate", principal); - final PreAuthenticatedAuthenticationToken authRequest = new PreAuthenticatedAuthenticationToken(principal, - credentials); - - return authRequest; + return new PreAuthenticatedAuthenticationToken(principal, credentials); } public void setControllerManagement(final ControllerManagement controllerManagement) { diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index 3708f942b..b9e6fe9da 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -25,35 +25,43 @@ import org.eclipse.hawkbit.eventbus.EventSubscriber; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.model.LocalArtifact; -import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.hawkbit.util.ArtifactUrlHandler; import org.eclipse.hawkbit.util.IpUtil; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.eventbus.Subscribe; /** - * {@link AmqpMessageDispatcherService} handles all outgoing AMQP messages. - * - * + * {@link AmqpMessageDispatcherService} create all outgoing AMQP messages and + * delegate the messages to a {@link AmqpSenderService}. + * + * Additionally the dispatcher listener/subscribe for some target events e.g. + * assignment. * */ @EventSubscriber -public class AmqpMessageDispatcherService { - - @Autowired - private RabbitTemplate rabbitTemplate; - - @Autowired - private TenantAware tenantAware; +public class AmqpMessageDispatcherService extends BaseAmqpService { @Autowired private ArtifactUrlHandler artifactUrlHandler; + @Autowired + private AmqpSenderService amqpSenderService; + + /** + * Constructor. + * + * @param messageConverter + * message converter + */ + @Autowired + public AmqpMessageDispatcherService(final RabbitTemplate rabbitTemplate) { + super(rabbitTemplate); + } + /** * Method to send a message to a RabbitMQ Exchange after the Distribution * set has been assign to a Target. @@ -79,11 +87,10 @@ public class AmqpMessageDispatcherService { downloadAndUpdateRequest.addSoftwareModule(amqpSoftwareModule); } - final Message message = rabbitTemplate.getMessageConverter().toMessage( - downloadAndUpdateRequest, + final Message message = getMessageConverter().toMessage(downloadAndUpdateRequest, createConnectorMessageProperties(targetAssignDistributionSetEvent.getTenant(), controllerId, EventTopic.DOWNLOAD_AND_INSTALL)); - sendMessage(targetAdress.getHost(), message); + amqpSenderService.sendMessage(message, targetAdress); } /** @@ -98,29 +105,13 @@ public class AmqpMessageDispatcherService { final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent) { final String controllerId = cancelTargetAssignmentDistributionSetEvent.getControllerId(); final Long actionId = cancelTargetAssignmentDistributionSetEvent.getActionId(); - final Message message = rabbitTemplate.getMessageConverter().toMessage( - actionId, - createConnectorMessageProperties(cancelTargetAssignmentDistributionSetEvent.getTenant(), controllerId, - EventTopic.CANCEL_DOWNLOAD)); + final Message message = getMessageConverter().toMessage(actionId, createConnectorMessageProperties( + cancelTargetAssignmentDistributionSetEvent.getTenant(), controllerId, EventTopic.CANCEL_DOWNLOAD)); - sendMessage(cancelTargetAssignmentDistributionSetEvent.getTargetAdress().getHost(), message); + amqpSenderService.sendMessage(message, cancelTargetAssignmentDistributionSetEvent.getTargetAdress()); } - /** - * Send message to exchange. - * - * @param exchange - * the exchange - * @param message - * the message - */ - public void sendMessage(final String exchange, final Message message) { - message.getMessageProperties().getHeaders().remove(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME); - rabbitTemplate.setExchange(exchange); - rabbitTemplate.send(message); - } - private MessageProperties createConnectorMessageProperties(final String tenant, final String controllerId, final EventTopic topic) { final MessageProperties messageProperties = createMessageProperties(); @@ -155,9 +146,8 @@ public class AmqpMessageDispatcherService { return Collections.emptyList(); } - final List convertedArtifacts = localArtifacts.stream() - .map(localArtifact -> convertArtifact(targetId, localArtifact)).collect(Collectors.toList()); - return convertedArtifacts; + return localArtifacts.stream().map(localArtifact -> convertArtifact(targetId, localArtifact)) + .collect(Collectors.toList()); } private Artifact convertArtifact(final String targetId, final LocalArtifact localArtifact) { @@ -175,15 +165,11 @@ public class AmqpMessageDispatcherService { return artifact; } - public void setTenantAware(final TenantAware tenantAware) { - this.tenantAware = tenantAware; - } - - public void setRabbitTemplate(final RabbitTemplate rabbitTemplate) { - this.rabbitTemplate = rabbitTemplate; - } - public void setArtifactUrlHandler(final ArtifactUrlHandler artifactUrlHandler) { this.artifactUrlHandler = artifactUrlHandler; } + + public void setAmqpSenderService(final AmqpSenderService amqpSenderService) { + this.amqpSenderService = amqpSenderService; + } } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java index f8aed4f86..cfd5485a6 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java @@ -12,7 +12,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.UUID; import org.apache.commons.lang3.StringUtils; @@ -50,8 +49,6 @@ import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; -import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.cache.Cache; @@ -72,19 +69,14 @@ import com.google.common.eventbus.EventBus; /** * - * {@link AmqpMessageHandlerService} handles all incoming AMQP messages. - * - * - * + * {@link AmqpMessageHandlerService} handles all incoming AMQP messages for the + * queue which is configure for the property hawkbit.dmf.rabbitmq.receiverQueue. * */ -public class AmqpMessageHandlerService { +public class AmqpMessageHandlerService extends BaseAmqpService { private static final Logger LOG = LoggerFactory.getLogger(AmqpMessageHandlerService.class); - @Autowired - private RabbitTemplate rabbitTemplate; - @Autowired private ControllerManagement controllerManagement; @@ -105,7 +97,23 @@ public class AmqpMessageHandlerService { private HostnameResolver hostnameResolver; /** - * /** Method to handle all incoming amqp messages. + * Constructor. + * + * @param defaultTemplate + * the configured amqp template. + */ + public AmqpMessageHandlerService(final RabbitTemplate defaultTemplate) { + super(defaultTemplate); + } + + @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.receiverQueue}", containerFactory = "listenerContainerFactory") + private Message onMessage(final Message message, @Header(MessageHeaderKey.TYPE) final String type, + @Header(MessageHeaderKey.TENANT) final String tenant) { + return onMessage(message, type, tenant, getRabbitTemplate().getConnectionFactory().getVirtualHost()); + } + + /** + * Method to handle all incoming amqp messages. * * @param message * incoming message @@ -115,11 +123,11 @@ public class AmqpMessageHandlerService { * the contentType of the message * @param tenant * the contentType of the message + * @param virtualHost + * the virtual host * @return a message if no message is send back to sender */ - @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.receiverQueue}", containerFactory = "listenerContainerFactory") - public Message onMessage(final Message message, @Header(MessageHeaderKey.TYPE) final String type, - @Header(MessageHeaderKey.TENANT) final String tenant) { + public Message onMessage(final Message message, final String type, final String tenant, final String virtualHost) { checkContentTypeJson(message); final SecurityContext oldContext = SecurityContextHolder.getContext(); try { @@ -127,7 +135,7 @@ public class AmqpMessageHandlerService { switch (messageType) { case THING_CREATED: setTenantSecurityContext(tenant); - registerTarget(message); + registerTarget(message, virtualHost); break; case EVENT: setTenantSecurityContext(tenant); @@ -153,8 +161,8 @@ public class AmqpMessageHandlerService { final String sha1 = secruityToken.getSha1(); try { SecurityContextHolder.getContext().setAuthentication(authenticationManager.doAuthenticate(secruityToken)); - final LocalArtifact localArtifact = artifactManagement.findFirstLocalArtifactsBySHA1(secruityToken - .getSha1()); + final LocalArtifact localArtifact = artifactManagement + .findFirstLocalArtifactsBySHA1(secruityToken.getSha1()); if (localArtifact == null) { throw new EntityNotFoundException(); } @@ -177,9 +185,9 @@ public class AmqpMessageHandlerService { final String downloadId = UUID.randomUUID().toString(); final DownloadArtifactCache downloadCache = new DownloadArtifactCache(DownloadType.BY_SHA1, sha1); cache.put(downloadId, downloadCache); - authentificationResponse.setDownloadUrl(UriComponentsBuilder - .fromUri(hostnameResolver.resolveHostname().toURI()).path("/api/v1/downloadserver/downloadId/") - .path(downloadId).build().toUriString()); + authentificationResponse + .setDownloadUrl(UriComponentsBuilder.fromUri(hostnameResolver.resolveHostname().toURI()) + .path("/api/v1/downloadserver/downloadId/").path(downloadId).build().toUriString()); authentificationResponse.setResponseCode(HttpStatus.OK.value()); } catch (final BadCredentialsException | AuthenticationServiceException | CredentialsExpiredException e) { LOG.error("Login failed", e); @@ -196,7 +204,7 @@ public class AmqpMessageHandlerService { authentificationResponse.setMessage(errorMessage); } - return rabbitTemplate.getMessageConverter().toMessage(authentificationResponse, messageProperties); + return getMessageConverter().toMessage(authentificationResponse, messageProperties); } private static Artifact convertDbArtifact(final DbArtifact dbArtifact) { @@ -207,11 +215,6 @@ public class AmqpMessageHandlerService { return artifact; } - protected void logAndThrowMessageError(final Message message, final String error) { - LOG.error("Error \"{}\" reported by message {}", error, message.getMessageProperties().getMessageId()); - throw new IllegalArgumentException(error); - } - private static void setSecurityContext(final Authentication authentication) { final SecurityContextImpl securityContextImpl = new SecurityContextImpl(); securityContextImpl.setAuthentication(authentication); @@ -219,22 +222,13 @@ public class AmqpMessageHandlerService { } private static void setTenantSecurityContext(final String tenantId) { - final AnonymousAuthenticationToken authenticationToken = new AnonymousAuthenticationToken(UUID.randomUUID() - .toString(), "AMQP-Controller", Collections.singletonList(new SimpleGrantedAuthority( - SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS))); + final AnonymousAuthenticationToken authenticationToken = new AnonymousAuthenticationToken( + UUID.randomUUID().toString(), "AMQP-Controller", + Collections.singletonList(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS))); authenticationToken.setDetails(new TenantAwareAuthenticationDetails(tenantId, true)); setSecurityContext(authenticationToken); } - private String getStringHeaderKey(final Message message, final String key, final String errorMessageIfNull) { - final Map header = message.getMessageProperties().getHeaders(); - final Object value = header.get(key); - if (value == null) { - logAndThrowMessageError(message, errorMessageIfNull); - } - return value.toString(); - } - /** * Method to create a new target or to find the target if it already exists. * @@ -243,14 +237,15 @@ public class AmqpMessageHandlerService { * @param ip * the ip of the target/thing */ - private void registerTarget(final Message message) { + private void registerTarget(final Message message, final String virtualHost) { final String thingId = getStringHeaderKey(message, MessageHeaderKey.THING_ID, "ThingId is null"); final String replyTo = message.getMessageProperties().getReplyTo(); if (StringUtils.isEmpty(replyTo)) { logAndThrowMessageError(message, "No ReplyTo was set for the createThing Event."); } - final URI amqpUri = IpUtil.createAmqpUri(replyTo); + + final URI amqpUri = IpUtil.createAmqpUri(virtualHost, replyTo); final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotexist(thingId, amqpUri); LOG.debug("Target {} reported online state.", thingId); @@ -267,8 +262,8 @@ public class AmqpMessageHandlerService { final DistributionSet distributionSet = action.getDistributionSet(); final List softwareModuleList = controllerManagement .findSoftwareModulesByDistributionSet(distributionSet); - eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), target - .getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress())); + eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), + target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress())); } @@ -281,13 +276,11 @@ public class AmqpMessageHandlerService { * the topic of the event. */ private void handleIncomingEvent(final Message message, final EventTopic topic) { - switch (topic) { - case UPDATE_ACTION_STATUS: + if (EventTopic.UPDATE_ACTION_STATUS.equals(topic)) { updateActionStatus(message); return; - default: - logAndThrowMessageError(message, "Got event without appropriate topic."); } + logAndThrowMessageError(message, "Got event without appropriate topic."); } /** @@ -336,28 +329,24 @@ public class AmqpMessageHandlerService { logAndThrowMessageError(message, "Status for action does not exisit."); } - Action addUpdateActionStatus; - - if (!actionStatus.getStatus().equals(Status.CANCELED)) { - addUpdateActionStatus = controllerManagement.addUpdateActionStatus(actionStatus, action); - } else { - addUpdateActionStatus = controllerManagement.addCancelActionStatus(actionStatus, action); - } + final Action addUpdateActionStatus = getUpdateActionStatus(action, actionStatus); if (!addUpdateActionStatus.isActive()) { lookIfUpdateAvailable(action.getTarget()); } } - /** - * @param message - * @param actionUpdateStatus - * @return - */ + private Action getUpdateActionStatus(final Action action, final ActionStatus actionStatus) { + if (actionStatus.getStatus().equals(Status.CANCELED)) { + return controllerManagement.addCancelActionStatus(actionStatus, action); + } + return controllerManagement.addUpdateActionStatus(actionStatus, action); + } + private Action checkActionExist(final Message message, final ActionUpdateStatus actionUpdateStatus) { final Long actionId = actionUpdateStatus.getActionId(); - LOG.debug("Target notifies intermediate about action {} with status {}.", actionId, actionUpdateStatus - .getActionStatus().name()); + LOG.debug("Target notifies intermediate about action {} with status {}.", actionId, + actionUpdateStatus.getActionStatus().name()); if (actionId == null) { logAndThrowMessageError(message, "Invalid message no action id"); @@ -366,8 +355,8 @@ public class AmqpMessageHandlerService { final Action action = controllerManagement.findActionWithDetails(actionId); if (action == null) { - logAndThrowMessageError(message, "Got intermediate notification about action " + actionId - + " but action does not exist"); + logAndThrowMessageError(message, + "Got intermediate notification about action " + actionId + " but action does not exist"); } return action; } @@ -381,38 +370,12 @@ public class AmqpMessageHandlerService { // back to running action status } else { - logAndThrowMessageError(message, "Cancel Recjected message is not allowed, if action is on state: " - + action.getStatus()); + logAndThrowMessageError(message, + "Cancel recjected message is not allowed, if action is on state: " + action.getStatus()); } } - /** - * Is needed to convert a incoming message to is originally object type. - * - * @param message - * the message to convert. - * @param clazz - * the class of the originally object. - * @return - */ - @SuppressWarnings("unchecked") - private T convertMessage(final Message message, final Class clazz) { - message.getMessageProperties().getHeaders() - .put(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, clazz.getTypeName()); - return (T) rabbitTemplate.getMessageConverter().fromMessage(message); - } - - /** - * Is needed to verify if an incoming message has the content type json. - * - * @param message - * the to verify - * @param contentType - * the content type - * @return true if the content type has json, false it not. - */ - - private static void checkContentTypeJson(final Message message) { + private void checkContentTypeJson(final Message message) { final MessageProperties messageProperties = message.getMessageProperties(); if (messageProperties.getContentType() != null && messageProperties.getContentType().contains("json")) { return; @@ -428,14 +391,6 @@ public class AmqpMessageHandlerService { this.hostnameResolver = hostnameResolver; } - void setRabbitTemplate(final RabbitTemplate rabbitTemplate) { - this.rabbitTemplate = rabbitTemplate; - } - - MessageConverter getMessageConverter() { - return rabbitTemplate.getMessageConverter(); - } - void setAuthenticationManager(final AmqpControllerAuthentfication authenticationManager) { this.authenticationManager = authenticationManager; } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index ecd2dc3d7..c3a807f48 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -8,78 +8,41 @@ */ package org.eclipse.hawkbit.amqp; -import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.boot.context.properties.ConfigurationProperties; /** * Bean which holds the necessary properties for configuring the AMQP * connection. - * - * - * * */ @ConfigurationProperties("hawkbit.dmf.rabbitmq") public class AmqpProperties { - private String deadLetterQueue = "dmf_connector_deadletter"; - private String deadLetterExchange = "dmf.connector.deadletter"; + private String deadLetterQueue = "dmf_receiver_deadletter"; + private String deadLetterExchange = "dmf.receiver.deadletter"; private String receiverQueue = "dmf_receiver"; private boolean missingQueuesFatal = false; - /** - * Is missingQueuesFatal enabled - * - * @see SimpleMessageListenerContainer#setMissingQueuesFatal - * @return the missingQueuesFatal enabled disabled - */ public boolean isMissingQueuesFatal() { return missingQueuesFatal; } - /** - * @param missingQueuesFatal - * the missingQueuesFatal to set. - * @see SimpleMessageListenerContainer#setMissingQueuesFatal - */ public void setMissingQueuesFatal(final boolean missingQueuesFatal) { this.missingQueuesFatal = missingQueuesFatal; } - /** - * Returns the dead letter exchange. - * - * @return dead letter exchange - */ public String getDeadLetterExchange() { return deadLetterExchange; } - /** - * Sets the dead letter exchange. - * - * @param deadLetterExchange - * the deadLetterExchange to be set - */ public void setDeadLetterExchange(final String deadLetterExchange) { this.deadLetterExchange = deadLetterExchange; } - /** - * Returns the dead letter queue. - * - * @return the dead letter queue - */ public String getDeadLetterQueue() { return deadLetterQueue; } - /** - * Sets the dead letter queue. - * - * @param deadLetterQueue - * the deadLetterQueue ro be set - */ public void setDeadLetterQueue(final String deadLetterQueue) { this.deadLetterQueue = deadLetterQueue; } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java new file mode 100644 index 000000000..6cb3dd9be --- /dev/null +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java @@ -0,0 +1,44 @@ +/** + * 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.amqp; + +import java.net.URI; + +import org.springframework.amqp.core.Message; + +/** + * Interface to send a amqp message. + */ +@FunctionalInterface +public interface AmqpSenderService { + + /** + * Send the given message to the given uri. The uri contains the (virtual) + * host and exchange e.g amqp://host/exchange. + * + * @param message + * the amqp message + * @param uri + * the reply to uri + */ + void sendMessage(Message message, URI uri); + + /** + * Extract the exchange from the uri. Default implementation removes the + * first /. + * + * @param amqpUri + * the amqp uri + * @return the exchange. + */ + default String extractExchange(final URI amqpUri) { + return amqpUri.getPath().substring(1); + } + +} diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java new file mode 100644 index 000000000..f418937e3 --- /dev/null +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java @@ -0,0 +1,114 @@ +/** + * 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.amqp; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; +import org.springframework.amqp.support.converter.MessageConverter; + +/** + * A base class which provide basis amqp staff. + */ +public class BaseAmqpService { + + private static final Logger LOGGER = LoggerFactory.getLogger(BaseAmqpService.class); + private final RabbitTemplate rabbitTemplate; + + /** + * Constructor. + * + * @param rabbitTemplate + * the rabbit template. + */ + public BaseAmqpService(final RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + /** + * Clean message properties before sending a message. + * + * @param message + * the message to cleaned up + */ + protected void cleanMessageHeaderProperties(final Message message) { + message.getMessageProperties().getHeaders().remove(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME); + } + + /** + * Is needed to convert a incoming message to is originally object type. + * + * @param message + * the message to convert. + * @param clazz + * the class of the originally object. + * @return the converted object + */ + @SuppressWarnings("unchecked") + protected T convertMessage(final Message message, final Class clazz) { + if (message == null) { + return null; + } + message.getMessageProperties().getHeaders().put(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, + clazz.getName()); + return (T) rabbitTemplate.getMessageConverter().fromMessage(message); + } + + /** + * Is needed to convert a incoming message to is originally list object + * type. + * + * @param message + * the message to convert. + * @param clazz + * the class of the list content. + * @return the list of converted objects + */ + @SuppressWarnings("unchecked") + protected List convertMessageList(final Message message, final Class clazz) { + if (message == null) { + return Collections.emptyList(); + } + message.getMessageProperties().getHeaders().put(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, + ArrayList.class.getName()); + message.getMessageProperties().getHeaders().put(AbstractJavaTypeMapper.DEFAULT_CONTENT_CLASSID_FIELD_NAME, + clazz.getName()); + return (List) rabbitTemplate.getMessageConverter().fromMessage(message); + } + + public MessageConverter getMessageConverter() { + return rabbitTemplate.getMessageConverter(); + } + + protected final String getStringHeaderKey(final Message message, final String key, + final String errorMessageIfNull) { + final Map header = message.getMessageProperties().getHeaders(); + final Object value = header.get(key); + if (value == null) { + logAndThrowMessageError(message, errorMessageIfNull); + } + return value.toString(); + } + + protected final void logAndThrowMessageError(final Message message, final String error) { + LOGGER.error("Error \"{}\" reported by message {}", error, message.getMessageProperties().getMessageId()); + throw new IllegalArgumentException(error); + } + + protected RabbitTemplate getRabbitTemplate() { + return rabbitTemplate; + } +} diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java new file mode 100644 index 000000000..3dad77f43 --- /dev/null +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java @@ -0,0 +1,40 @@ +/** + * 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.amqp; + +import java.net.URI; + +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +/** + * A default implementation for the sender service. The service sends all amqp + * message to the configured spring rabbitmq connections. The exchange is + * extracted from the uri. + */ +public class DefaultAmqpSenderService implements AmqpSenderService { + + private final RabbitTemplate internalAmqpTemplate; + + /** + * Constructor. + * + * @param internalAmqpTemplate + * the amqp template + */ + public DefaultAmqpSenderService(final RabbitTemplate internalAmqpTemplate) { + this.internalAmqpTemplate = internalAmqpTemplate; + } + + @Override + public void sendMessage(final Message message, final URI uri) { + internalAmqpTemplate.send(extractExchange(uri), message); + } + +} diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java new file mode 100644 index 000000000..a1dd54710 --- /dev/null +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java @@ -0,0 +1,48 @@ +/** + * 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; + +import org.eclipse.hawkbit.amqp.AmqpSenderService; +import org.eclipse.hawkbit.amqp.DefaultAmqpSenderService; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * + */ +@Configuration +public class AmqpTestConfiguration { + + /** + * Method to set the Jackson2JsonMessageConverter. + * + * @return the Jackson2JsonMessageConverter + */ + @Bean + public MessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } + + /** + * Create default amqp sender service bean. + * + * @param rabbitTemplate + * + * @return the default amqp sender service bean + */ + @Bean + @Autowired + public AmqpSenderService amqpSenderServiceBean(final RabbitTemplate rabbitTemplate) { + return new DefaultAmqpSenderService(rabbitTemplate); + } +} diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java index d6c63b83b..af5ce3267 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java @@ -60,11 +60,10 @@ public class AmqpControllerAuthenticationTest { @Before public void before() throws Exception { - amqpMessageHandlerService = new AmqpMessageHandlerService(); messageConverter = new Jackson2JsonMessageConverter(); - final RabbitTemplate rabbitTemplate = new RabbitTemplate(); - rabbitTemplate.setMessageConverter(messageConverter); - amqpMessageHandlerService.setRabbitTemplate(rabbitTemplate); + final RabbitTemplate rabbitTemplate = mock(RabbitTemplate.class); + when(rabbitTemplate.getMessageConverter()).thenReturn(messageConverter); + amqpMessageHandlerService = new AmqpMessageHandlerService(rabbitTemplate); authenticationManager = new AmqpControllerAuthentfication(); authenticationManager.setControllerManagement(mock(ControllerManagement.class)); @@ -78,7 +77,6 @@ public class AmqpControllerAuthenticationTest { final ControllerManagement controllerManagement = mock(ControllerManagement.class); when(controllerManagement.getSecurityTokenByControllerId(anyString())).thenReturn(CONTROLLLER_ID); authenticationManager.setControllerManagement(controllerManagement); - amqpMessageHandlerService.setArtifactManagement(mock(ArtifactManagement.class)); authenticationManager.setTenantAware(new SecurityContextTenantAware()); @@ -139,7 +137,7 @@ public class AmqpControllerAuthenticationTest { // test final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT); + TENANT, "vHost"); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -161,7 +159,7 @@ public class AmqpControllerAuthenticationTest { // test final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT); + TENANT, "vHost"); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -183,7 +181,7 @@ public class AmqpControllerAuthenticationTest { // test final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT); + TENANT, "vHost"); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java index 6584d9349..46ddd35cc 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java @@ -19,6 +19,7 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -45,7 +46,6 @@ import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; -import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.test.context.ActiveProfiles; import ru.yandex.qatools.allure.annotations.Description; @@ -59,39 +59,41 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit private AmqpMessageDispatcherService amqpMessageDispatcherService; - private MessageConverter messageConverter; - private RabbitTemplate rabbitTemplate; + private DefaultAmqpSenderService senderService; + private static final String CONTROLLER_ID = "1"; @Override public void before() throws Exception { super.before(); - amqpMessageDispatcherService = new AmqpMessageDispatcherService(); + this.rabbitTemplate = Mockito.mock(RabbitTemplate.class); + when(rabbitTemplate.getMessageConverter()).thenReturn(new Jackson2JsonMessageConverter()); + amqpMessageDispatcherService = new AmqpMessageDispatcherService(rabbitTemplate); amqpMessageDispatcherService = spy(amqpMessageDispatcherService); - messageConverter = new Jackson2JsonMessageConverter(); + + senderService = Mockito.mock(DefaultAmqpSenderService.class); + amqpMessageDispatcherService.setAmqpSenderService(senderService); final ArtifactUrlHandler artifactUrlHandlerMock = Mockito.mock(ArtifactUrlHandler.class); when(artifactUrlHandlerMock.getUrl(anyString(), any(), anyObject())).thenReturn("http://mockurl"); - this.rabbitTemplate = Mockito.mock(RabbitTemplate.class); - when(rabbitTemplate.getMessageConverter()).thenReturn(messageConverter); - - amqpMessageDispatcherService.setRabbitTemplate(rabbitTemplate); - amqpMessageDispatcherService.setTenantAware(tenantAware); amqpMessageDispatcherService.setArtifactUrlHandler(artifactUrlHandlerMock); + } @Test @Description("Verfies that download and install event with no software modul works") public void testSendDownloadRequesWithEmptySoftwareModules() { final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( - 1L, "default", CONTROLLER_ID, 1l, new ArrayList(), IpUtil.createAmqpUri("mytest")); + 1L, "default", CONTROLLER_ID, 1l, new ArrayList(), + IpUtil.createAmqpUri("vHost", "mytest")); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); - final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress().getHost()); + final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); - assertTrue(downloadAndUpdateRequest.getSoftwareModules().isEmpty()); + assertTrue("No softwaremmodule should be contained in the request", + downloadAndUpdateRequest.getSoftwareModules().isEmpty()); } @Test @@ -100,21 +102,26 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( - 1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("mytest")); + 1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("vHost", "mytest")); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); - final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress().getHost()); + final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); - assertEquals(3, downloadAndUpdateRequest.getSoftwareModules().size()); + assertEquals("Expecting a size of 3 software modules in the reuqest", 3, + downloadAndUpdateRequest.getSoftwareModules().size()); for (final org.eclipse.hawkbit.dmf.json.model.SoftwareModule softwareModule : downloadAndUpdateRequest .getSoftwareModules()) { - assertTrue(softwareModule.getArtifacts().isEmpty()); + assertTrue("Artifact list for softwaremodule should be empty", softwareModule.getArtifacts().isEmpty()); for (final SoftwareModule softwareModule2 : dsA.getModules()) { - assertNotNull(softwareModule.getModuleId()); + assertNotNull("Sofware module ID should be set", softwareModule.getModuleId()); if (!softwareModule.getModuleId().equals(softwareModule2.getId())) { continue; } - assertEquals(softwareModule.getModuleType(), softwareModule2.getType().getKey()); - assertEquals(softwareModule.getModuleVersion(), softwareModule2.getVersion()); + assertEquals( + "Software module type in event should be the same as the softwaremodule in the distribution set", + softwareModule.getModuleType(), softwareModule2.getType().getKey()); + assertEquals( + "Software module version in event should be the same as the softwaremodule in the distribution set", + softwareModule.getModuleVersion(), softwareModule2.getVersion()); } } } @@ -134,17 +141,18 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit Mockito.when(rabbitTemplate.convertSendAndReceive(any())).thenReturn(receivedList); final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( - 1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("mytest")); + 1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("vHost", "mytest")); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); - final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress().getHost()); + final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); - assertEquals(3, downloadAndUpdateRequest.getSoftwareModules().size()); + assertEquals("DownloadAndUpdateRequest event should contains 3 software modules", 3, + downloadAndUpdateRequest.getSoftwareModules().size()); for (final org.eclipse.hawkbit.dmf.json.model.SoftwareModule softwareModule : downloadAndUpdateRequest .getSoftwareModules()) { if (!softwareModule.getModuleId().equals(module.getId())) { continue; } - assertFalse(softwareModule.getArtifacts().isEmpty()); + assertFalse("The software module artifacts should not be empty", softwareModule.getArtifacts().isEmpty()); } } @@ -152,11 +160,10 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit @Description("Verfies that send cancel event works") public void testSendCancelRequest() { final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent = new CancelTargetAssignmentEvent( - 1L, "default", CONTROLLER_ID, 1l, IpUtil.createAmqpUri("mytest")); + 1L, "default", CONTROLLER_ID, 1l, IpUtil.createAmqpUri("vHost", "mytest")); amqpMessageDispatcherService .targetCancelAssignmentToDistributionSet(cancelTargetAssignmentDistributionSetEvent); - final Message sendMessage = createArgumentCapture( - cancelTargetAssignmentDistributionSetEvent.getTargetAdress().getHost()); + final Message sendMessage = createArgumentCapture(cancelTargetAssignmentDistributionSetEvent.getTargetAdress()); assertCancelMessage(sendMessage); } @@ -164,8 +171,8 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit private void assertCancelMessage(final Message sendMessage) { assertEventMessage(sendMessage); final Long actionId = convertMessage(sendMessage, Long.class); - assertEquals(actionId, Long.valueOf(1)); - assertEquals(EventTopic.CANCEL_DOWNLOAD, + assertEquals("Action ID should be 1", actionId, Long.valueOf(1)); + assertEquals("The topc in the message should be a CANCEL_DOWNLOAD value", EventTopic.CANCEL_DOWNLOAD, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC)); } @@ -174,8 +181,9 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit assertEventMessage(sendMessage); final DownloadAndUpdateRequest downloadAndUpdateRequest = convertMessage(sendMessage, DownloadAndUpdateRequest.class); - assertEquals(downloadAndUpdateRequest.getActionId(), Long.valueOf(1)); - assertEquals(EventTopic.DOWNLOAD_AND_INSTALL, + assertEquals("The action ID of the downloadAndUpdateRequest event shuold be 1", + downloadAndUpdateRequest.getActionId(), Long.valueOf(1)); + assertEquals("The topic of the event shuold contain DOWNLOAD_AND_INSTALL", EventTopic.DOWNLOAD_AND_INSTALL, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC)); return downloadAndUpdateRequest; @@ -185,16 +193,19 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit * @param sendMessage */ private void assertEventMessage(final Message sendMessage) { - assertNotNull(sendMessage); + assertNotNull("The message should not be null", sendMessage); - assertEquals(CONTROLLER_ID, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.THING_ID)); - assertEquals(MessageType.EVENT, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TYPE)); - assertEquals(MessageProperties.CONTENT_TYPE_JSON, sendMessage.getMessageProperties().getContentType()); + assertEquals("The value of the message header THING_ID should be " + CONTROLLER_ID, CONTROLLER_ID, + sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.THING_ID)); + assertEquals("The value of the message header TYPE should be EVENT", MessageType.EVENT, + sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TYPE)); + assertEquals("The content type message should be " + MessageProperties.CONTENT_TYPE_JSON, + MessageProperties.CONTENT_TYPE_JSON, sendMessage.getMessageProperties().getContentType()); } - protected Message createArgumentCapture(final String exchange) { + protected Message createArgumentCapture(final URI uri) { final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Message.class); - Mockito.verify(amqpMessageDispatcherService).sendMessage(eq(exchange), argumentCaptor.capture()); + Mockito.verify(senderService).sendMessage(argumentCaptor.capture(), eq(uri)); return argumentCaptor.getValue(); } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java index 4a05e96ff..79a39a40a 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java @@ -99,14 +99,15 @@ public class AmqpMessageHandlerServiceTest { @Mock private EventBus eventBus; + @Mock + private RabbitTemplate rabbitTemplate; + @Before public void before() throws Exception { - amqpMessageHandlerService = new AmqpMessageHandlerService(); - amqpMessageHandlerService.setControllerManagement(controllerManagementMock); messageConverter = new Jackson2JsonMessageConverter(); - final RabbitTemplate rabbitTemplate = new RabbitTemplate(); - rabbitTemplate.setMessageConverter(messageConverter); - amqpMessageHandlerService.setRabbitTemplate(rabbitTemplate); + when(rabbitTemplate.getMessageConverter()).thenReturn(messageConverter); + amqpMessageHandlerService = new AmqpMessageHandlerService(rabbitTemplate); + amqpMessageHandlerService.setControllerManagement(controllerManagementMock); amqpMessageHandlerService.setAuthenticationManager(authenticationManagerMock); amqpMessageHandlerService.setArtifactManagement(artifactManagementMock); amqpMessageHandlerService.setCache(cacheMock); @@ -115,14 +116,16 @@ public class AmqpMessageHandlerServiceTest { } - @Test(expected = IllegalArgumentException.class) @Description("Tests not allowed content-type in message") public void testWrongContentType() { final MessageProperties messageProperties = new MessageProperties(); messageProperties.setContentType("xml"); final Message message = new Message(new byte[0], messageProperties); - amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT); - fail(); + try { + amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); + fail("IllegalArgumentException was excepeted due to worng content type"); + } catch (final IllegalArgumentException e) { + } } @Test @@ -133,18 +136,16 @@ public class AmqpMessageHandlerServiceTest { messageProperties.setHeader(MessageHeaderKey.THING_ID, "1"); final Message message = messageConverter.toMessage(new byte[0], messageProperties); - // mock final ArgumentCaptor targetIdCaptor = ArgumentCaptor.forClass(String.class); final ArgumentCaptor uriCaptor = ArgumentCaptor.forClass(URI.class); when(controllerManagementMock.findOrRegisterTargetIfItDoesNotexist(targetIdCaptor.capture(), uriCaptor.capture())).thenReturn(null); - // test - amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); // verify - assertThat(targetIdCaptor.getValue()).isEqualTo(knownThingId); - assertThat(uriCaptor.getValue().toString()).isEqualTo("amqp://MyTest"); + assertThat(targetIdCaptor.getValue()).as("Thing id is wrong").isEqualTo(knownThingId); + assertThat(uriCaptor.getValue().toString()).as("Uri is not right").isEqualTo("amqp://vHost/MyTest"); } @@ -156,7 +157,7 @@ public class AmqpMessageHandlerServiceTest { final Message message = messageConverter.toMessage("", messageProperties); try { - amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no replyTo header was set"); } catch (final IllegalArgumentException exception) { // test ok - exception was excepted @@ -170,7 +171,7 @@ public class AmqpMessageHandlerServiceTest { final MessageProperties messageProperties = createMessageProperties(MessageType.THING_CREATED); final Message message = messageConverter.toMessage(new byte[0], messageProperties); try { - amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no thingID was set"); } catch (final IllegalArgumentException exception) { // test ok - exception was excepted @@ -186,7 +187,7 @@ public class AmqpMessageHandlerServiceTest { final Message message = messageConverter.toMessage(new byte[0], messageProperties); try { - amqpMessageHandlerService.onMessage(message, type, TENANT); + amqpMessageHandlerService.onMessage(message, type, TENANT, "vHost"); fail("IllegalArgumentException was excepeted due to unknown message type"); } catch (final IllegalArgumentException exception) { // test ok - exception was excepted @@ -199,21 +200,21 @@ public class AmqpMessageHandlerServiceTest { final MessageProperties messageProperties = createMessageProperties(MessageType.EVENT); final Message message = new Message(new byte[0], messageProperties); try { - amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); - fail(); + amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); + fail("IllegalArgumentException was excepeted due to unknown message type"); } catch (final IllegalArgumentException e) { } try { messageProperties.setHeader(MessageHeaderKey.TOPIC, "wrongTopic"); - amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); - fail(); + amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); + fail("IllegalArgumentException was excepeted due to unknown topic"); } catch (final IllegalArgumentException e) { } messageProperties.setHeader(MessageHeaderKey.TOPIC, EventTopic.CANCEL_DOWNLOAD.name()); try { - amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted because there was no event topic"); } catch (final IllegalArgumentException exception) { // test ok - exception was excepted @@ -232,7 +233,7 @@ public class AmqpMessageHandlerServiceTest { messageProperties); try { - amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no action id was set"); } catch (final IllegalArgumentException exception) { // test ok - exception was excepted @@ -249,7 +250,7 @@ public class AmqpMessageHandlerServiceTest { messageProperties); try { - amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no action id was set"); } catch (final IllegalArgumentException exception) { // test ok - exception was excepted @@ -267,12 +268,13 @@ public class AmqpMessageHandlerServiceTest { // test final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT); + TENANT, "vHost"); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); - assertThat(downloadResponse).isNotNull(); - assertThat(downloadResponse.getResponseCode()).isEqualTo(HttpStatus.NOT_FOUND.value()); + assertThat(downloadResponse).as("Message body should not null").isNotNull(); + assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong") + .isEqualTo(HttpStatus.NOT_FOUND.value()); } @Test @@ -290,12 +292,13 @@ public class AmqpMessageHandlerServiceTest { // test final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT); + TENANT, "vHost"); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); - assertThat(downloadResponse).isNotNull(); - assertThat(downloadResponse.getResponseCode()).isEqualTo(HttpStatus.NOT_FOUND.value()); + assertThat(downloadResponse).as("Message body should not null").isNotNull(); + assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong") + .isEqualTo(HttpStatus.NOT_FOUND.value()); } @Test @@ -321,14 +324,16 @@ public class AmqpMessageHandlerServiceTest { // test final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT); + TENANT, "vHost"); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); - assertThat(downloadResponse).isNotNull(); - assertThat(downloadResponse.getResponseCode()).isEqualTo(HttpStatus.OK.value()); - assertThat(downloadResponse.getArtifact().getSize()).isEqualTo(1L); - assertThat(downloadResponse.getDownloadUrl()).startsWith("http://localhost/api/v1/downloadserver/downloadId/"); + assertThat(downloadResponse).as("Message body should not null").isNotNull(); + assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong") + .isEqualTo(HttpStatus.OK.value()); + assertThat(downloadResponse.getArtifact().getSize()).as("Wrong artifact size in message body").isEqualTo(1L); + assertThat(downloadResponse.getDownloadUrl()).as("download url is wrong") + .startsWith("http://localhost/api/v1/downloadserver/downloadId/"); } @Test @@ -355,7 +360,7 @@ public class AmqpMessageHandlerServiceTest { messageProperties); // test - amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); + amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); // verify final ArgumentCaptor captorTargetAssignDistributionSetEvent = ArgumentCaptor @@ -364,9 +369,11 @@ public class AmqpMessageHandlerServiceTest { final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = captorTargetAssignDistributionSetEvent .getValue(); - assertThat(targetAssignDistributionSetEvent.getControllerId()).isEqualTo("target1"); - assertThat(targetAssignDistributionSetEvent.getActionId()).isEqualTo(22L); - assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).isEqualTo(softwareModuleList); + assertThat(targetAssignDistributionSetEvent.getControllerId()).as("event has wrong controller id") + .isEqualTo("target1"); + assertThat(targetAssignDistributionSetEvent.getActionId()).as("event has wrong action id").isEqualTo(22L); + assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).as("event has wrong sofware modules") + .isEqualTo(softwareModuleList); } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index fcafb23e4..169a12f1e 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -11,6 +11,9 @@ package org.eclipse.hawkbit.util; import static org.junit.Assert.assertEquals; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.AmqpTestConfiguration; +import org.eclipse.hawkbit.RepositoryApplicationConfiguration; +import org.eclipse.hawkbit.TestConfiguration; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.dmf.json.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -20,6 +23,7 @@ import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -31,6 +35,8 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Artifact URL Handler") @Stories("Test to generate the artifact download URL") +@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, TestConfiguration.class, + AmqpTestConfiguration.class }) public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { @Autowired @@ -53,18 +59,22 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest @Description("Tests generate the http download url") public void testHttpUrl() { final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTP); - assertEquals("http://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId - + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" - + localArtifact.getFilename(), url); + assertEquals("http is build incorrect", + "http://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + + localArtifact.getFilename(), + url); } @Test @Description("Tests generate the https download url") public void testHttpsUrl() { final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTPS); - assertEquals("https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId - + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" - + localArtifact.getFilename(), url); + assertEquals("https is build incorrect", + "https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + + localArtifact.getFilename(), + url); } @Test @@ -72,7 +82,7 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest public void testCoapUrl() { final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.COAP); - assertEquals("coap://127.0.0.1:5683/fw/" + tenantAware.getCurrentTenant() + "/" + controllerId + "/sha1/" - + localArtifact.getSha1Hash(), url); + assertEquals("coap is build incorrect", "coap://127.0.0.1:5683/fw/" + tenantAware.getCurrentTenant() + "/" + + controllerId + "/sha1/" + localArtifact.getSha1Hash(), url); } } diff --git a/hawkbit-repository/pom.xml b/hawkbit-repository/pom.xml index 62d234ddb..981da979e 100644 --- a/hawkbit-repository/pom.xml +++ b/hawkbit-repository/pom.xml @@ -215,7 +215,7 @@ com.ethlo.persistence.tools eclipselink-maven-plugin - 1.1-SNAPSHOT + 2.6.2 process-classes diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java index 2ddbfe870..e19f08b4e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java @@ -48,7 +48,9 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { && !definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".deleteTenant") && !definition.getName() .startsWith(SystemManagement.class.getCanonicalName() + ".currentTenantKeyGenerator") - && !definition.getName().startsWith(RolloutManagement.class.getCanonicalName() + ".rolloutScheduler")) { + && !definition.getName().startsWith(RolloutManagement.class.getCanonicalName() + ".rolloutScheduler") + && !definition.getName() + .startsWith(SystemManagement.class.getCanonicalName() + ".getOrCreateTenantMetadata")) { final String currentTenant = tenantAware.getCurrentTenant(); if (currentTenant == null) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java index 55125e046..79c496480 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java @@ -21,7 +21,7 @@ import java.util.List; */ public class ListReportSeries extends AbstractReportSeries { - private final List data = new ArrayList(); + private final List data = new ArrayList<>(); /** * @param name diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index c0319a069..58ce8c26d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -330,7 +330,7 @@ public class DeploymentManagement { // one we have been switched to canceling state because for targets // which we have changed to // canceling we don't want to publish the new action update event. - final Set targetIdsCancellList = new HashSet(); + final Set targetIdsCancellList = new HashSet<>(); targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids))); // cancel all scheduled actions which are in-active, these actions were @@ -435,7 +435,7 @@ public class DeploymentManagement { */ private Set overrideObsoleteUpdateActions(final List targetsIds) { - final Set cancelledTargetIds = new HashSet(); + final Set cancelledTargetIds = new HashSet<>(); // Figure out if there are potential target/action combinations that // need to be considered @@ -779,8 +779,7 @@ public class DeploymentManagement { multiselect.where(cb.equal(actionRoot.get(Action_.target), target)); multiselect.orderBy(cb.desc(actionRoot.get(Action_.id))); multiselect.groupBy(actionRoot.get(Action_.id)); - final List resultList = entityManager.createQuery(multiselect).getResultList(); - return resultList; + return entityManager.createQuery(multiselect).getResultList(); } /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java index 4290607fd..79f54a3f0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java @@ -57,7 +57,7 @@ public class NoCountPagingRepository { */ public Slice findAll(final Specification spec, final Pageable pageable, final Class domainClass) { - final SimpleJpaNoCountRepository noCountDao = new SimpleJpaNoCountRepository(domainClass, em); + final SimpleJpaNoCountRepository noCountDao = new SimpleJpaNoCountRepository<>(domainClass, em); return noCountDao.findAll(spec, pageable); } @@ -76,7 +76,7 @@ public class NoCountPagingRepository { * org.springframework.data.domain.Pageable) */ public Slice findAll(final Pageable pageable, final Class domainClass) { - final SimpleJpaNoCountRepository noCountDao = new SimpleJpaNoCountRepository(domainClass, em); + final SimpleJpaNoCountRepository noCountDao = new SimpleJpaNoCountRepository<>(domainClass, em); return noCountDao.findAll(pageable); } @@ -120,7 +120,7 @@ public class NoCountPagingRepository { final List content = query.getResultList(); - return new PageImpl(content, pageable, content.size()); + return new PageImpl<>(content, pageable, content.size()); } } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index 4d8b4ff5c..e0ab951ac 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -160,7 +160,7 @@ public class TagManagement { public void deleteTargetTag(@NotEmpty final String targetTagName) { final TargetTag tag = targetTagRepository.findByNameEquals(targetTagName); - final List changed = new LinkedList(); + final List changed = new LinkedList<>(); for (final Target target : targetRepository.findByTag(tag)) { target.getTags().remove(tag); changed.add(target); @@ -311,7 +311,7 @@ public class TagManagement { public void deleteDistributionSetTag(@NotEmpty final String tagName) { final DistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName); - final List changed = new LinkedList(); + final List changed = new LinkedList<>(); for (final DistributionSet set : distributionSetRepository.findByTag(tag)) { set.getTags().remove(tag); changed.add(set); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java index 28389ab01..2b0effae9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java @@ -63,7 +63,7 @@ public class ActionStatus extends BaseEntity { @CollectionTable(name = "sp_action_status_messages", joinColumns = @JoinColumn(name = "action_status_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_stat_msg_act_stat") ) , indexes = { @Index(name = "sp_idx_action_status_msgs_01", columnList = "action_status_id") }) @Column(name = "detail_message", length = 512) - private final List messages = new ArrayList(); + private final List messages = new ArrayList<>(); /** * Creates a new {@link ActionStatus} object. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java index 08e4fcecb..bb7781733 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java @@ -87,7 +87,7 @@ public class Target extends NamedEntity implements Persistable { @JoinTable(name = "sp_target_target_tag", joinColumns = { @JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_target") ) }, inverseJoinColumns = { @JoinColumn(name = "tag", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_tag") ) }) - private Set tags = new HashSet(); + private Set tags = new HashSet<>(); @CascadeOnDelete @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = { CascadeType.REMOVE }) diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java index 2fb68ec31..6633a27e5 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java @@ -54,7 +54,7 @@ public class MethodSecurityUtil { if (!METHOD_SECURITY_EXCLUSION.contains(method.getName()) && !method.isSynthetic() && Modifier.isPublic(method.getModifiers())) { final PreAuthorize annotation = method.getAnnotation(PreAuthorize.class); - assertThat(annotation).describedAs( + assertThat(annotation).as( "The public method " + method.getName() + " is not annoated with @PreAuthorize, security leak?") .isNotNull(); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java index 5585aab95..2929110dd 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java @@ -150,14 +150,14 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { ExternalArtifact result = artifactManagement.createExternalArtifact(provider, null, sm.getId()); - assertNotNull(result); + assertNotNull("The result of an external artifact should not be null", result); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(1); assertThat(result.getSoftwareModule().getId()).isEqualTo(sm.getId()); assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/{version}/"); assertThat(result.getExternalArtifactProvider()).isEqualTo(provider); result = artifactManagement.createExternalArtifact(provider, "/test", sm2.getId()); - assertNotNull(result); + assertNotNull("The newly created external artifact should not be null", result); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(2); assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/test"); assertThat(result.getExternalArtifactProvider()).isEqualTo(provider); @@ -176,7 +176,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { "https://fhghdfjgh", "/{version}/"); final ExternalArtifact result = artifactManagement.createExternalArtifact(provider, null, sm.getId()); - assertNotNull(result); + assertNotNull("The newly created external artifact should not be null", result); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(1); artifactManagement.deleteExternalArtifact(result.getId()); @@ -348,7 +348,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { final LocalArtifact result = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); - assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(random), + assertTrue("The stored binary matches the given binary", IOUtils.contentEquals(new ByteArrayInputStream(random), artifactManagement.loadLocalArtifactBinary(result).getFileInputStream())); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java index 0db3325aa..6427ca8a2 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java @@ -19,7 +19,6 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.Constants; @@ -98,8 +97,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final List findActionsWithStatusCountByTarget = deploymentManagement .findActionsWithStatusCountByTargetOrderByIdDesc(testTarget.get(0)); - assertThat(findActionsWithStatusCountByTarget).hasSize(1); - assertThat(findActionsWithStatusCountByTarget.get(0).getActionStatusCount()).isEqualTo(3L); + assertThat(findActionsWithStatusCountByTarget).as("wrong action size").hasSize(1); + assertThat(findActionsWithStatusCountByTarget.get(0).getActionStatusCount()).as("wrong action status size") + .isEqualTo(3L); } @Test @@ -115,27 +115,32 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final DistributionSetTag tag = tagManagement.createDistributionSetTag(new DistributionSetTag("Tag1")); final List assignedDS = distributionSetManagement.assignTag(assignDS, tag); - assertThat(assignedDS.size()).isEqualTo(4); - assignedDS.forEach(ds -> assertThat(ds.getTags().size()).isEqualTo(1)); + assertThat(assignedDS.size()).as("assigned ds has wrong size").isEqualTo(4); + assignedDS.forEach(ds -> assertThat(ds.getTags().size()).as("ds has wrong tag size").isEqualTo(1)); DistributionSetTag findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1"); - assertThat(assignedDS.size()).isEqualTo(findDistributionSetTag.getAssignedToDistributionSet().size()); + assertThat(assignedDS.size()).as("assigned ds has wrong size") + .isEqualTo(findDistributionSetTag.getAssignedToDistributionSet().size()); - assertThat(distributionSetManagement.unAssignTag(Long.valueOf(100), findDistributionSetTag)).isNull(); + assertThat(distributionSetManagement.unAssignTag(Long.valueOf(100), findDistributionSetTag)) + .as("unassign tag result should be null").isNull(); final DistributionSet unAssignDS = distributionSetManagement.unAssignTag(assignDS.get(0), findDistributionSetTag); - assertThat(unAssignDS.getId()).isEqualTo(assignDS.get(0)); - assertThat(unAssignDS.getTags().size()).isEqualTo(0); + assertThat(unAssignDS.getId()).as("unassigned ds is wrong").isEqualTo(assignDS.get(0)); + assertThat(unAssignDS.getTags().size()).as("unassigned ds has wrong tag size").isEqualTo(0); findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1"); - assertThat(findDistributionSetTag.getAssignedToDistributionSet().size()).isEqualTo(3); + assertThat(findDistributionSetTag.getAssignedToDistributionSet().size()).as("ds tag ds has wrong ds size") + .isEqualTo(3); final List unAssignTargets = distributionSetManagement .unAssignAllDistributionSetsByTag(findDistributionSetTag); findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1"); - assertThat(findDistributionSetTag.getAssignedToDistributionSet().size()).isEqualTo(0); - assertThat(unAssignTargets.size()).isEqualTo(3); - unAssignTargets.forEach(target -> assertThat(target.getTags().size()).isEqualTo(0)); + assertThat(findDistributionSetTag.getAssignedToDistributionSet().size()).as("ds tag has wrong ds size") + .isEqualTo(0); + assertThat(unAssignTargets.size()).as("unassigned target has wrong size").isEqualTo(3); + unAssignTargets + .forEach(target -> assertThat(target.getTags().size()).as("target has wrong tag size").isEqualTo(0)); } @Test @@ -156,7 +161,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { targetManagement.findAllTargetIds().forEach(targetIdName -> { assertThat(deploymentManagement.findActiveActionsByTarget( - targetManagement.findTargetByControllerID(targetIdName.getControllerId()))).hasSize(2); + targetManagement.findTargetByControllerID(targetIdName.getControllerId()))) + .as("active action has wrong size").hasSize(2); }); } @@ -179,14 +185,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // check initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.UNKNOWN); + .as("target has update status").isEqualTo(TargetUpdateStatus.UNKNOWN); // assign the two sets in a row Action firstAction = assignSet(target, dsFirst); Action secondAction = assignSet(target, dsSecond); - assertThat(actionRepository.findAll()).hasSize(2); - assertThat(actionStatusRepository.findAll()).hasSize(2); + assertThat(actionRepository.findAll()).as("wrong size of actions").hasSize(2); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(2); // we cancel second -> back to first deploymentManagement.cancelAction(secondAction, @@ -196,10 +202,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { secondAction.setStatus(Status.CANCELED); controllerManagement.addCancelActionStatus( new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction); - assertThat(actionStatusRepository.findAll()).hasSize(4); - assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(dsFirst); + assertThat(actionStatusRepository.findAll()).as("wrong size of actions status").hasSize(4); + assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).as("wrong ds") + .isEqualTo(dsFirst); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.PENDING); + .as("wrong update status").isEqualTo(TargetUpdateStatus.PENDING); // we cancel first -> back to installed deploymentManagement.cancelAction(firstAction, @@ -209,11 +216,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { firstAction.setStatus(Status.CANCELED); controllerManagement.addCancelActionStatus( new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction); - assertThat(actionStatusRepository.findAll()).hasSize(6); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(6); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) - .isEqualTo(dsInstalled); + .as("wrong assigned ds").isEqualTo(dsInstalled); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.IN_SYNC); + .as("wrong update status").isEqualTo(TargetUpdateStatus.IN_SYNC); } @Test @@ -235,14 +242,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // check initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.UNKNOWN); + .as("wrong update status").isEqualTo(TargetUpdateStatus.UNKNOWN); // assign the two sets in a row Action firstAction = assignSet(target, dsFirst); Action secondAction = assignSet(target, dsSecond); - assertThat(actionRepository.findAll()).hasSize(2); - assertThat(actionStatusRepository.findAll()).hasSize(2); + assertThat(actionRepository.findAll()).as("wrong size of actions").hasSize(2); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(2); // we cancel first -> second is left deploymentManagement.cancelAction(firstAction, @@ -252,26 +259,28 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { firstAction.setStatus(Status.CANCELED); controllerManagement.addCancelActionStatus( new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction); - assertThat(actionStatusRepository.findAll()).hasSize(4); - assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(dsSecond); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(4); + assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) + .as("wrong assigned ds").isEqualTo(dsSecond); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.PENDING); + .as("wrong target update status").isEqualTo(TargetUpdateStatus.PENDING); // we cancel second -> remain assigned until finished cancellation deploymentManagement.cancelAction(secondAction, targetManagement.findTargetByControllerID(target.getControllerId())); secondAction = deploymentManagement.findActionWithDetails(secondAction.getId()); - assertThat(actionStatusRepository.findAll()).hasSize(5); - assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(dsSecond); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(5); + assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) + .as("wrong assigned ds").isEqualTo(dsSecond); // confirm cancellation secondAction.setStatus(Status.CANCELED); controllerManagement.addCancelActionStatus( new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction); // cancelled success -> back to dsInstalled assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) - .isEqualTo(dsInstalled); + .as("wrong installed ds").isEqualTo(dsInstalled); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.IN_SYNC); + .as("wrong target info update status").isEqualTo(TargetUpdateStatus.IN_SYNC); } @Test @@ -290,13 +299,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // verify initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.UNKNOWN); + .as("wrong target info update status").isEqualTo(TargetUpdateStatus.UNKNOWN); Action assigningAction = assignSet(target, ds); // verify assignment - assertThat(actionRepository.findAll()).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(1); + assertThat(actionRepository.findAll()).as("wrong size of action").hasSize(1); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(1); target = targetManagement.findTargetByControllerID(target.getControllerId()); @@ -309,11 +318,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { assigningAction = deploymentManagement.findActionWithDetails(assigningAction.getId()); // verify - assertThat(assigningAction.getStatus()).isEqualTo(Status.CANCELED); + assertThat(assigningAction.getStatus()).as("wrong size of status").isEqualTo(Status.CANCELED); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) - .isEqualTo(dsInstalled); + .as("wrong assigned ds").isEqualTo(dsInstalled); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.IN_SYNC); + .as("wrong target update status").isEqualTo(TargetUpdateStatus.IN_SYNC); } @Test @@ -332,13 +341,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // verify initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.UNKNOWN); + .as("wrong update status").isEqualTo(TargetUpdateStatus.UNKNOWN); final Action assigningAction = assignSet(target, ds); // verify assignment - assertThat(actionRepository.findAll()).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(1); + assertThat(actionRepository.findAll()).as("wrong size of action").hasSize(1); + assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(1); // force quit assignment try { @@ -353,11 +362,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { deploymentManagement.assignDistributionSet(ds.getId(), new String[] { target.getControllerId() }); assertThat( targetManagement.findTargetByControllerID(target.getControllerId()).getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.PENDING); + .as("wrong update status").isEqualTo(TargetUpdateStatus.PENDING); assertThat(targetManagement.findTargetByControllerID(target.getControllerId()).getAssignedDistributionSet()) - .isEqualTo(ds); + .as("wrong assigned ds").isEqualTo(ds); final Action action = actionRepository.findByTargetAndDistributionSet(pageReq, target, ds).getContent().get(0); - assertThat(action).isNotNull(); + assertThat(action).as("action should not be null").isNotNull(); return action; } @@ -389,26 +398,30 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { deploymentManagement.assignDistributionSet(ds, savedDeployedTargets); // verify that one Action for each assignDistributionSet - assertThat(actionRepository.findAll(pageReq).getNumberOfElements()).isEqualTo(20); + assertThat(actionRepository.findAll(pageReq).getNumberOfElements()).as("wrong size of actions").isEqualTo(20); final Iterable allFoundTargets = targetManagement.findTargetsAll(pageReq).getContent(); - assertThat(allFoundTargets).containsAll(savedDeployedTargets).containsAll(savedNakedTargets); - assertThat(savedDeployedTargets).doesNotContain(Iterables.toArray(savedNakedTargets, Target.class)); - assertThat(savedNakedTargets).doesNotContain(Iterables.toArray(savedDeployedTargets, Target.class)); + assertThat(allFoundTargets).as("founded targets are wrong").containsAll(savedDeployedTargets) + .containsAll(savedNakedTargets); + assertThat(savedDeployedTargets).as("saved target are wrong") + .doesNotContain(Iterables.toArray(savedNakedTargets, Target.class)); + assertThat(savedNakedTargets).as("saved target are wrong") + .doesNotContain(Iterables.toArray(savedDeployedTargets, Target.class)); for (final Target myt : savedNakedTargets) { final Target t = targetManagement.findTargetByControllerID(myt.getControllerId()); - assertThat(deploymentManagement.findActionsByTarget(t)).isEmpty(); + assertThat(deploymentManagement.findActionsByTarget(t)).as("action should be empty").isEmpty(); } for (final Target myt : savedDeployedTargets) { final Target t = targetManagement.findTargetByControllerID(myt.getControllerId()); final List activeActionsByTarget = deploymentManagement.findActiveActionsByTarget(t); - assertThat(activeActionsByTarget).isNotEmpty(); - assertThat(t.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); + assertThat(activeActionsByTarget).as("action should not be empty").isNotEmpty(); + assertThat(t.getTargetInfo().getUpdateStatus()).as("wrong target update status") + .isEqualTo(TargetUpdateStatus.PENDING); for (final Action ua : activeActionsByTarget) { - assertThat(ua.getDistributionSet()).isEqualTo(ds); + assertThat(ua.getDistributionSet()).as("action has wrong ds").isEqualTo(ds); } } @@ -447,12 +460,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // give some chance to receive events asynchronously Thread.sleep(300); final List events = eventHandlerMock.getEvents(1, TimeUnit.MILLISECONDS); - assertThat(events).isEmpty(); + assertThat(events).as("events should be empty").isEmpty(); final EventHandlerMock eventHandlerMockAfterCompletionOfDs = new EventHandlerMock(10); eventBus.register(eventHandlerMockAfterCompletionOfDs); - assertThat(deploymentManagement.assignDistributionSet(nowComplete, targets).getAssigned()).isEqualTo(10); + assertThat(deploymentManagement.assignDistributionSet(nowComplete, targets).getAssigned()) + .as("assign ds doesn't work").isEqualTo(10); assertTargetAssignDistributionSetEvents(targets, nowComplete, eventHandlerMockAfterCompletionOfDs.getEvents(10, TimeUnit.SECONDS)); } @@ -492,7 +506,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // retrieving all Actions created by the assignDistributionSet call final Page page = actionRepository.findAll(pageReq); // and verify the number - assertThat(page.getTotalElements()).isEqualTo(noOfDeployedTargets * noOfDistributionSets); + assertThat(page.getTotalElements()).as("wrong size of actions") + .isEqualTo(noOfDeployedTargets * noOfDistributionSets); // only records retrieved from the DB can be evaluated to be sure that // all fields are @@ -503,17 +518,20 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Iterable undeployedTargetsFromDB = targetRepository.findAll(undeployedTargetIDs); // test that number of Targets - assertThat(allFoundTargets.spliterator().getExactSizeIfKnown()) + assertThat(allFoundTargets.spliterator().getExactSizeIfKnown()).as("number of target is wrong") .isEqualTo(deployedTargetsFromDB.spliterator().getExactSizeIfKnown() + undeployedTargetsFromDB.spliterator().getExactSizeIfKnown()); - assertThat(deployedTargetsFromDB.spliterator().getExactSizeIfKnown()).isEqualTo(noOfDeployedTargets); - assertThat(undeployedTargetsFromDB.spliterator().getExactSizeIfKnown()).isEqualTo(noOfUndeployedTargets); + assertThat(deployedTargetsFromDB.spliterator().getExactSizeIfKnown()).as("number of target is wrong") + .isEqualTo(noOfDeployedTargets); + assertThat(undeployedTargetsFromDB.spliterator().getExactSizeIfKnown()).as("number of target is wrong") + .isEqualTo(noOfUndeployedTargets); // test the content of different lists - assertThat(allFoundTargets).containsAll(deployedTargetsFromDB).containsAll(undeployedTargetsFromDB); - assertThat(deployedTargetsFromDB).containsAll(savedDeployedTargets) + assertThat(allFoundTargets).as("content of founded target is wrong").containsAll(deployedTargetsFromDB) + .containsAll(undeployedTargetsFromDB); + assertThat(deployedTargetsFromDB).as("content of deployed target is wrong").containsAll(savedDeployedTargets) .doesNotContain(Iterables.toArray(undeployedTargetsFromDB, Target.class)); - assertThat(undeployedTargetsFromDB).containsAll(savedNakedTargets) + assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong").containsAll(savedNakedTargets) .doesNotContain(Iterables.toArray(deployedTargetsFromDB, Target.class)); // For each of the 4 targets 1 distribution sets gets assigned @@ -541,42 +559,42 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final DistributionSet dsC = deployResWithDsC.getDistributionSets().get(0); // retrieving the UpdateActions created by the assignments - final Action updActA = actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(0); - final Action updActB = actionRepository.findByDistributionSet(pageRequest, dsB).getContent().get(0); - final Action updActC = actionRepository.findByDistributionSet(pageRequest, dsC).getContent().get(0); + actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(0); + actionRepository.findByDistributionSet(pageRequest, dsB).getContent().get(0); + actionRepository.findByDistributionSet(pageRequest, dsC).getContent().get(0); // verifying the correctness of the assignments for (final Target t : deployResWithDsA.getDeployedTargets()) { - assertThat(t.getAssignedDistributionSet().getId()).isEqualTo(dsA.getId()); + assertThat(t.getAssignedDistributionSet().getId()).as("assignment is not correct").isEqualTo(dsA.getId()); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo() - .getInstalledDistributionSet()).isNull(); + .getInstalledDistributionSet()).as("installed ds should be null").isNull(); } for (final Target t : deployResWithDsB.getDeployedTargets()) { - assertThat(t.getAssignedDistributionSet().getId()).isEqualTo(dsB.getId()); + assertThat(t.getAssignedDistributionSet().getId()).as("assigned ds is wrong").isEqualTo(dsB.getId()); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo() - .getInstalledDistributionSet()).isNull(); + .getInstalledDistributionSet()).as("installed ds should be null").isNull(); } for (final Target t : deployResWithDsC.getDeployedTargets()) { assertThat(t.getAssignedDistributionSet().getId()).isEqualTo(dsC.getId()); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo() - .getInstalledDistributionSet()).isNull(); + .getInstalledDistributionSet()).as("installed ds should not be null").isNull(); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.PENDING); + .as("wrong target info update status").isEqualTo(TargetUpdateStatus.PENDING); } final List updatedTsDsA = sendUpdateActionStatusToTargets(dsA, deployResWithDsA.getDeployedTargets(), Status.FINISHED, new String[] { "alles gut" }); // verify, that dsA is deployed correctly - assertThat(updatedTsDsA).isEqualTo(deployResWithDsA.getDeployedTargets()); + assertThat(updatedTsDsA).as("ds is not deployed correctly").isEqualTo(deployResWithDsA.getDeployedTargets()); for (final Target t_ : updatedTsDsA) { final Target t = targetManagement.findTargetByControllerID(t_.getControllerId()); - assertThat(t.getAssignedDistributionSet()).isEqualTo(dsA); + assertThat(t.getAssignedDistributionSet()).as("assigned ds is wrong").isEqualTo(dsA); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo() - .getInstalledDistributionSet()).isEqualTo(dsA); + .getInstalledDistributionSet()).as("installed ds is wrong").isEqualTo(dsA); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.IN_SYNC); - assertThat(deploymentManagement.findActiveActionsByTarget(t)).hasSize(0); + .as("wrong target info update status").isEqualTo(TargetUpdateStatus.IN_SYNC); + assertThat(deploymentManagement.findActiveActionsByTarget(t)).as("no actions should be active").hasSize(0); } // deploy dsA to the target which already have dsB deployed -> must @@ -585,18 +603,18 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // UpdateAction for dsA final Iterable deployed2DS = deploymentManagement .assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets()).getAssignedTargets(); - final Action updActA2 = actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(1); + actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(1); - assertThat(deployed2DS).containsAll(deployResWithDsB.getDeployedTargets()); - assertThat(deployed2DS).hasSameSizeAs(deployResWithDsB.getDeployedTargets()); + assertThat(deployed2DS).as("deployed ds is wrong").containsAll(deployResWithDsB.getDeployedTargets()); + assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsB.getDeployedTargets()); for (final Target t_ : deployed2DS) { final Target t = targetManagement.findTargetByControllerID(t_.getControllerId()); - assertThat(t.getAssignedDistributionSet()).isEqualTo(dsA); + assertThat(t.getAssignedDistributionSet()).as("assigned ds is wrong").isEqualTo(dsA); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo() - .getInstalledDistributionSet()).isNull(); + .getInstalledDistributionSet()).as("installed ds should be null").isNull(); assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus()) - .isEqualTo(TargetUpdateStatus.PENDING); + .as("wrong target info update status").isEqualTo(TargetUpdateStatus.PENDING); } } @@ -629,22 +647,22 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { distributionSetManagement.deleteDistributionSet(dsA.getId()); dsA = distributionSetManagement.findDistributionSetById(dsA.getId()); - assertThat(dsA).isNull(); + assertThat(dsA).as("ds should be null").isNull(); // // verify that the ds is not physically deleted for (final DistributionSet ds : deploymentResult.getDistributionSets()) { distributionSetManagement.deleteDistributionSet(ds.getId()); final DistributionSet foundDS = distributionSetManagement.findDistributionSetById(ds.getId()); - assertThat(foundDS).isNotNull(); - assertThat(foundDS.isDeleted()).isTrue(); + assertThat(foundDS).as("founded should not be null").isNotNull(); + assertThat(foundDS.isDeleted()).as("founded ds should be deleted").isTrue(); } // verify that deleted attribute is used correctly List allFoundDS = distributionSetManagement.findDistributionSetsAll(pageReq, false, true) .getContent(); - assertThat(allFoundDS.size()).isEqualTo(0); + assertThat(allFoundDS.size()).as("no ds should be founded").isEqualTo(0); allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, true, true).getContent(); - assertThat(allFoundDS).hasSize(noOfDistributionSets); + assertThat(allFoundDS).as("wrong size of founded ds").hasSize(noOfDistributionSets); for (final DistributionSet ds : deploymentResult.getDistributionSets()) { sendUpdateActionStatusToTargets(ds, deploymentResult.getDeployedTargets(), Status.FINISHED, @@ -658,9 +676,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // successfully and no activeAction is referring to created distribution // sets allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, false, true).getContent(); - assertThat(allFoundDS.size()).isEqualTo(0); + assertThat(allFoundDS.size()).as("no ds should be founded").isEqualTo(0); allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, true, true).getContent(); - assertThat(allFoundDS).hasSize(noOfDistributionSets); + assertThat(allFoundDS).as("size of founded ds is wrong").hasSize(noOfDistributionSets); } @@ -684,15 +702,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { "blabla alles gut"); } - assertThat(targetManagement.countTargetsAll()).isNotZero(); - assertThat(actionStatusRepository.count()).isNotZero(); + assertThat(targetManagement.countTargetsAll()).as("size of targets is wrong").isNotZero(); + assertThat(actionStatusRepository.count()).as("size of action status is wrong").isNotZero(); targetManagement .deleteTargets(deploymentResult.getUndeployedTargetIDs().toArray(new Long[noOfUndeployedTargets])); targetManagement.deleteTargets(deploymentResult.getDeployedTargetIDs().toArray(new Long[noOfDeployedTargets])); - assertThat(targetManagement.countTargetsAll()).isZero(); - assertThat(actionStatusRepository.count()).isZero(); + assertThat(targetManagement.countTargetsAll()).as("size of targets should be zero").isZero(); + assertThat(actionStatusRepository.count()).as("size of action status is wrong").isZero(); } private List sendUpdateActionStatusToTargets(final DistributionSet dsA, final Iterable targs, @@ -743,16 +761,17 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // checking the revisions of the created entities // verifying that the revision of the object and the revision within the // DB has not changed - assertThat(dsA.getOptLockRevision()).isEqualTo( + assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo( distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision()); // verifying that the assignment is correct - assertEquals(1, deploymentManagement.findActiveActionsByTarget(targ).size()); - assertEquals(1, deploymentManagement.findActionsByTarget(targ).size()); - assertEquals(TargetUpdateStatus.PENDING, targ.getTargetInfo().getUpdateStatus()); - assertEquals(dsA, targ.getAssignedDistributionSet()); - assertEquals(dsA, deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()); - assertNull(targ.getTargetInfo().getInstalledDistributionSet()); + assertEquals("Active target actions are wrong", 1, deploymentManagement.findActiveActionsByTarget(targ).size()); + assertEquals("Target actions are wrong", 1, deploymentManagement.findActionsByTarget(targ).size()); + assertEquals("Target status is wrong", TargetUpdateStatus.PENDING, targ.getTargetInfo().getUpdateStatus()); + assertEquals("Assigned ds is wrong", dsA, targ.getAssignedDistributionSet()); + assertEquals("Active ds is wrong", dsA, + deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()); + assertNull("Installed ds should be null", targ.getTargetInfo().getInstalledDistributionSet()); final Page updAct = actionRepository.findByDistributionSet(pageReq, dsA); final Action action = updAct.getContent().get(0); @@ -763,12 +782,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { targ = targetManagement.findTargetByControllerID(targ.getControllerId()); assertEquals(0, deploymentManagement.findActiveActionsByTarget(targ).size()); - // try { assertEquals(1, deploymentManagement.findInActiveActionsByTarget(targ).size()); - // } - // catch( final LazyInitializationException ex ) { - // - // } + assertEquals(TargetUpdateStatus.IN_SYNC, targ.getTargetInfo().getUpdateStatus()); assertEquals(dsA, targ.getAssignedDistributionSet()); assertEquals(dsA, targ.getTargetInfo().getInstalledDistributionSet()); @@ -778,13 +793,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { targ = targs.iterator().next(); - assertEquals(1, deploymentManagement.findActiveActionsByTarget(targ).size()); - assertEquals(TargetUpdateStatus.PENDING, + assertEquals("active actions are wrong", 1, deploymentManagement.findActiveActionsByTarget(targ).size()); + assertEquals("target status is wrong", TargetUpdateStatus.PENDING, targetManagement.findTargetByControllerID(targ.getControllerId()).getTargetInfo().getUpdateStatus()); assertEquals(dsB, targ.getAssignedDistributionSet()); - assertEquals(dsA.getId(), targetManagement.findTargetByControllerIDWithDetails(targ.getControllerId()) - .getTargetInfo().getInstalledDistributionSet().getId()); - assertEquals(dsB, deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()); + assertEquals("Installed ds is wrong", dsA.getId(), + targetManagement.findTargetByControllerIDWithDetails(targ.getControllerId()).getTargetInfo() + .getInstalledDistributionSet().getId()); + assertEquals("Active ds is wrong", dsB, + deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()); } @@ -794,12 +811,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { public void checkThatDsRevisionsIsNotChangedWithTargetAssignment() { final DistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); - final DistributionSet dsB = TestDataUtil.generateDistributionSet("b", softwareManagement, - distributionSetManagement); + TestDataUtil.generateDistributionSet("b", softwareManagement, distributionSetManagement); Target targ = targetManagement .createTarget(TestDataUtil.buildTargetFixture("target-id-A", "first description")); - assertThat(dsA.getOptLockRevision()).isEqualTo( + assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo( distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision()); final List targs = new ArrayList(); @@ -807,7 +823,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Iterable savedTargs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedTargets(); targ = savedTargs.iterator().next(); - assertThat(dsA.getOptLockRevision()).isEqualTo( + assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo( distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision()); } @@ -824,14 +840,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify preparation Action findAction = deploymentManagement.findAction(action.getId()); - assertThat(findAction.getActionType()).isEqualTo(ActionType.SOFT); + assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.SOFT); // test deploymentManagement.forceTargetAction(action.getId()); // verify test findAction = deploymentManagement.findAction(action.getId()); - assertThat(findAction.getActionType()).isEqualTo(ActionType.FORCED); + assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED); } @Test @@ -847,15 +863,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify perparation Action findAction = deploymentManagement.findAction(action.getId()); - assertThat(findAction.getActionType()).isEqualTo(ActionType.FORCED); + assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED); // test final Action forceTargetAction = deploymentManagement.forceTargetAction(action.getId()); // verify test - assertThat(forceTargetAction.getActionType()).isEqualTo(ActionType.FORCED); + assertThat(forceTargetAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED); findAction = deploymentManagement.findAction(action.getId()); - assertThat(findAction.getActionType()).isEqualTo(ActionType.FORCED); + assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED); } /** @@ -917,14 +933,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { if (event.getControllerId().equals(myt.getControllerId())) { found = true; final List activeActionsByTarget = deploymentManagement.findActiveActionsByTarget(myt); - assertThat(activeActionsByTarget).isNotEmpty(); - assertThat(event.getActionId()).isEqualTo(activeActionsByTarget.get(0).getId()) - .as("Action id in database and event do not match"); - assertThat(event.getSoftwareModules()) + assertThat(activeActionsByTarget).as("size of active actions for target is wrong").isNotEmpty(); + assertThat(event.getActionId()).as("Action id in database and event do not match") + .isEqualTo(activeActionsByTarget.get(0).getId()); + assertThat(event.getSoftwareModules()).as("softwaremodule size is not correct") .containsOnly(ds.getModules().toArray(new SoftwareModule[ds.getModules().size()])); } } - assertThat(found).isTrue().as("No event found for controller " + myt.getControllerId()); + assertThat(found).as("No event found for controller " + myt.getControllerId()).isTrue(); } } @@ -943,42 +959,19 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { private final List deployedTargets = new ArrayList(); private final List distributionSets = new ArrayList(); - private final String undeployedTargetPrefix; - private final String deployedTargetPrefix; - private final String distributionSetPrefix; - public DeploymentResult(final Iterable deployedTs, final Iterable undeployedTs, final Iterable dss, final String deployedTargetPrefix, final String undeployedTargetPrefix, final String distributionSetPrefix) { - this.undeployedTargetPrefix = undeployedTargetPrefix; - this.deployedTargetPrefix = deployedTargetPrefix; - this.distributionSetPrefix = distributionSetPrefix; - Iterables.addAll(deployedTargets, deployedTs); Iterables.addAll(undeployedTargets, undeployedTs); Iterables.addAll(distributionSets, dss); - deployedTargets.forEach(new Consumer() { - @Override - public void accept(final Target t) { - deployedTargetIDs.add(t.getId()); - } - }); + deployedTargets.forEach(t -> deployedTargetIDs.add(t.getId())); - undeployedTargets.forEach(new Consumer() { - @Override - public void accept(final Target t) { - undeployedTargetIDs.add(t.getId()); - } - }); + undeployedTargets.forEach(t -> undeployedTargetIDs.add(t.getId())); - distributionSets.forEach(new Consumer() { - @Override - public void accept(final DistributionSet ds) { - distributionSetIDs.add(ds.getId()); - } - }); + distributionSets.forEach(ds -> distributionSetIDs.add(ds.getId())); } @@ -1017,27 +1010,6 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { return deployedTargets; } - /** - * @return the noOfUndeployedTargets - */ - public int getNoOfUndeployedTargets() { - return undeployedTargetIDs.size(); - } - - /** - * @return the noOfDeployedTargets - */ - public int getNoOfDeployedTargets() { - return deployedTargetIDs.size(); - } - - /** - * @return the noOfDistributionSets - */ - public int getNoOfDistributionSets() { - return distributionSets.size(); - } - /** * @return the undeployedTargetIDs */ @@ -1045,26 +1017,6 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { return undeployedTargetIDs; } - /** - * @return the undeployedTargetPrefix - */ - public String getUndeployedTargetPrefix() { - return undeployedTargetPrefix; - } - - /** - * @return the deployedTargetPrefix - */ - public String getDeployedTargetPrefix() { - return deployedTargetPrefix; - } - - /** - * @return the distributionSetPrefix - */ - public String getDistributionSetPrefix() { - return distributionSetPrefix; - } } private static class EventHandlerMock { @@ -1089,9 +1041,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { latch.await(timeout, unit); final List handledEvents = new LinkedList( events); - assertThat(handledEvents).hasSize(expectedNumberOfEvents) - .as("Did not receive the expected amount of events (" + expectedNumberOfEvents - + ") within timeout. Received events are " + handledEvents); + assertThat(handledEvents).as("Did not receive the expected amount of events (" + expectedNumberOfEvents + + ") within timeout. Received events are " + handledEvents).hasSize(expectedNumberOfEvents); + return handledEvents; } } @@ -1117,9 +1069,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { throws InterruptedException { latch.await(timeout, unit); final List handledEvents = new LinkedList(events); - assertThat(handledEvents).hasSize(expectedNumberOfEvents) - .as("Did not receive the expected amount of events (" + expectedNumberOfEvents - + ") within timeout. Received events are " + handledEvents); + assertThat(handledEvents).as("Did not receive the expected amount of events (" + expectedNumberOfEvents + + ") within timeout. Received events are " + handledEvents).hasSize(expectedNumberOfEvents); return handledEvents; } } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java index 0f91fb521..0184a9d26 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java @@ -18,7 +18,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; -import java.util.concurrent.Callable; import java.util.stream.Collectors; import org.eclipse.hawkbit.AbstractIntegrationTest; @@ -96,7 +95,8 @@ public class ReportManagementTest extends AbstractIntegrationTest { // +1 because we go back #maxMonthBackAmountReportTargets but in the // report the current month // is included for sure, so from this month we go back - assertThat(targetsCreatedOverPeriod.getData()).hasSize(maxMonthBackAmountReportTargets + 1); + assertThat(targetsCreatedOverPeriod.getData()).as("created over period has wrong size") + .hasSize(maxMonthBackAmountReportTargets + 1); for (final DataReportSeriesItem reportItem : targetsCreatedOverPeriod.getData()) { // only one target is created for each month assertThat(reportItem.getData().intValue()).as("Target for each month").isEqualTo(1); @@ -147,10 +147,11 @@ public class ReportManagementTest extends AbstractIntegrationTest { // +1 because we go back #maxMonthBackAmountReportTargets but in the // report the current month // is included for sure, so from this month we go back - assertThat(feedbackReceivedOverTime.getData()).hasSize(maxMonthBackAmountReportTargets + 1); + assertThat(feedbackReceivedOverTime.getData()).as("feedback receiver has wrong data size") + .hasSize(maxMonthBackAmountReportTargets + 1); for (final DataReportSeriesItem reportItem : feedbackReceivedOverTime.getData()) { // only one target feedback is created for each month - assertThat(reportItem.getData().intValue()).isEqualTo(1); + assertThat(reportItem.getData().intValue()).as("data size is wrong").isEqualTo(1); } // check cache evict @@ -165,7 +166,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { } feedbackReceivedOverTime = reportManagement.feedbackReceivedOverTime(DateTypes.perMonth(), from, to); for (final DataReportSeriesItem reportItem : feedbackReceivedOverTime.getData()) { - assertThat(reportItem.getData().intValue()).isEqualTo(2); + assertThat(reportItem.getData().intValue()).as("report item has wrong data size").isEqualTo(2); } } @@ -227,12 +228,12 @@ public class ReportManagementTest extends AbstractIntegrationTest { .isEqualTo(3L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(Arrays.stream(outerData).map(DataReportSeriesItem::getType).collect(Collectors.toList())) - .contains("0.0.0", "0.0.1"); + .as("versio item contains wrong version").contains("0.0.0", "0.0.1"); } else if (dataReportSeriesItem.getType().equals("ds2")) { assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 2 in statistics") .isEqualTo(1L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); - assertThat(outerData).hasSize(1); + assertThat(outerData).as("Version/Item type has wrong size").hasSize(1); assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 2 in statistics") .isEqualTo("0.0.2"); } else if (dataReportSeriesItem.getType().equals("ds3")) { @@ -240,7 +241,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 3 in statistics") .isEqualTo(0L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); - assertThat(outerData).hasSize(1); + assertThat(outerData).as("Version/Item type has wrong size").hasSize(1); assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 3 in statistics") .isEqualTo("0.0.3"); } else { @@ -395,13 +396,13 @@ public class ReportManagementTest extends AbstractIntegrationTest { final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(Arrays.stream(outerData).map(DataReportSeriesItem::getType).collect(Collectors.toList())) - .contains("0.0.0", "0.0.1"); + .as("Out series contains wrong version").contains("0.0.0", "0.0.1"); } else if (dataReportSeriesItem.getType().equals("ds2")) { assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 2 in statistics") .isEqualTo(1L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); - assertThat(outerData).hasSize(1); + assertThat(outerData).as("out series has wrong size").hasSize(1); assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 2 in statistics") .isEqualTo("0.0.2"); @@ -409,7 +410,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 3 in statistics") .isEqualTo(0L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); - assertThat(outerData).hasSize(1); + assertThat(outerData).as("out series has wrong size").hasSize(1); assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 3 in statistics") .isEqualTo("0.0.3"); } else { @@ -487,33 +488,26 @@ public class ReportManagementTest extends AbstractIntegrationTest { final int targetCreateAmount = 10; // create targets for another tenant - securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), new Callable() { - @Override - public Void call() throws Exception { - for (int index = 0; index < targetCreateAmount; index++) { - targetManagement.createTarget(new Target("t" + index)); - } - return null; + securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), () -> { + for (int index = 0; index < targetCreateAmount; index++) { + targetManagement.createTarget(new Target("t" + index)); } + return null; }); // ensure targets has been created for 'anotherTenant' final Slice targetsForAnotherTenant = securityRule.runAs( - WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), new Callable>() { - @Override - public Slice call() throws Exception { - return targetManagement.findTargetsAll(new PageRequest(0, 1000)); - } - }); - assertThat(targetsForAnotherTenant).hasSize(targetCreateAmount); + WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), + () -> targetManagement.findTargetsAll(new PageRequest(0, 1000))); + assertThat(targetsForAnotherTenant).as("targets has wrong size").hasSize(targetCreateAmount); final LocalDateTime to = LocalDateTime.now(); final LocalDateTime from = to.minusMonths(targetCreateAmount); // now retrieve the report for the 'mytenant' final DataReportSeries targetsCreatedOverPeriod = reportManagement .targetsCreatedOverPeriod(DateTypes.perMonth(), from, to); - // final no targets should final be created for this tenant - assertThat(targetsCreatedOverPeriod.getData()).hasSize(0); + assertThat(targetsCreatedOverPeriod.getData()).as("final no targets should final be created for this tenant") + .hasSize(0); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java index dc9a654c7..49776e392 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java @@ -159,10 +159,10 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void hardDeleteOfNotAssignedArtifact() { // [STEP1]: Create SoftwareModuleX with Artifacts - SoftwareModule unassignedModule = createSoftwareModuleWithArtifacts(osType, "moduleX", "3.0.2", 2); - Iterator artifactsIt = unassignedModule.getArtifacts().iterator(); - Artifact artifact1 = artifactsIt.next(); - Artifact artifact2 = artifactsIt.next(); + final SoftwareModule unassignedModule = createSoftwareModuleWithArtifacts(osType, "moduleX", "3.0.2", 2); + final Iterator artifactsIt = unassignedModule.getArtifacts().iterator(); + final Artifact artifact1 = artifactsIt.next(); + final Artifact artifact2 = artifactsIt.next(); // [STEP2]: Delete unassigned SoftwareModule softwareManagement.deleteSoftwareModule(unassignedModule); @@ -185,7 +185,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void softDeleteOfAssignedArtifact() { // Init DistributionSet - DistributionSet disSet = distributionSetManagement + final DistributionSet disSet = distributionSetManagement .createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); // [STEP1]: Create SoftwareModuleX with ArtifactX @@ -200,14 +200,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // [VERIFY EXPECTED RESULT]: // verify: assignedModule is marked as deleted assignedModule = softwareManagement.findSoftwareModuleById(assignedModule.getId()); - assertTrue(assignedModule.isDeleted()); + assertTrue("The module should be flagged as deleted", assignedModule.isDeleted()); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); assertThat(softwareModuleRepository.findAll()).hasSize(1); // verify: binary data is deleted - Iterator artifactsIt = assignedModule.getArtifacts().iterator(); - Artifact artifact1 = artifactsIt.next(); - Artifact artifact2 = artifactsIt.next(); + final Iterator artifactsIt = assignedModule.getArtifacts().iterator(); + final Artifact artifact1 = artifactsIt.next(); + final Artifact artifact2 = artifactsIt.next(); assertArtfiactNull(artifact1, artifact2); // verify: artifact meta data is still available @@ -221,7 +221,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // Init target and DistributionSet final Target target = targetManagement.createTarget(new Target("test123")); - DistributionSet disSet = distributionSetManagement + final DistributionSet disSet = distributionSetManagement .createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); // [STEP1]: Create SoftwareModuleX and include the new ArtifactX @@ -242,14 +242,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // [VERIFY EXPECTED RESULT]: // verify: assignedModule is marked as deleted assignedModule = softwareManagement.findSoftwareModuleById(assignedModule.getId()); - assertTrue(assignedModule.isDeleted()); + assertTrue("The found module should be flagged deleted", assignedModule.isDeleted()); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); assertThat(softwareModuleRepository.findAll()).hasSize(1); // verify: binary data is deleted - Iterator artifactsIt = assignedModule.getArtifacts().iterator(); - Artifact artifact1 = artifactsIt.next(); - Artifact artifact2 = artifactsIt.next(); + final Iterator artifactsIt = assignedModule.getArtifacts().iterator(); + final Artifact artifact1 = artifactsIt.next(); + final Artifact artifact2 = artifactsIt.next(); assertArtfiactNull(artifact1, artifact2); // verify: artifact meta data is still available @@ -265,7 +265,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(operations.find(new Query())).hasSize(0); // Init artifact binary data, target and DistributionSets - byte[] source = RandomUtils.nextBytes(1024); + final byte[] source = RandomUtils.nextBytes(1024); // [STEP1]: Create SoftwareModuleX and add a new ArtifactX SoftwareModule moduleX = createSoftwareModuleWithArtifacts(osType, "modulex", "v1.0", 0); @@ -273,7 +273,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // [STEP2]: Create newArtifactX and add it to SoftwareModuleX artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleX.getId(), "artifactx", false); moduleX = softwareManagement.findSoftwareModuleWithDetails(moduleX.getId()); - Artifact artifactX = moduleX.getArtifacts().iterator().next(); + final Artifact artifactX = moduleX.getArtifacts().iterator().next(); // [STEP3]: Create SoftwareModuleY and add the same ArtifactX SoftwareModule moduleY = createSoftwareModuleWithArtifacts(osType, "moduley", "v1.0", 0); @@ -281,7 +281,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // [STEP4]: Assign the same ArtifactX to SoftwareModuleY artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleY.getId(), "artifactx", false); moduleY = softwareManagement.findSoftwareModuleWithDetails(moduleY.getId()); - Artifact artifactY = moduleY.getArtifacts().iterator().next(); + final Artifact artifactY = moduleY.getArtifacts().iterator().next(); // verify: that only one entry was created in mongoDB assertThat(operations.find(new Query())).hasSize(1); @@ -325,14 +325,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleX.getId(), "artifactx", false); moduleX = softwareManagement.findSoftwareModuleWithDetails(moduleX.getId()); - Artifact artifactX = moduleX.getArtifacts().iterator().next(); + final Artifact artifactX = moduleX.getArtifacts().iterator().next(); // [STEP2]: Create SoftwareModuleY and add the same ArtifactX SoftwareModule moduleY = createSoftwareModuleWithArtifacts(osType, "moduley", "v1.0", 0); artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleY.getId(), "artifactx", false); moduleY = softwareManagement.findSoftwareModuleWithDetails(moduleY.getId()); - Artifact artifactY = moduleY.getArtifacts().iterator().next(); + final Artifact artifactY = moduleY.getArtifacts().iterator().next(); // verify: that only one entry was created in mongoDB assertThat(operations.find(new Query())).hasSize(1); @@ -358,8 +358,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // verify: SoftwareModuleX and SofwtareModule are marked as deleted assertThat(moduleX).isNotNull(); assertThat(moduleY).isNotNull(); - assertTrue(moduleX.isDeleted()); - assertTrue(moduleY.isDeleted()); + assertTrue("The module should be flagged deleted", moduleX.isDeleted()); + assertTrue("The module should be flagged deleted", moduleY.isDeleted()); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); assertThat(softwareModuleRepository.findAll()).hasSize(2); @@ -370,10 +370,10 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(artifactRepository.findOne(artifactY.getId())).isNotNull(); } - private SoftwareModule createSoftwareModuleWithArtifacts(SoftwareModuleType type, String name, String version, - int numberArtifacts) { + private SoftwareModule createSoftwareModuleWithArtifacts(final SoftwareModuleType type, final String name, + final String version, final int numberArtifacts) { - long countSoftwareModule = softwareModuleRepository.count(); + final long countSoftwareModule = softwareModuleRepository.count(); // create SoftwareModule SoftwareModule softwareModule = softwareManagement @@ -388,7 +388,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { softwareModule = softwareManagement.findSoftwareModuleWithDetails(softwareModule.getId()); assertThat(softwareModuleRepository.findAll()).hasSize((int) countSoftwareModule + 1); - List artifacts = softwareModule.getArtifacts(); + final List artifacts = softwareModule.getArtifacts(); assertThat(artifacts).hasSize(numberArtifacts); if (numberArtifacts != 0) { diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java index cdcaff25e..20dffde29 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java @@ -96,24 +96,26 @@ public class TargetManagementTest extends AbstractIntegrationTest { final TargetTag targetTag = tagManagement.createTargetTag(new TargetTag("Tag1")); final List assignedTargets = targetManagement.assignTag(assignTarget, targetTag); - assertThat(assignedTargets.size()).isEqualTo(4); + assertThat(assignedTargets.size()).as("Assigned targets are wrong").isEqualTo(4); assignedTargets.forEach(target -> assertThat(target.getTags().size()).isEqualTo(1)); TargetTag findTargetTag = tagManagement.findTargetTag("Tag1"); - assertThat(assignedTargets.size()).isEqualTo(findTargetTag.getAssignedToTargets().size()); + assertThat(assignedTargets.size()).as("Assigned targets are wrong") + .isEqualTo(findTargetTag.getAssignedToTargets().size()); - assertThat(targetManagement.unAssignTag("NotExist", findTargetTag)).isNull(); + assertThat(targetManagement.unAssignTag("NotExist", findTargetTag)).as("Unassign target does not work") + .isNull(); final Target unAssignTarget = targetManagement.unAssignTag("targetId123", findTargetTag); - assertThat(unAssignTarget.getControllerId()).isEqualTo("targetId123"); - assertThat(unAssignTarget.getTags().size()).isEqualTo(0); + assertThat(unAssignTarget.getControllerId()).as("Controller id is wrong").isEqualTo("targetId123"); + assertThat(unAssignTarget.getTags()).as("Tag size is wrong").isEmpty(); findTargetTag = tagManagement.findTargetTag("Tag1"); - assertThat(findTargetTag.getAssignedToTargets().size()).isEqualTo(3); + assertThat(findTargetTag.getAssignedToTargets()).as("Assigned targets are wrong").hasSize(3); final List unAssignTargets = targetManagement.unAssignAllTargetsByTag(findTargetTag); findTargetTag = tagManagement.findTargetTag("Tag1"); - assertThat(findTargetTag.getAssignedToTargets().size()).isEqualTo(0); - assertThat(unAssignTargets.size()).isEqualTo(3); + assertThat(findTargetTag.getAssignedToTargets()).as("Unassigned targets are wrong").isEmpty(); + assertThat(unAssignTargets).as("Unassigned targets are wrong").hasSize(3); unAssignTargets.forEach(target -> assertThat(target.getTags().size()).isEqualTo(0)); } @@ -121,14 +123,14 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Ensures that targets can deleted e.g. test all cascades") public void deleteAndCreateTargets() { Target target = targetManagement.createTarget(new Target("targetId123")); - assertThat(targetManagement.countTargetsAll()).isEqualTo(1); + assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(1); targetManagement.deleteTargets(target.getId()); - assertThat(targetManagement.countTargetsAll()).isEqualTo(0); + assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(0); target = createTargetWithAttributes("4711"); - assertThat(targetManagement.countTargetsAll()).isEqualTo(1); + assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(1); targetManagement.deleteTargets(target.getId()); - assertThat(targetManagement.countTargetsAll()).isEqualTo(0); + assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(0); final List targets = new ArrayList(); for (int i = 0; i < 5; i++) { @@ -136,9 +138,9 @@ public class TargetManagementTest extends AbstractIntegrationTest { targets.add(target.getId()); targets.add(createTargetWithAttributes("" + (i * i + 1000)).getId()); } - assertThat(targetManagement.countTargetsAll()).isEqualTo(10); + assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(10); targetManagement.deleteTargets(targets.toArray(new Long[targets.size()])); - assertThat(targetManagement.countTargetsAll()).isEqualTo(0); + assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(0); } private Target createTargetWithAttributes(final String controllerId) { @@ -150,7 +152,8 @@ public class TargetManagementTest extends AbstractIntegrationTest { target = controllerManagament.updateControllerAttributes(controllerId, testData); target = targetManagement.findTargetByControllerIDWithDetails(controllerId); - assertThat(target.getTargetInfo().getControllerAttributes()).isEqualTo(testData); + assertThat(target.getTargetInfo().getControllerAttributes()).as("Controller Attributes are wrong") + .isEqualTo(testData); return target; } @@ -162,10 +165,14 @@ public class TargetManagementTest extends AbstractIntegrationTest { final DistributionSet set2 = TestDataUtil.generateDistributionSet("test2", softwareManagement, distributionSetManagement); - assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).isEqualTo(0); - assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).isEqualTo(0); - assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).isEqualTo(0); - assertThat(targetManagement.countTargetByInstalledDistributionSet(set2.getId())).isEqualTo(0); + assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).as("Target count is wrong") + .isEqualTo(0); + assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).as("Target count is wrong") + .isEqualTo(0); + assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).as("Target count is wrong") + .isEqualTo(0); + assertThat(targetManagement.countTargetByInstalledDistributionSet(set2.getId())).as("Target count is wrong") + .isEqualTo(0); Target target = createTargetWithAttributes("4711"); @@ -183,13 +190,19 @@ public class TargetManagementTest extends AbstractIntegrationTest { target = targetManagement.findTargetByControllerIDWithDetails("4711"); // read data - assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).isEqualTo(0); - assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).isEqualTo(1); - assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).isEqualTo(1); - assertThat(targetManagement.countTargetByInstalledDistributionSet(set2.getId())).isEqualTo(0); - assertThat(target.getTargetInfo().getLastTargetQuery()).isGreaterThanOrEqualTo(current); - assertThat(target.getAssignedDistributionSet()).isEqualTo(set2); - assertThat(target.getTargetInfo().getInstalledDistributionSet().getId()).isEqualTo(set.getId()); + assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).as("Target count is wrong") + .isEqualTo(0); + assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).as("Target count is wrong") + .isEqualTo(1); + assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).as("Target count is wrong") + .isEqualTo(1); + assertThat(targetManagement.countTargetByInstalledDistributionSet(set2.getId())).as("Target count is wrong") + .isEqualTo(0); + assertThat(target.getTargetInfo().getLastTargetQuery()).as("Target query is not work") + .isGreaterThanOrEqualTo(current); + assertThat(target.getAssignedDistributionSet()).as("Assigned ds size is wrong").isEqualTo(set2); + assertThat(target.getTargetInfo().getInstalledDistributionSet().getId()).as("Installed ds is wrong") + .isEqualTo(set.getId()); } @@ -373,8 +386,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { assertThat(firstSaved.spliterator().getExactSizeIfKnown() - nr2Del).as("Size of splited list") .isEqualTo(allFound.spliterator().getExactSizeIfKnown()); - // verify that all undeleted are still found - assertThat(allFound).doesNotContain(deletedTargets); + assertThat(allFound).as("Not all undeleted found").doesNotContain(deletedTargets); } @Test @@ -404,7 +416,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { targetInfo = targetInfoRepository.save(targetInfo); } final Query qry = entityManager.createNativeQuery("select * from sp_target_attributes ta"); - final List result = qry.getResultList(); + final List result = qry.getResultList(); assertThat(attribs.size() * ts.spliterator().getExactSizeIfKnown()).as("Amount of all target attributes") .isEqualTo(result.size()); @@ -467,7 +479,8 @@ public class TargetManagementTest extends AbstractIntegrationTest { final Target tNoAttrib = targetManagement.findTargetByControllerID(tNoAttribl.getControllerId()); if (tNoAttrib.getControllerId().equals(target.getControllerId())) { - assertThat(target.getTargetInfo().getControllerAttributes()).isEmpty(); + assertThat(target.getTargetInfo().getControllerAttributes()) + .as("Controller attributes should be empty").isEmpty(); continue restTarget_; } } @@ -479,7 +492,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { if (tNoAttrib.getControllerId().equals(target.getControllerId())) { assertThat(target.getTargetInfo().getControllerAttributes().keySet().toArray()) - .doesNotContain(attribs2Del.toArray()); + .as("Controller attributes are wrong").doesNotContain(attribs2Del.toArray()); continue restTarget_; } } @@ -504,12 +517,14 @@ public class TargetManagementTest extends AbstractIntegrationTest { t2 = targetManagement.createTarget(t2); t1 = targetManagement.findTargetByControllerID(t1.getControllerId()); - assertThat(t1.getTags()).hasSize(noT1Tags).containsAll(t1Tags); - assertThat(t1.getTags()).hasSize(noT1Tags).doesNotContain(Iterables.toArray(t2Tags, TargetTag.class)); + assertThat(t1.getTags()).as("Tag size is wrong").hasSize(noT1Tags).containsAll(t1Tags); + assertThat(t1.getTags()).as("Tag size is wrong").hasSize(noT1Tags) + .doesNotContain(Iterables.toArray(t2Tags, TargetTag.class)); t2 = targetManagement.findTargetByControllerID(t2.getControllerId()); - assertThat(t2.getTags()).hasSize(noT2Tags).containsAll(t2Tags); - assertThat(t2.getTags()).hasSize(noT2Tags).doesNotContain(Iterables.toArray(t1Tags, TargetTag.class)); + assertThat(t2.getTags()).as("Tag size is wrong").hasSize(noT2Tags).containsAll(t2Tags); + assertThat(t2.getTags()).as("Tag size is wrong").hasSize(noT2Tags) + .doesNotContain(Iterables.toArray(t1Tags, TargetTag.class)); } @Test @@ -531,7 +546,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final TargetTag tagA = tagManagement.createTargetTag(new TargetTag("A")); final TargetTag tagB = tagManagement.createTargetTag(new TargetTag("B")); final TargetTag tagC = tagManagement.createTargetTag(new TargetTag("C")); - final TargetTag tagX = tagManagement.createTargetTag(new TargetTag("X")); + tagManagement.createTargetTag(new TargetTag("X")); // doing different assignments targetManagement.toggleTagAssignment(tagATargets, tagA); @@ -545,7 +560,8 @@ public class TargetManagementTest extends AbstractIntegrationTest { targetManagement.toggleTagAssignment(tagABCTargets, tagB); targetManagement.toggleTagAssignment(tagABCTargets, tagC); - assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "X")).isEqualTo(0); + assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "X")) + .as("Target count is wrong").isEqualTo(0); // search for targets with tag tagA final List targetWithTagA = new ArrayList(); @@ -575,11 +591,11 @@ public class TargetManagementTest extends AbstractIntegrationTest { // check again target lists refreshed from DB assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "A")) - .isEqualTo(targetWithTagA.size()); + .as("Target count is wrong").isEqualTo(targetWithTagA.size()); assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "B")) - .isEqualTo(targetWithTagB.size()); + .as("Target count is wrong").isEqualTo(targetWithTagB.size()); assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "C")) - .isEqualTo(targetWithTagC.size()); + .as("Target count is wrong").isEqualTo(targetWithTagC.size()); } @Test @@ -656,14 +672,15 @@ public class TargetManagementTest extends AbstractIntegrationTest { targetManagement.toggleTagAssignment(targAs, targTagA); assertThat(targetManagement.findTargetsByControllerIDsWithTags( - targAs.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))).hasSize(25); + targAs.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))) + .as("Target count is wrong").hasSize(25); // no lazy loading exception and tag correctly assigned assertThat(targetManagement .findTargetsByControllerIDsWithTags( targAs.stream().map(target -> target.getControllerId()).collect(Collectors.toList())) .stream().map(target -> target.getTags().contains(targTagA)).collect(Collectors.toList())) - .containsOnly(true); + .as("Tags not correctly assigned").containsOnly(true); } @Test @@ -678,7 +695,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final List findAllTargetIds = findAllTargetIdNames.stream().map(TargetIdName::getControllerId) .collect(Collectors.toList()); - assertThat(findAllTargetIds).containsOnly(createdTargetIds); + assertThat(findAllTargetIds).as("Target list has wrong content").containsOnly(createdTargetIds); } @Test diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java index 0c4a3aadd..8b20af27d 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java @@ -72,7 +72,7 @@ public class RSQLActionFieldsTest extends AbstractIntegrationTest { try { assertRSQLQuery(ActionFields.STATUS.name() + "==true", 5); - fail(); + fail("Missing expected RSQLParameterUnsupportedFieldException because status cannot be compared with 'true'"); } catch (final RSQLParameterUnsupportedFieldException e) { } } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java index 0c316f918..40d757d15 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java @@ -140,7 +140,7 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { final Page find = distributionSetManagement.findDistributionSetsAll( RSQLUtility.parse(rsqlParam, DistributionSetFields.class), new PageRequest(0, 100), false); final long countAll = find.getTotalElements(); - assertThat(find).isNotNull(); - assertThat(countAll).isEqualTo(excpectedEntity); + assertThat(find).as("Founded entity is should not be null").isNotNull(); + assertThat(countAll).as("Founded entity size is wrong").isEqualTo(excpectedEntity); } } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java index 1e58b2f8c..356464bc2 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java @@ -63,7 +63,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, SoftwareModuleFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterSyntaxException e) { } } @@ -75,7 +75,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, SoftwareModuleFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing an expected RSQLParameterUnsupportedFieldException because of unknown RSQL field"); } catch (final RSQLParameterUnsupportedFieldException e) { } @@ -87,7 +87,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterUnsupportedFieldException e) { } @@ -95,7 +95,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterUnsupportedFieldException e) { } @@ -103,7 +103,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, DistributionSetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterUnsupportedFieldException e) { } @@ -115,7 +115,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterUnsupportedFieldException e) { } @@ -123,7 +123,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterUnsupportedFieldException e) { } @@ -131,7 +131,7 @@ public class RSQLUtilityTest { try { RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); - fail(); + fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax"); } catch (final RSQLParameterUnsupportedFieldException e) { } } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java index 92923cb56..b32302705 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java @@ -88,7 +88,7 @@ final class DistributionSetTypeMapper { } static List toListResponse(final List types) { - final List response = new ArrayList(); + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java index 9ce1a2975..dfbac1a6f 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java @@ -99,52 +99,6 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { return new ResponseEntity<>(SoftwareModuleMapper.artifactsToResponse(module.getArtifacts()), HttpStatus.OK); } - /** - * Handles the GET request for downloading an artifact. - * - * @param softwareModuleId - * of the parent SoftwareModule - * @param artifactId - * of the related LocalArtifact - * @param servletResponse - * of the servlet - * @param request - * of the client - * - * @return responseEntity with status ok if successful - */ - // @RequestMapping(method = RequestMethod.GET, value = - // RestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING - // + "/{softwareModuleId}/artifacts/{artifactId}/download") - // @ResponseBody - // public ResponseEntity downloadArtifact(@PathVariable final Long - // softwareModuleId, - // @PathVariable final Long artifactId, final HttpServletResponse - // servletResponse, - // final HttpServletRequest request) { - // final SoftwareModule module = - // findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); - // - // if (null == module || !module.getLocalArtifact(artifactId).isPresent()) { - // return new ResponseEntity<>(HttpStatus.NOT_FOUND); - // } - // - // final LocalArtifact artifact = module.getLocalArtifact(artifactId).get(); - // final DbArtifact file = - // artifactManagement.loadLocalArtifactBinary(artifact); - // - // final String ifMatch = request.getHeader("If-Match"); - // if (ifMatch != null && - // !RestResourceConversionHelper.matchesHttpHeader(ifMatch, - // artifact.getSha1Hash())) { - // return new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); - // } - // - // return RestResourceConversionHelper.writeFileResponse(artifact, - // servletResponse, request, file); - // - // } - @Override public ResponseEntity getArtifact(@PathVariable final Long softwareModuleId, @PathVariable final Long artifactId) { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java index 5a05133b2..bd2c5f1c1 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java @@ -59,7 +59,7 @@ final class SoftwareModuleTypeMapper { } static List toListResponse(final Collection types) { - final List response = new ArrayList(); + final List response = new ArrayList<>(); for (final SoftwareModuleType softwareModule : types) { response.add(toResponse(softwareModule)); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java index 0587a305c..cf93fcba7 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java @@ -25,6 +25,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -49,6 +50,7 @@ import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.junit.Before; import org.junit.Test; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; @@ -69,6 +71,13 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Software Module Resource") public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongoDB { + @Before + public void assertPreparationOfRepo() { + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("no softwaremodule should be founded") + .hasSize(0); + assertThat(artifactRepository.findAll()).as("no artifacts should be founded").hasSize(0); + } + @Test @Description("Tests the update of software module metadata. It is verfied that only the selected fields for the update are really updated and the modification values are filled (i.e. updated by and at).") @WithUser(principal = "smUpdateTester", allSpPermissions = true) @@ -81,18 +90,14 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo final String updateVendor = "newVendor1"; final String updateDescription = "newDescription1"; - final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); - final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + softwareManagement.createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + softwareManagement.createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); SoftwareModule sm = new SoftwareModule(osType, knownSWName, knownSWVersion, knownSWDescription, knownSWVendor); sm = softwareManagement.createSoftwareModule(sm); - assertThat(sm.getName()).isEqualTo(knownSWName); - assertThat(sm.getName()).isEqualTo(knownSWName); + assertThat(sm.getName()).as("Wrong name of the software module").isEqualTo(knownSWName); final String body = new JSONObject().put("vendor", updateVendor).put("description", updateDescription) .put("name", "nameShouldNotBeChanged").toString(); @@ -115,9 +120,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo @Test @Description("Tests the uppload of an artifact binary. The upload is executed and the content checked in the repository for completenes.") public void uploadArtifact() throws Exception { - // prepare repo - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); @@ -144,36 +146,41 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .convertArtifactResponse(mvcResult.getResponse().getContentAsString()); final Long artId = ((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts() .get(0)).getId(); - assertThat(artResult.getArtifactId()).isEqualTo(artId); + assertThat(artResult.getArtifactId()).as("Wrong artifact id").isEqualTo(artId); assertThat(JsonPath.compile("$_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) + .as("Link contains no self url") .isEqualTo("http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artId); assertThat( JsonPath.compile("$_links.download.href").read(mvcResult.getResponse().getContentAsString()).toString()) - .isEqualTo("http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artId - + "/download"); + .as("response contains no download url ").isEqualTo("http://localhost/rest/v1/softwaremodules/" + + sm.getId() + "/artifacts/" + artId + "/download"); + assertArtifact(sm, random); + } + + private void assertArtifact(final SoftwareModule sm, final byte[] random) throws IOException { // check result in db... // repo - assertThat(artifactRepository.findAll()).hasSize(1); + assertThat(artifactRepository.findAll()).as("Wrong artifact size").hasSize(1); // binary - assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(random), - artifactManagement - .loadLocalArtifactBinary((LocalArtifact) softwareManagement - .findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) - .getFileInputStream())); + assertTrue("Wrong artifact content", + IOUtils.contentEquals(new ByteArrayInputStream(random), + artifactManagement + .loadLocalArtifactBinary((LocalArtifact) softwareManagement + .findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) + .getFileInputStream())); // hashes assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getSha1Hash()) - .isEqualTo(HashGeneratorUtils.generateSHA1(random)); + .as("Wrong sha1 hash").isEqualTo(HashGeneratorUtils.generateSHA1(random)); assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getMd5Hash()) - .isEqualTo(HashGeneratorUtils.generateMD5(random)); + .as("Wrong md5 hash").isEqualTo(HashGeneratorUtils.generateMD5(random)); // metadata assertThat(((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) - .getFilename()).isEqualTo("origFilename"); - + .getFilename()).as("wrong metadata of the filename").isEqualTo("origFilename"); } @Test @@ -195,9 +202,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo @Test @Description("Verfies that the system does not accept identical artifacts uploads for the same software module. Expected response: CONFLICT") public void duplicateUploadArtifact() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); @@ -220,9 +224,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo @Test @Description("verfies that option to upload artifacts with a custom defined by metadata, i.e. not the file name of the binary itself.") public void uploadArtifactWithCustomName() throws Exception { - // prepare repo - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); @@ -237,22 +238,19 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$providedFilename", equalTo("customFilename"))).andExpect(status().isCreated()); - ; // check result in db... // repo - assertThat(artifactRepository.findAll()).hasSize(1); + assertThat(artifactRepository.findAll()).as("Artifact size is wring").hasSize(1); // hashes - assertThat(artifactManagement.findLocalArtifactByFilename("customFilename")).hasSize(1); + assertThat(artifactManagement.findLocalArtifactByFilename("customFilename")).as("Local artifact is wrong") + .hasSize(1); } @Test @Description("Verfies that the system refuses upload of an artifact where the provided hash sums do not match. Expected result: BAD REQUEST") public void uploadArtifactWithHashCheck() throws Exception { - // prepare repo - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); @@ -272,7 +270,8 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo // check error result ExceptionInfo exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString()); - assertThat(exceptionInfo.getErrorCode()).isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH.getKey()); + assertThat(exceptionInfo.getErrorCode()).as("Exception contains wrong error code") + .isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH.getKey()); // wrong md5 mvcResult = mvc @@ -282,42 +281,20 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo // check error result exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString()); - assertThat(exceptionInfo.getErrorCode()).isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH.getKey()); + assertThat(exceptionInfo.getErrorCode()).as("Exception contains wrong error code") + .isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH.getKey()); mvc.perform(fileUpload("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file) .param("md5sum", md5sum).param("sha1sum", sha1sum)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isCreated()); - // check result... - // repo - assertThat(artifactRepository.findAll()).hasSize(1); - - // binary - assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(random), - artifactManagement - .loadLocalArtifactBinary((LocalArtifact) softwareManagement - .findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) - .getFileInputStream())); - - // hashes - assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getSha1Hash()) - .isEqualTo(HashGeneratorUtils.generateSHA1(random)); - - assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getMd5Hash()) - .isEqualTo(md5sum); - - // metadata - assertThat(((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) - .getFilename()).isEqualTo("origFilename"); + assertArtifact(sm, random); } @Test @Description("Tests binary download of an artifact including verfication that the downloaded binary is consistent and that the etag header is as expected identical to the SHA1 hash of the file.") public void downloadArtifact() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); @@ -342,19 +319,16 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(header().string("ETag", artifact2.getSha1Hash())) .andExpect(content().contentType(MediaType.APPLICATION_OCTET_STREAM)).andReturn(); - assertTrue(Arrays.equals(result2.getResponse().getContentAsByteArray(), random)); + assertTrue("Response has wrong response content", + Arrays.equals(result2.getResponse().getContentAsByteArray(), random)); - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); - assertThat(artifactRepository.findAll()).hasSize(2); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremodule size is wrong").hasSize(1); + assertThat(artifactRepository.findAll()).as("Wrong artifact repostiory").hasSize(2); } @Test @Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and download links.") public void getArtifact() throws Exception { - // check baseline - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); - // prepare data for test SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); @@ -540,8 +514,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Test retrieval of all software modules the user has access to.") public void getSoftwareModules() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); os = softwareManagement.createSoftwareModule(os); @@ -604,14 +576,12 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(jsonPath("$content.[?(@.id==" + ah.getId() + ")][0]._links.self.href", equalTo("http://localhost/rest/v1/softwaremodules/" + ah.getId()))); - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremodule size is wrong").hasSize(3); } @Test @Description("Test the various filter parameters, e.g. filter by name or type of the module.") public void getSoftwareModulesWithFilterParameters() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - SoftwareModule os1 = new SoftwareModule(osType, "osName1", "1.0.0", "description1", "vendor1"); os1 = softwareManagement.createSoftwareModule(os1); @@ -704,8 +674,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Tests GET request on /rest/v1/softwaremodules/{smId}.") public void getSoftareModule() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); os = softwareManagement.createSoftwareModule(os); @@ -763,15 +731,13 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(jsonPath("$_links.artifacts.href", equalTo("http://localhost/rest/v1/softwaremodules/" + ah.getId() + "/artifacts"))); - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremodule size is wrong").hasSize(3); } @Test @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Verfies that the create request actually results in the creation of the modules in the repository.") public void createSoftwareModules() throws JSONException, Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - final SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); final SoftwareModule jvm = new SoftwareModule(runtimeType, "name2", "version1", "description1", "vendor1"); final SoftwareModule ah = new SoftwareModule(appType, "name3", "version1", "description1", "vendor1"); @@ -816,74 +782,75 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo assertThat( JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) + .as("Response contains invalid self href") .isEqualTo("http://localhost/rest/v1/softwaremodules/" + osCreated.getId()); assertThat(JsonPath.compile("[0]_links.artifacts.href").read(mvcResult.getResponse().getContentAsString()) - .toString()).isEqualTo("http://localhost/rest/v1/softwaremodules/" + osCreated.getId() + "/artifacts"); + .toString()).as("Response contains invalid artifacts href") + .isEqualTo("http://localhost/rest/v1/softwaremodules/" + osCreated.getId() + "/artifacts"); assertThat( JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) + .as("Response contains invalid self href") .isEqualTo("http://localhost/rest/v1/softwaremodules/" + jvmCreated.getId()); assertThat(JsonPath.compile("[1]_links.artifacts.href").read(mvcResult.getResponse().getContentAsString()) - .toString()).isEqualTo("http://localhost/rest/v1/softwaremodules/" + jvmCreated.getId() + "/artifacts"); + .toString()).as("Response contains invalid artfacts href") + .isEqualTo("http://localhost/rest/v1/softwaremodules/" + jvmCreated.getId() + "/artifacts"); assertThat( JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) + .as("Response contains links self href") .isEqualTo("http://localhost/rest/v1/softwaremodules/" + ahCreated.getId()); assertThat(JsonPath.compile("[2]_links.artifacts.href").read(mvcResult.getResponse().getContentAsString()) - .toString()).isEqualTo("http://localhost/rest/v1/softwaremodules/" + ahCreated.getId() + "/artifacts"); + .toString()).as("Response contains invalid artifacts href") + .isEqualTo("http://localhost/rest/v1/softwaremodules/" + ahCreated.getId() + "/artifacts"); - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Wrong softwaremodule size").hasSize(3); assertThat(softwareManagement.findSoftwareModulesByType(pageReq, osType).getContent().get(0).getName()) - .isEqualTo(os.getName()); + .as("Softwaremoudle name is wrong").isEqualTo(os.getName()); assertThat(softwareManagement.findSoftwareModulesByType(pageReq, osType).getContent().get(0).getCreatedBy()) - .isEqualTo("uploadTester"); + .as("Softwaremoudle created by is wrong").isEqualTo("uploadTester"); assertThat(softwareManagement.findSoftwareModulesByType(pageReq, osType).getContent().get(0).getCreatedAt()) - .isGreaterThanOrEqualTo(current); + .as("Softwaremoudle created at is wrong").isGreaterThanOrEqualTo(current); assertThat(softwareManagement.findSoftwareModulesByType(pageReq, runtimeType).getContent().get(0).getName()) - .isEqualTo(jvm.getName()); + .as("Softwaremoudle name is wrong").isEqualTo(jvm.getName()); assertThat(softwareManagement.findSoftwareModulesByType(pageReq, appType).getContent().get(0).getName()) - .isEqualTo(ah.getName()); + .as("Softwaremoudle name is wrong").isEqualTo(ah.getName()); } @Test @Description("Verifies successfull deletion of software modules that are not in use, i.e. assigned to a DS.") public void deleteUnassignedSoftwareModule() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty(); - assertThat(artifactRepository.findAll()).isEmpty(); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); - final Artifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), - "file1", false); + artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); - assertThat(artifactRepository.findAll()).hasSize(1); - assertThat(softwareModuleRepository.findAll()).hasSize(1); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremoudle size is wrong").hasSize(1); + assertThat(artifactRepository.findAll()).as("artifact site is wrong").hasSize(1); + assertThat(softwareModuleRepository.findAll()).as("Softwaremoudle size is wrong").hasSize(1); mvc.perform(delete("/rest/v1/softwaremodules/{smId}", sm.getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty(); - assertThat(softwareModuleRepository.findAll()).isEmpty(); - assertThat(artifactRepository.findAll()).isEmpty(); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)) + .as("After delete no softwarmodule should be available").isEmpty(); + assertThat(softwareModuleRepository.findAll()).as("After delete no softwarmodule should be available") + .isEmpty(); + assertThat(artifactRepository.findAll()).as("After delete no artifact should be available").isEmpty(); } @Test @Description("Verifies successfull deletion of software modules that are in use, i.e. assigned to a DS which should result in movinf the module to the archive.") public void deleteAssignedSoftwareModule() throws Exception { - // check baseline - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty(); - assertThat(artifactRepository.findAll()).isEmpty(); - final DistributionSet ds1 = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); - final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), + artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), ds1.findFirstModuleByType(appType).getId(), "file1", false); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3); @@ -898,17 +865,17 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); // all 3 are now marked as deleted - assertThat(softwareManagement.findSoftwareModulesAll(pageReq).getNumber()).isEqualTo(0); - assertThat(softwareModuleRepository.findAll()).hasSize(3); - assertThat(artifactRepository.findAll()).hasSize(1); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq).getNumber()) + .as("After delete no softwarmodule should be available").isEqualTo(0); + assertThat(softwareModuleRepository.findAll()).as("After delete no softwarmodule should marked as deleted") + .hasSize(3); + assertThat(artifactRepository.findAll()).as("After delete artifact should available for marked as deleted sm's") + .hasSize(1); } @Test @Description("Tests the deletion of an artifact including verfication that the artifact is actually erased in the repository and removed from the software module.") public void deleteArtifact() throws Exception { - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty(); - assertThat(artifactRepository.findAll()).isEmpty(); - // Create 1 SM SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); @@ -918,8 +885,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo // Create 2 artifacts final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); - final LocalArtifact artifact2 = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), - sm.getId(), "file2", false); + artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file2", false); // check repo before delete assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); @@ -932,9 +898,12 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); // check that only one artifact is still alive and still assigned - assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); - assertThat(artifactRepository.findAll()).hasSize(1); - assertThat(softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts()).hasSize(1); + assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("After the sm should be marked as deleted") + .hasSize(1); + assertThat(artifactRepository.findAll()).as("After delete artifact should available for marked as deleted sm's") + .hasSize(1); + assertThat(softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts()) + .as("After delete artifact should available for marked as deleted sm's").hasSize(1); } @@ -964,8 +933,8 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo final SoftwareModuleMetadata metaKey1 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey1)); final SoftwareModuleMetadata metaKey2 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey2)); - assertThat(metaKey1.getValue()).isEqualTo(knownValue1); - assertThat(metaKey2.getValue()).isEqualTo(knownValue2); + assertThat(metaKey1.getValue()).as("Metadata key is wrong").isEqualTo(knownValue1); + assertThat(metaKey2.getValue()).as("Metadata key is wrong").isEqualTo(knownValue2); } @Test @@ -989,7 +958,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue))); final SoftwareModuleMetadata assertDS = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey)); - assertThat(assertDS.getValue()).isEqualTo(updateValue); + assertThat(assertDS.getValue()).as("Metadata is wrong").isEqualTo(updateValue); } @Test diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java index a74d89179..d240a814b 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java @@ -39,10 +39,15 @@ public class ExceptionInfoTest { underTest.setMessage(knownMessage); underTest.setParameters(knownParameters); - assertThat(underTest.getErrorCode()).isEqualTo(knownErrorCode); - assertThat(underTest.getExceptionClass()).isEqualTo(knownExceptionClass); - assertThat(underTest.getMessage()).isEqualTo(knownMessage); - assertThat(underTest.getParameters()).isEqualTo(knownParameters); + assertThat(underTest.getErrorCode()).as("The error code should match with the known error code in the test") + .isEqualTo(knownErrorCode); + assertThat(underTest.getExceptionClass()) + .as("The exception class should match with the known error code in the test") + .isEqualTo(knownExceptionClass); + assertThat(underTest.getMessage()).as("The message should match with the known error code in the test") + .isEqualTo(knownMessage); + assertThat(underTest.getParameters()).as("The parameters should match with the known error code in the test") + .isEqualTo(knownParameters); } } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java index 9c5a5ac12..b4a11412c 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java @@ -37,10 +37,13 @@ public class PagedListTest { knownContentList.add("content1"); knownContentList.add("content2"); - final PagedList pagedList = new PagedList<>(knownContentList, knownTotal); + assertListSize(knownTotal, knownContentList); + } - assertThat(pagedList.getTotal()).isEqualTo(knownTotal); - assertThat(pagedList.getSize()).isEqualTo(knownContentList.size()); + private void assertListSize(final long knownTotal, final List knownContentList) { + final PagedList pagedList = new PagedList<>(knownContentList, knownTotal); + assertThat(pagedList.getTotal()).as("total size is wrong").isEqualTo(knownTotal); + assertThat(pagedList.getSize()).as("list size is wrong").isEqualTo(knownContentList.size()); } @Test @@ -51,9 +54,7 @@ public class PagedListTest { knownContentList.add("content1"); knownContentList.add("content2"); - final PagedList pagedList = new PagedList<>(knownContentList, knownTotal); - assertThat(pagedList.getTotal()).isEqualTo(knownTotal); - assertThat(pagedList.getSize()).isEqualTo(knownContentList.size()); + assertListSize(knownTotal, knownContentList); } } diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java index 7e3dc8de7..c1125667e 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java @@ -15,7 +15,6 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.tenancy.TenantAware; -import org.eclipse.hawkbit.tenancy.TenantAware.TenantRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,8 +29,7 @@ import org.springframework.stereotype.Service; import com.google.common.base.Throwables; /** - * @author Michael Hirsch - * + * */ @Service public class SystemSecurityContext { @@ -45,15 +43,12 @@ public class SystemSecurityContext { final SecurityContext oldContext = SecurityContextHolder.getContext(); try { logger.debug("entering system code execution"); - return tenantAware.runAsTenant(tenantAware.getCurrentTenant(), new TenantRunner() { - @Override - public T run() { - try { - setSystemContext(); - return callable.call(); - } catch (final Exception e) { - throw Throwables.propagate(e); - } + return tenantAware.runAsTenant(tenantAware.getCurrentTenant(), () -> { + try { + setSystemContext(); + return callable.call(); + } catch (final Exception e) { + throw Throwables.propagate(e); } }); @@ -106,7 +101,8 @@ public class SystemSecurityContext { } @Override - public void setAuthenticated(final boolean isAuthenticated) throws IllegalArgumentException { + public void setAuthenticated(final boolean isAuthenticated) { + // not needed } } } 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 0068fd0c8..4e08d8bfe 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 @@ -20,9 +20,6 @@ import com.google.common.net.HttpHeaders; /** * A utility which determines the correct IP of a connected {@link Target}. E.g * from a {@link HttpServletRequest}. - * - * - * * */ public final class IpUtil { @@ -95,7 +92,6 @@ public final class IpUtil { if (isIpV6) { return URI.create(scheme + SCHEME_SEPERATOR + "[" + host + "]"); } - return URI.create(scheme + SCHEME_SEPERATOR + host); } @@ -104,12 +100,14 @@ public final class IpUtil { * * @param host * the host + * @param exchange + * the exchange will store in the path * @return the {@link URI} * @throws IllegalArgumentException * If the given string not parsable */ - public static URI createAmqpUri(final String host) { - return createUri(AMPQP_SCHEME, host); + public static URI createAmqpUri(final String host, final String exchange) { + return createUri(AMPQP_SCHEME, host).resolve("/" + exchange); } /** diff --git a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/ExcludePathAwareShallowETagFilterTest.java b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/ExcludePathAwareShallowETagFilterTest.java index c5830f016..0b2c0b116 100644 --- a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/ExcludePathAwareShallowETagFilterTest.java +++ b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/ExcludePathAwareShallowETagFilterTest.java @@ -61,7 +61,8 @@ public class ExcludePathAwareShallowETagFilterTest { filterUnderTest.doFilterInternal(servletRequestMock, servletResponseMock, filterChainMock); // verify no eTag header is set and response has not been changed - assertThat(servletResponseMock.getHeader("ETag")).isNull(); + assertThat(servletResponseMock.getHeader("ETag")) + .as("ETag header should not be set during downloading, too expensive").isNull(); // the servlet response must be the same mock! verify(filterChainMock, times(1)).doFilter(servletRequestMock, servletResponseMock); } 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 25e1c974b..9eb83d2a9 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 @@ -53,7 +53,8 @@ public class IpUtilTest { final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux"); // verify - assertThat(remoteAddr).isEqualTo(knownRemoteClientIP); + 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)).getRemoteAddr(); } @@ -71,7 +72,8 @@ public class IpUtilTest { final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For"); // verify - assertThat(remoteAddr).isEqualTo(knownRemoteClientIP); + 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(0)).getRemoteAddr(); } @@ -94,45 +96,50 @@ public class IpUtilTest { } private void assertHttpUri(final String host, final URI httpUri) { - assertTrue(IpUtil.isHttpUri(httpUri)); - assertFalse(IpUtil.isAmqpUri(httpUri)); - assertEquals(host, httpUri.getHost()); - assertEquals("http", httpUri.getScheme()); + assertTrue("The given URI has an http scheme", IpUtil.isHttpUri(httpUri)); + assertFalse("The given URI is not an AMQP scheme", IpUtil.isAmqpUri(httpUri)); + assertEquals("The URI hosts matches the given host", host, httpUri.getHost()); + assertEquals("The given URI scheme is http", "http", httpUri.getScheme()); } @Test @Description("Tests create amqp uri ipv4 and ipv6") public void testCreateAmqpUri() { final String ipv4 = "10.99.99.1"; - URI amqpUri = IpUtil.createAmqpUri(ipv4); + URI amqpUri = IpUtil.createAmqpUri(ipv4, "path"); assertAmqpUri(ipv4, amqpUri); final String host = "myhost"; - amqpUri = IpUtil.createAmqpUri(host); + amqpUri = IpUtil.createAmqpUri(host, "path"); assertAmqpUri(host, amqpUri); final String ipv6 = "0:0:0:0:0:0:0:1"; - amqpUri = IpUtil.createAmqpUri(ipv6); + amqpUri = IpUtil.createAmqpUri(ipv6, "path"); assertAmqpUri("[" + ipv6 + "]", amqpUri); } - private void assertAmqpUri(final String host, final URI httpUri) { - assertTrue(IpUtil.isAmqpUri(httpUri)); - assertFalse(IpUtil.isHttpUri(httpUri)); - assertEquals(host, httpUri.getHost()); - assertEquals("amqp", httpUri.getScheme()); + 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()); + assertEquals("The given URI has an AMQP scheme", "amqp", amqpUri.getScheme()); + assertEquals("The given URI has an AMQP path", "/path", amqpUri.getRawPath()); } - @Test(expected = IllegalArgumentException.class) + @Test @Description("Tests create invalid uri") public void testCreateInvalidUri() { final String host = "10.99.99.1"; final URI testUri = IpUtil.createUri("test", host); - assertFalse(IpUtil.isAmqpUri(testUri)); - assertFalse(IpUtil.isHttpUri(testUri)); - assertEquals(host, testUri.getHost()); - IpUtil.createUri(":/", host); - fail(); + 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/HawkbitUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java index d352211f6..2be62db1d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java @@ -14,12 +14,11 @@ import java.util.Set; import javax.servlet.http.Cookie; -import org.eclipse.hawkbit.eventbus.event.EntityEvent; -import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.ui.components.SPUIErrorHandler; import org.eclipse.hawkbit.ui.menu.DashboardEvent.PostViewChangeEvent; import org.eclipse.hawkbit.ui.menu.DashboardMenu; import org.eclipse.hawkbit.ui.menu.DashboardMenuItem; +import org.eclipse.hawkbit.ui.push.EventPushStrategy; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; @@ -28,14 +27,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.context.HttpSessionSecurityContextRepository; import org.vaadin.spring.events.EventBus; -import org.vaadin.spring.events.EventBus.SessionEventBus; -import com.google.common.eventbus.AllowConcurrentEvents; -import com.google.common.eventbus.Subscribe; import com.vaadin.annotations.Title; import com.vaadin.navigator.Navigator; import com.vaadin.navigator.View; @@ -45,9 +38,6 @@ import com.vaadin.server.ClientConnector.DetachListener; import com.vaadin.server.Responsive; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinService; -import com.vaadin.server.VaadinSession; -import com.vaadin.server.VaadinSession.State; -import com.vaadin.server.WrappedSession; import com.vaadin.spring.navigator.SpringViewProvider; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; @@ -71,6 +61,8 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { private static final String EMPTY_VIEW = ""; + private EventPushStrategy pushStrategy; + @Autowired private SpringViewProvider viewProvider; @@ -92,69 +84,37 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { protected transient EventBus.SessionEventBus eventBus; /** - * An {@link com.google.common.eventbus.EventBus} subscriber which - * subscribes {@link EntityEvent} from the repository to dispatch these - * events to the UI {@link SessionEventBus}. - * - * @param event - * the entity event which has been published from the repository + * Default constructor. */ - @Subscribe - @AllowConcurrentEvents - public void dispatch(final org.eclipse.hawkbit.eventbus.event.Event event) { - final VaadinSession session = getSession(); - if (session == null || session.getState() != State.OPEN) { - return; - } - - final WrappedSession wrappedSession = session.getSession(); - if (wrappedSession == null) { - return; - } - - final SecurityContext userContext = (SecurityContext) wrappedSession - .getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY); - if (!eventSecurityCheck(userContext, event)) { - return; - } - - final SecurityContext oldContext = SecurityContextHolder.getContext(); - try { - access(new DispatcherRunnable(eventBus, session, userContext, event)); - } finally { - SecurityContextHolder.setContext(oldContext); - } - + public HawkbitUI() { + // is empty, is ok. } - protected boolean eventSecurityCheck(final SecurityContext userContext, - final org.eclipse.hawkbit.eventbus.event.Event event) { - if (userContext != null && userContext.getAuthentication() != null) { - final Object tenantAuthenticationDetails = userContext.getAuthentication().getDetails(); - if (tenantAuthenticationDetails instanceof TenantAwareAuthenticationDetails) { - return ((TenantAwareAuthenticationDetails) tenantAuthenticationDetails).getTenant() - .equalsIgnoreCase(event.getTenant()); - } - } - return false; + /** + * Constructor taking the push strategy. + * + * @param pushStrategy + * the strategy to push events from the backend to the UI + */ + public HawkbitUI(final EventPushStrategy pushStrategy) { + this.pushStrategy = pushStrategy; } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.server.ClientConnector.DetachListener#detach(com.vaadin.server - * .ClientConnector. DetachEvent) - */ @Override public void detach(final DetachEvent event) { LOG.info("ManagementUI is detached uiid - {}", getUIId()); - + eventBus.unsubscribe(this); + if (pushStrategy != null) { + pushStrategy.clean(); + } } @Override protected void init(final VaadinRequest vaadinRequest) { LOG.info("ManagementUI init starts uiid - {}", getUI().getUIId()); + if (pushStrategy != null) { + pushStrategy.init(getUI()); + } addDetachListener(this); SpringContextHelper.setContext(context); 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 d0ba20db6..1bc9da65c 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 @@ -208,14 +208,13 @@ public class ArtifactDetailsLayout extends VerticalLayout { } private Container createArtifactLazyQueryContainer() { - final Map queryConfiguration = new HashMap(); + final Map queryConfiguration = new HashMap<>(); return getArtifactLazyQueryContainer(queryConfiguration); } private LazyQueryContainer getArtifactLazyQueryContainer(final Map queryConfig) { - final BeanQueryFactory artifactQF = new BeanQueryFactory( - ArtifactBeanQuery.class); + final BeanQueryFactory artifactQF = new BeanQueryFactory<>(ArtifactBeanQuery.class); artifactQF.setQueryConfiguration(queryConfig); final LazyQueryContainer artifactCont = new LazyQueryContainer(new LazyQueryDefinition(true, 10, "id"), artifactQF); @@ -431,7 +430,7 @@ public class ArtifactDetailsLayout extends VerticalLayout { titleOfArtifactDetails.setContentMode(ContentMode.HTML); } } - final Map queryConfiguration = new HashMap(); + final Map queryConfiguration = new HashMap<>(); if (baseSwModuleId != null) { queryConfiguration.put(SPUIDefinitions.BY_BASE_SOFTWARE_MODULE, baseSwModuleId); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java index a4ae322fa..a3f045a08 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java @@ -47,12 +47,6 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { @Autowired private transient EventBus.SessionEventBus eventBus; - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.AbstractAcceptCriteria#analyseDragComponent - * (com.vaadin.event .dd.DragAndDropEvent, com.vaadin.ui.Component) - */ @Override protected void analyseDragComponent(final Component compsource) { final String sourceID = getComponentId(compsource); @@ -60,24 +54,11 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { eventBus.publish(this, event); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#hideDropHints - * () - */ @Override protected void hideDropHints() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#invalidDrop() - */ @Override protected void invalidDrop() { uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); @@ -92,41 +73,23 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { return id; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * getDropHintConfigurations() - */ @Override protected Map getDropHintConfigurations() { return DROP_HINTS_CONFIGS; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * publishDragStartEvent(java.lang.Object) - */ @Override protected void publishDragStartEvent(final Object event) { eventBus.publish(this, event); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * getDropConfigurations() - */ @Override protected Map> getDropConfigurations() { return DROP_CONFIGS; } private static Map> createDropConfigurations() { - final Map> config = new HashMap>(); + final Map> config = new HashMap<>(); // Delete drop area droppable components config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, Arrays.asList( SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)); @@ -135,7 +98,7 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { } private static Map createDropHintConfigurations() { - final Map config = new HashMap(); + final Map config = new HashMap<>(); config.put(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, UploadArtifactUIEvent.SOFTWARE_TYPE_DRAG_START); config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, UploadArtifactUIEvent.SOFTWARE_DRAG_START); return config; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java index eb8ed75e1..ef4b17da7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java @@ -37,8 +37,8 @@ import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.Table; -import com.vaadin.ui.UI; import com.vaadin.ui.Table.TableTransferable; +import com.vaadin.ui.UI; /** * Upload view footer layout implementation. @@ -71,12 +71,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { @Autowired private UploadViewAcceptCriteria uploadViewAcceptCriteria; - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#init() - */ + @Override @PostConstruct protected void init() { super.init(); @@ -134,23 +129,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * hasDeletePermission() - */ @Override protected boolean hasDeletePermission() { return permChecker.hasDeleteDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * hasUpdatePermission() - */ @Override protected boolean hasUpdatePermission() { /** @@ -161,12 +144,6 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * getDeleteAreaLabel() - */ @Override protected String getDeleteAreaLabel() { return i18n.get("label.software.module.drop.area"); @@ -177,29 +154,17 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * getDeleteLayoutAcceptCriteria() - */ @Override protected AcceptCriterion getDeleteLayoutAcceptCriteria() { return uploadViewAcceptCriteria; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * processDroppedComponent(com.vaadin .event.dd.DragAndDropEvent) - */ @Override protected void processDroppedComponent(final DragAndDropEvent event) { final Component sourceComponent = event.getTransferable().getSourceComponent(); if (sourceComponent instanceof Table) { final Table sourceTable = (Table) event.getTransferable().getSourceComponent(); - addToDeleteList(sourceTable,(TableTransferable) event.getTransferable()); + addToDeleteList(sourceTable, (TableTransferable) event.getTransferable()); updateSWActionCount(); } if (sourceComponent.getId().startsWith(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { @@ -223,11 +188,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { private void deleteSWModuleType(final String swModuleTypeName) { artifactUploadState.getSelectedDeleteSWModuleTypes().add(swModuleTypeName); } - + private void addToDeleteList(final Table sourceTable, final TableTransferable transferable) { @SuppressWarnings("unchecked") final Set swModuleSelected = (Set) sourceTable.getValue(); - final Set swModuleIdNameSet = new HashSet(); + final Set swModuleIdNameSet = new HashSet<>(); if (!swModuleSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { swModuleIdNameSet.add((Long) transferable.getData(SPUIDefinitions.ITEMID)); } else { @@ -239,33 +204,18 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { artifactUploadState.getDeleteSofwareModules().put(id, swModuleName); }); } - - /** - * Update the software module delete count. - */ + private void updateSWActionCount() { final int count = artifactUploadState.getDeleteSofwareModules().size() + artifactUploadState.getSelectedDeleteSWModuleTypes().size(); updateActionsCount(count); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * getNoActionsButtonLabel() - */ @Override protected String getNoActionsButtonLabel() { return i18n.get("button.no.actions"); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout# - * getActionsButtonLabel() - */ @Override protected String getActionsButtonLabel() { return i18n.get("button.actions"); @@ -276,25 +226,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { updateSWActionCount(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getUnsavedActionsWindowCaption () - */ @Override protected String getUnsavedActionsWindowCaption() { return i18n.get("caption.save.window"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * unsavedActionsWindowClosed() - */ @Override protected void unsavedActionsWindowClosed() { final String message = uploadViewConfirmationWindowLayout.getConsolidatedMessage(); @@ -303,26 +239,12 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getUnsavedActionsWindowContent () - */ @Override protected Component getUnsavedActionsWindowContent() { uploadViewConfirmationWindowLayout.init(); return uploadViewConfirmationWindowLayout; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasUnsavedActions() - */ @Override protected boolean hasUnsavedActions() { return !artifactUploadState.getDeleteSofwareModules().isEmpty() @@ -339,23 +261,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * isBulkUploadAllowed() - */ @Override protected boolean hasBulkUploadPermission() { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * showBulkUploadWindow() - */ @Override protected void showBulkUploadWindow() { /** @@ -363,12 +273,6 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { */ } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * restoreBulkUploadStatusCount() - */ @Override protected void restoreBulkUploadStatusCount() { /** 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 04339c1a6..bb48c515a 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 @@ -32,10 +32,6 @@ import com.google.common.base.Strings; * Simple implementation of generics bean query which dynamically loads a batch * of beans. * - * - * - * - * */ public class BaseSwModuleBeanQuery extends AbstractBeanQuery { private static final long serialVersionUID = 4362142538539335466L; @@ -76,7 +72,7 @@ public class BaseSwModuleBeanQuery extends AbstractBeanQuery loadBeans(final int startIndex, final int count) { final Slice swModuleBeans; - final List proxyBeans = new ArrayList(); + final List proxyBeans = new ArrayList<>(); if (type == null && Strings.isNullOrEmpty(searchText)) { swModuleBeans = getSoftwareManagementService() diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java index 674152164..6eb3e3d5d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java @@ -70,6 +70,7 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { /** * Initialize the component. */ + @Override @PostConstruct protected void init() { super.init(); 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 a4f8a8f70..aea80476a 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 @@ -55,8 +55,6 @@ import com.vaadin.ui.UI; /** * Header of Software module table. * - * - * */ @SpringComponent @ViewScope @@ -82,6 +80,7 @@ public class SoftwareModuleTable extends AbstractTable { /** * Initialize the filter layout. */ + @Override @PostConstruct protected void init() { super.init(); @@ -110,37 +109,30 @@ public class SoftwareModuleTable extends AbstractTable { }); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTable#getTableId() - */ @Override protected String getTableId() { return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTable#createContainer() - */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap(); - artifactUploadState.getSoftwareModuleFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + final Map queryConfiguration = prepareQueryConfigFilters(); - artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType() - .ifPresent(type -> queryConfiguration.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); - - final BeanQueryFactory swQF = new BeanQueryFactory( - BaseSwModuleBeanQuery.class); + final BeanQueryFactory swQF = new BeanQueryFactory<>(BaseSwModuleBeanQuery.class); swQF.setQueryConfiguration(queryConfiguration); - final LazyQueryContainer container = new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); - return container; + return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); + } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap<>(); + artifactUploadState.getSoftwareModuleFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + + artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType() + .ifPresent(type -> queryConfig.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); + + return queryConfig; } @Override @@ -265,16 +257,9 @@ public class SoftwareModuleTable extends AbstractTable { select(swModule.getId()); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTable#getTableVisibleColumns - * () - */ @Override protected List getTableVisibleColumns() { - final List columnList = new ArrayList(); + final List columnList = new ArrayList<>(); if (isMaximized()) { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java index b08c4defb..71605ec9f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java @@ -62,6 +62,7 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { /** * Initialize the components. */ + @Override @PostConstruct protected void init() { super.init(); @@ -84,55 +85,26 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { eventbus.unsubscribe(this); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getHeaderCaption - * () - */ @Override protected String getHeaderCaption() { return i18n.get("upload.swModuleTable.header"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getSearchBoxId() - */ @Override protected String getSearchBoxId() { return SPUIComponetIdProvider.SW_MODULE_SEARCH_TEXT_FIELD; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#getSearchRestIconId() - */ @Override protected String getSearchRestIconId() { return SPUIComponetIdProvider.SW_MODULE_SEARCH_RESET_ICON; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getAddIconId() - */ @Override protected String getAddIconId() { return SPUIComponetIdProvider.SW_MODULE_ADD_BUTTON; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#onLoadSearchBoxValue() - */ @Override protected String onLoadSearchBoxValue() { if (artifactUploadState.getSoftwareModuleFilters().getSearchText().isPresent()) { @@ -141,68 +113,34 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getDropFilterId( - * ) - */ @Override protected String getDropFilterId() { /* No dropping on software module table header in Upload View */ return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#hasCreatePermission() - */ @Override protected boolean hasCreatePermission() { return permChecker.hasCreateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#isDropHintRequired() - */ @Override protected boolean isDropHintRequired() { /* No dropping on software module table header in Upload View */ return false; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#isDropFilterRequired() - */ @Override protected boolean isDropFilterRequired() { /* No dropping on software module table header in Upload View */ return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader# - * getShowFilterButtonLayoutId() - */ @Override protected String getShowFilterButtonLayoutId() { return "show.type.icon"; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#showFilterButtonsLayout - * () - */ @Override protected void showFilterButtonsLayout() { artifactUploadState.setSwTypeFilterClosed(false); @@ -210,37 +148,19 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#resetSearchText( - * ) - */ @Override protected void resetSearchText() { - artifactUploadState.getSoftwareModuleFilters().setSearchText(null); - eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + if (artifactUploadState.getSoftwareModuleFilters().getSearchText().isPresent()) { + artifactUploadState.getSoftwareModuleFilters().setSearchText(null); + eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getMaxMinIconId( - * ) - */ @Override protected String getMaxMinIconId() { return SPUIComponetIdProvider.SW_MAX_MIN_TABLE_ICON; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#maximizeTable() - */ @Override public void maximizeTable() { artifactUploadState.setSwModuleTableMaximized(Boolean.TRUE); @@ -248,58 +168,28 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#minimizeTable() - */ @Override public void minimizeTable() { artifactUploadState.setSwModuleTableMaximized(Boolean.FALSE); eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null)); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#onLoadIsTableMaximized( - * ) - */ @Override public Boolean onLoadIsTableMaximized() { return artifactUploadState.isSwModuleTableMaximized(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader# - * onLoadIsShowFilterButtonDisplayed() - */ @Override public Boolean onLoadIsShowFilterButtonDisplayed() { return artifactUploadState.isSwTypeFilterClosed(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#searchBy(java.lang. - * String) - */ @Override protected void searchBy(final String newSearchText) { artifactUploadState.getSoftwareModuleFilters().setSearchText(newSearchText); eventbus.publish(this, SMFilterEvent.FILTER_BY_TEXT); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#addNewItem(com.vaadin. - * ui.Button.ClickEvent) - */ @Override protected void addNewItem(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow.createAddSoftwareModuleWindow(); @@ -308,11 +198,6 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { addSoftwareModule.setVisible(Boolean.TRUE); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#canAddNewItem() - */ @Override protected Boolean isAddNewItemAllowed() { return Boolean.TRUE; @@ -333,47 +218,21 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getBulkUploadIconId() - */ @Override protected String getBulkUploadIconId() { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com. - * vaadin.ui.Button.ClickEvent ) - */ @Override protected void bulkUpload(final ClickEvent event) { - /** - * No implementation as no bulk upload is supported. - */ + // No implementation as no bulk upload is supported. } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isBulkUploadAllowed() - */ @Override protected Boolean isBulkUploadAllowed() { return Boolean.FALSE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader# - * isBulkUploadInProgress() - */ @Override protected boolean isBulkUploadInProgress() { return false; 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 824faa83b..b79b53ae0 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 @@ -193,7 +193,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C getPreviewButtonColor(DEFAULT_COLOR); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - selectors = new HashSet(); + selectors = new HashSet<>(); selectedColor = new Color(44, 151, 32); selPreview = new SpColorPickerPreview(selectedColor); @@ -741,38 +741,17 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C return null; } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.components.colorpicker.HasColorChangeListener# - * addColorChangeListener(com.vaadin - * .ui.components.colorpicker.ColorChangeListener) - */ @Override public void addColorChangeListener(final ColorChangeListener listener) { LOG.debug("inside addColorChangeListener"); } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.components.colorpicker.HasColorChangeListener# - * removeColorChangeListener(com. - * vaadin.ui.components.colorpicker.ColorChangeListener) - */ @Override public void removeColorChangeListener(final ColorChangeListener listener) { LOG.debug("inside removeColorChangeListener"); } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.components.colorpicker.ColorSelector#setColor(com.vaadin. - * shared.ui.colorpicker .Color) - */ @Override public void setColor(final Color color) { if (color == null) { @@ -788,23 +767,11 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.components.colorpicker.ColorSelector#getColor() - */ @Override public Color getColor() { return null; } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.components.colorpicker.ColorChangeListener#colorChanged(com - * .vaadin.ui.components .colorpicker.ColorChangeEvent) - */ @Override public void colorChanged(final ColorChangeEvent event) { setColor(event.getColor()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java index 43c2452c2..9f2aa9602 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java @@ -35,8 +35,6 @@ import com.vaadin.spring.annotation.ViewScope; /** * Software module type filter buttons. * - * - * */ @SpringComponent @ViewScope @@ -59,6 +57,7 @@ public class SMTypeFilterButtons extends AbstractFilterButtons { * @param filterButtonClickBehaviour * the clickable behaviour. */ + @Override public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); eventBus.subscribe(this); @@ -86,58 +85,28 @@ public class SMTypeFilterButtons extends AbstractFilterButtons { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.layouts.SPFilterButtons#getButtonsTableId() - */ @Override protected String getButtonsTableId() { return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.layouts.SPFilterButtons# - * createButtonsLazyQueryContainer() - */ @Override protected LazyQueryContainer createButtonsLazyQueryContainer() { return HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(SoftwareModuleTypeBeanQuery.class)); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.layouts.SPFilterButtons#isClickedByDefault(java. - * lang.Long) - */ @Override protected boolean isClickedByDefault(final Long buttonId) { return artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() && artifactUploadState .getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.layouts.SPFilterButtons#createButtonId(java.lang. - * String) - */ @Override protected String createButtonId(final String name) { return SPUIComponetIdProvider.SM_TYPE_FILTER_BTN_ID + name; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.filterlayout.SPFilterButtons# - * getFilterButtonDropHandler() - */ @Override protected DropHandler getFilterButtonDropHandler() { return new DropHandler() { @@ -155,13 +124,6 @@ public class SMTypeFilterButtons extends AbstractFilterButtons { }; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButttonWrapperId() - */ @Override protected String getButttonWrapperIdPrefix() { return SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java index d0292dd48..b79ecb742 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java @@ -28,9 +28,6 @@ import com.vaadin.ui.Window; /** * Software module type filter buttons header. - * - * - * */ @SpringComponent @ViewScope @@ -53,6 +50,7 @@ public class SMTypeFilterHeader extends AbstractFilterHeader { /** * Initialize the components. */ + @Override @PostConstruct protected void init() { super.init(); @@ -61,32 +59,16 @@ public class SMTypeFilterHeader extends AbstractFilterHeader { } } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.layouts.SPFilterHeader#hasCreateUpdatePermission() - */ @Override protected boolean hasCreateUpdatePermission() { return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.layouts.SPFilterHeader#getTitle() - */ @Override protected String getTitle() { return SPUILabelDefinitions.TYPE; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.layouts.SPFilterHeader#settingsIconClicked(com. - * vaadin.ui.Button.ClickEvent ) - */ @Override protected void settingsIconClicked(final ClickEvent event) { final Window addUpdateWindow = createUpdateSWTypeLayout.getWindow(); @@ -94,58 +76,27 @@ public class SMTypeFilterHeader extends AbstractFilterHeader { addUpdateWindow.setVisible(Boolean.TRUE); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.layouts.SPFilterHeader#dropHitsRequired() - */ @Override protected boolean dropHitsRequired() { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.filterlayout.SPFilterHeader# - * hideFilterButtonLayout() - */ @Override protected void hideFilterButtonLayout() { artifactUploadState.setSwTypeFilterClosed(true); eventbus.publish(this, UploadArtifactUIEvent.HIDE_FILTER_BY_TYPE); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.filterlayout.SPFilterHeader# - * getConfigureFilterButtonId() - */ @Override protected String getConfigureFilterButtonId() { return SPUIDefinitions.ADD_SOFTWARE_MODULE_TYPE; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getHideButtonId() - */ @Override protected String getHideButtonId() { return SPUIComponetIdProvider.SM_SHOW_FILTER_BUTTON_ID; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader# - * isAddTagRequired() - */ @Override protected boolean isAddTagRequired() { return true; 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 51ac43ba5..f009985f9 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 @@ -56,11 +56,7 @@ import com.vaadin.ui.themes.ValoTheme; /** * Artifact upload confirmation popup. - * - * - * - * - * + * */ public class UploadConfirmationwindow implements Button.ClickListener { @@ -106,7 +102,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { private IndexedContainer tabelContainer; - private final List uploadResultList = new ArrayList(); + private final List uploadResultList = new ArrayList<>(); private VerticalLayout uploadArtifactDetails; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 834246c63..8c1feeb33 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -108,8 +108,10 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public OutputStream receiveUpload(final String fileName, final String mimeType) { this.fileName = fileName; this.mimeType = mimeType; + //reset has directory flag before upload + view.setHasDirectory(false); try { - if (view.validate()) { + if (view.checkIfSoftwareModuleIsSelected()) { if (view.checkForDuplicate(fileName)) { view.showDuplicateMessage(); } else { @@ -167,7 +169,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene view.updateActionCount(); // display the duplicate message after streaming all files - view.displayDuplicateMessageAfterStreamingAll(); + view.displayDuplicateValidationMessage(); } /** @@ -292,7 +294,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene if (view.enableProcessBtn()) { infoWindow.uploadSessionFinished(); } - view.displayDuplicateMessageAfterStreamingAll(); + view.displayDuplicateValidationMessage(); LOG.info("Streaming failed due to :{}", event.getException()); } @@ -316,7 +318,6 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene } view.updateActionCount(); infoWindow.uploadFailed(event.getFilename(), failureReason); - LOG.info("Upload failed for file :{}", event.getReason()); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index e570c84c4..41304ddc9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -46,6 +46,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.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptAll; @@ -69,8 +70,6 @@ import com.vaadin.ui.VerticalLayout; /** * Upload files layout. - * - * */ @ViewScope @SpringComponent @@ -102,7 +101,7 @@ public class UploadLayout extends VerticalLayout { private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger(); - private final List duplicateFileNamesList = new ArrayList(); + private final List duplicateFileNamesList = new ArrayList<>(); private Button processBtn; @@ -118,6 +117,8 @@ public class UploadLayout extends VerticalLayout { private DragAndDropWrapper dropAreaWrapper; + private Boolean hasDirectory = Boolean.FALSE; + /** * Initialize the upload layout. */ @@ -184,27 +185,60 @@ public class UploadLayout extends VerticalLayout { @Override public void drop(final DragAndDropEvent event) { - if (validate()) { - + if (validate(event)) { final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); - if (files != null) { - for (final Html5File file : files) { - if (!checkForDuplicate(file.getFileName())) { - numberOfFileUploadsExpected.incrementAndGet(); - file.setStreamVariable(createStreamVariable(file)); - } - } - if (numberOfFileUploadsExpected.get() > 0) { - processBtn.setEnabled(false); - // reset before we start - uploadInfoWindow.uploadSessionStarted(); - } - // in case if all selected files are duplicate ,then display - // message - displayDuplicateMessageAfterStreamingAll(); + // reset the flag + hasDirectory = Boolean.FALSE; + for (final Html5File file : files) { + processFile(file); + } + if (numberOfFileUploadsExpected.get() > 0) { + processBtn.setEnabled(false); + // reset before we start + uploadInfoWindow.uploadSessionStarted(); + } else { + // If the upload is not started, it signifies all + // dropped files as either duplicate or directory.So + // display message accordingly + displayCompositeMessage(); } } } + + private void processFile(final Html5File file) { + if (!isDirectory(file)) { + if (!checkForDuplicate(file.getFileName())) { + numberOfFileUploadsExpected.incrementAndGet(); + file.setStreamVariable(createStreamVariable(file)); + } + } else { + hasDirectory = Boolean.TRUE; + } + } + } + + private static boolean isDirectory(final Html5File file) { + if (Strings.isNullOrEmpty(file.getType()) && file.getFileSize() % 4096 == 0) { + return true; + } + return false; + } + + private void displayCompositeMessage() { + final String duplicateMessage = getDuplicateFileValidationMessage(); + final StringBuilder compositeMessage = new StringBuilder(); + if (!Strings.isNullOrEmpty(duplicateMessage)) { + compositeMessage.append(duplicateMessage); + } + if (hasDirectory) { + if (compositeMessage.length() > 0) { + compositeMessage.append("
"); + } + compositeMessage.append(i18n.get("message.no.directory.upload")); + } + if (!compositeMessage.toString().isEmpty()) { + uiNotification.displayValidationError(compositeMessage.toString()); + } } private VerticalLayout createDropAreaLayout() { @@ -315,10 +349,33 @@ public class UploadLayout extends VerticalLayout { } } - Boolean validate() { + Boolean validate(DragAndDropEvent event) { + // check if drop is valid.If valid ,check if software module is + // selected. + if(!isFilesDropped(event)){ + uiNotification.displayValidationError(i18n.get("message.action.not.allowed")); + return false; + } + return checkIfSoftwareModuleIsSelected(); + } + + private boolean isFilesDropped(DragAndDropEvent event) { + if (event.getTransferable() instanceof WrapperTransferable) { + final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); + // other components can also be wrapped in WrapperTransferable , so + // additional check on files + if (files == null) { + return false; + } + return true; + } else { + return false; + } + } + + Boolean checkIfSoftwareModuleIsSelected() { if (!isSoftwareModuleSelected()) { uiNotification.displayValidationError(i18n.get("message.error.noSwModuleSelected")); - return false; } return true; @@ -383,27 +440,30 @@ public class UploadLayout extends VerticalLayout { } } - void displayDuplicateMessageAfterStreamingAll() { + void displayDuplicateValidationMessage() { // check if streaming of all dropped files are completed if (numberOfFilesActuallyUpload.intValue() == numberOfFileUploadsExpected.intValue()) { - showDuplicateMessage(); + displayCompositeMessage(); } } - /** - * Show duplicate file selected message. - */ - public void showDuplicateMessage() { + private String getDuplicateFileValidationMessage() { + StringBuilder message = new StringBuilder(); if (!duplicateFileNamesList.isEmpty()) { final String fileNames = StringUtils.collectionToCommaDelimitedString(duplicateFileNamesList); if (duplicateFileNamesList.size() == 1) { - uiNotification.displayValidationError(i18n.get("message.no.duplicateFile") + fileNames); + message.append(i18n.get("message.no.duplicateFile") + fileNames); } else if (duplicateFileNamesList.size() > 1) { - uiNotification.displayValidationError(i18n.get("message.no.duplicateFiles")); + message.append(i18n.get("message.no.duplicateFiles")); } duplicateFileNamesList.clear(); } + return message.toString(); + } + + public void showDuplicateMessage() { + uiNotification.displayValidationError(getDuplicateFileValidationMessage()); } void increaseNumberOfFileUploadsExpected() { @@ -595,4 +655,8 @@ public class UploadLayout extends VerticalLayout { return uiNotification; } + + public void setHasDirectory(Boolean hasDirectory) { + this.hasDirectory = hasDirectory; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java index a4470b8e1..c5319a221 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java @@ -44,7 +44,7 @@ public class UploadResultWindow implements Button.ClickListener { private static final long serialVersionUID = 5205927189362269027L; - private List uploadResultList = new ArrayList(); + private List uploadResultList = new ArrayList<>(); private Button closeBtn; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java index 7ee6de97c..c0f42909d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java @@ -29,9 +29,6 @@ import com.vaadin.ui.themes.ValoTheme; * * module. * - * - * - * */ public class ConfirmationDialog implements Button.ClickListener { /** Serial version UID. */ @@ -127,6 +124,7 @@ public class ConfirmationDialog implements Button.ClickListener { * @param event * the click event. */ + @Override public void buttonClick(final ClickEvent event) { if (window.getParent() != null) { UI.getCurrent().removeWindow(window); @@ -146,6 +144,7 @@ public class ConfirmationDialog implements Button.ClickListener { /** * Interface for confirmation dialog callbacks. */ + @FunctionalInterface public interface ConfirmationDialogCallback { /** * The user response. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java index 787e51d83..b09255bc7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java @@ -83,7 +83,7 @@ public class DistributionSetTypeBeanQuery extends AbstractBeanQuery loadBeans(final int startIndex, final int count) { Page typeBeans; - final List distSetTypeList = new ArrayList(); + final List distSetTypeList = new ArrayList<>(); if (startIndex == 0 && firstPageDistSetType != null) { typeBeans = firstPageDistSetType; } else { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java index ebcd097c3..c8824e455 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java @@ -45,8 +45,6 @@ import com.vaadin.ui.UI; /** * Implementation of target/ds tag token layout. - * - * * */ @SpringComponent @@ -80,6 +78,7 @@ public class DistributionTagToken extends AbstractTagToken { // To Be Done : have to set this value based on view??? private static final Boolean NOTAGS_SELECTED = Boolean.FALSE; + @Override @PostConstruct protected void init() { super.init(); @@ -88,34 +87,16 @@ public class DistributionTagToken extends AbstractTagToken { } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.tagDetails.AbstractTagToken#getTagStyleName - * () - */ @Override protected String getTagStyleName() { return "distribution-tag-"; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken# - * getTokenInputPrompt() - */ @Override protected String getTokenInputPrompt() { return i18n.get("combo.type.tag.name"); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.tagDetails.AbstractTagToken#assignTag(java. - * lang.String) - */ @Override protected void assignTag(final String tagNameSelected) { if (tagNameSelected != null) { @@ -129,7 +110,7 @@ public class DistributionTagToken extends AbstractTagToken { } private DistributionSetTagAssigmentResult toggleAssignment(final String tagNameSelected) { - final Set distributionList = new HashSet(); + final Set distributionList = new HashSet<>(); distributionList.add(selectedDS.getId()); final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, tagNameSelected); @@ -137,12 +118,6 @@ public class DistributionTagToken extends AbstractTagToken { return result; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.tagDetails.AbstractTagToken#unassignTag( - * java.lang.String) - */ @Override protected void unassignTag(final String tagName) { final DistributionSetTagAssigmentResult result = toggleAssignment(tagName); @@ -160,26 +135,14 @@ public class DistributionTagToken extends AbstractTagToken { /* To Be Done : this implementation will vary in views */ private List getClickedTagList() { - return new ArrayList(); + return new ArrayList<>(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken# - * hasUpdatePermission() - */ @Override protected Boolean isToggleTagAssignmentAllowed() { return spChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken# - * displayAlreadyAssignedTags() - */ @Override public void displayAlreadyAssignedTags() { removePreviouslyAddedTokens(); @@ -190,12 +153,6 @@ public class DistributionTagToken extends AbstractTagToken { } } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken# - * populateContainer() - */ @Override protected void populateContainer() { container.removeAllItems(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java index 1610a2de8..8982be759 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java @@ -78,7 +78,7 @@ public class TargetTagToken extends AbstractTargetTagToken { } private TargetTagAssigmentResult toggleAssignment(final String tagNameSelected) { - final Set targetList = new HashSet(); + final Set targetList = new HashSet<>(); targetList.add(selectedTarget.getControllerId()); final TargetTagAssigmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected); uinotification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(tagNameSelected, result, i18n)); @@ -102,7 +102,7 @@ public class TargetTagToken extends AbstractTargetTagToken { /* To Be Done : this implementation will vary in views */ private List getClickedTagList() { - return new ArrayList(); + return new ArrayList<>(); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java index e96a2824f..ee0fa0a93 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java @@ -14,29 +14,11 @@ import com.vaadin.ui.themes.ValoTheme; /** * Style for button: Primary. - * - * - * - * - * - * */ public class SPUIButtonStylePrimarySmall implements SPUIButtonDecorator { - /** - * Decorate Button and return. - * - * @param button - * as Button - * @param style - * as String - * @param setStyle - * as String - * @param icon - * as resource - * @return Button - */ - public Button decorate(Button button, String style, boolean setStyle, Resource icon) { + @Override + public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { button.addStyleName(ValoTheme.BUTTON_PRIMARY + " " + ValoTheme.BUTTON_SMALL); // Set Style if (null != style) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java index 5b67572c9..6166dbf5a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java @@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme; /** * Style for button: Small. - * - * - * - * - * * */ public class SPUIButtonStyleSmall implements SPUIButtonDecorator { - /** - * Decorate Button and return. - * - * @param button - * as Button - * @param style - * as String - * @param setStyle - * as String - * @param icon - * as resource - * @return Button - */ - public Button decorate(Button button, String style, boolean setStyle, Resource icon) { + @Override + public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { button.addStyleName(ValoTheme.BUTTON_SMALL); // Set Style if (null != style) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java index 612f954cf..5b4dae0a3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java @@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme; /** * Style for button: Small NoBorder Height UnDefined. - * - * - * - * - * * */ public class SPUIButtonStyleSmallNoBorderUH implements SPUIButtonDecorator { - /** - * Decorate Button and return. - * - * @param button - * as Button - * @param style - * as String - * @param setStyle - * as String - * @param icon - * as resource - * @return Button - */ - public Button decorate(Button button, String style, boolean setStyle, Resource icon) { + @Override + public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { button.addStyleName(ValoTheme.BUTTON_SMALL); button.addStyleName(ValoTheme.BUTTON_BORDERLESS_COLORED); button.setHeightUndefined(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java index e75fdcfa8..f06fbd413 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java @@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme; /** * Style for button: Small NoBorder Height and size UnDefined. - * - * - * - * - * * */ public class SPUIButtonStyleSmallNoBorderUHS implements SPUIButtonDecorator { - /** - * Decorate Button and return. - * - * @param button - * as Button - * @param style - * as String - * @param setStyle - * as String - * @param icon - * as resource - * @return Button - */ - public Button decorate(Button button, String style, boolean setStyle, Resource icon) { + @Override + public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { button.addStyleName(ValoTheme.BUTTON_SMALL); button.addStyleName(ValoTheme.BUTTON_BORDERLESS); button.setHeightUndefined(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java index 4dbe4b304..eaa319929 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java @@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme; /** * Style for button: Small. - * - * - * - * - * * */ public class SPUIButtonStyleTiny implements SPUIButtonDecorator { - /** - * Decorate Button and return. - * - * @param button - * as Button - * @param style - * as String - * @param setStyle - * as String - * @param icon - * as resource - * @return Button - */ - public Button decorate(Button button, String style, boolean setStyle, Resource icon) { + @Override + public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { button.addStyleName(ValoTheme.BUTTON_TINY); // Set Style if (null != style) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java index 2ecca2b4f..014bdbfb9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java @@ -16,27 +16,10 @@ import com.vaadin.ui.themes.ValoTheme; /** * Style for button: Tag. - * - * - * - * - * - * */ public class SPUITagButtonStyle implements SPUIButtonDecorator { - /** - * Decorate Button and return. - * - * @param button - * as Button - * @param style - * as String - * @param setStyle - * as String - * @param icon - * as resource - * @return Button - */ + + @Override public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { /** 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 3cd1764e3..4fed0dd4b 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 @@ -79,8 +79,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Window for create update Distribution Set Type. - * - * */ @SpringComponent @ViewScope @@ -221,7 +219,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co getPreviewButtonColor(DEFAULT_COLOR); - selectors = new HashSet(); + selectors = new HashSet<>(); selectedColor = new Color(44, 151, 32); selPreview = new SpColorPickerPreview(selectedColor); @@ -457,6 +455,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co sourceTable.setItemDescriptionGenerator(new ItemDescriptionGenerator() { private static final long serialVersionUID = 1L; + @Override public String generateDescription(final Component source, final Object itemId, final Object propertyId) { final Item item = sourceTable.getItem(itemId); final String description = (String) item.getItemProperty(DIST_TYPE_DESCRIPTION).getValue(); @@ -475,7 +474,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co @SuppressWarnings("unchecked") private void getSelectedTableItemData(final Long id) { - Item saveTblitem = null; + Item saveTblitem; if (null != selectedTablecontainer) { saveTblitem = selectedTablecontainer.addItem(id); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue( @@ -657,10 +656,10 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co DistributionSetType newDistType = new DistributionSetType(typeKeyValue, typeNameValue, typeDescValue); for (final Long id : itemIds) { final Item item = selectedTable.getItem(id); - final String dist_type_name = (String) item.getItemProperty(DIST_TYPE_NAME).getValue(); + final String distTypeName = (String) item.getItemProperty(DIST_TYPE_NAME).getValue(); final CheckBox mandatoryCheckBox = (CheckBox) item.getItemProperty(DIST_TYPE_MANDATORY).getValue(); final Boolean isMandatory = mandatoryCheckBox.getValue(); - final SoftwareModuleType swModuleType = softwareManagement.findSoftwareModuleTypeByName(dist_type_name); + final SoftwareModuleType swModuleType = softwareManagement.findSoftwareModuleTypeByName(distTypeName); if (isMandatory) { newDistType.addMandatoryModuleType(swModuleType); @@ -1032,7 +1031,6 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co * as the selected tag from combo */ private void setTypeTagCombo(final String distSetTypeSelected) { - boolean mandatory = false; typeName.setValue(distSetTypeSelected); getSourceTableData(); selectedTable.getContainerDataSource().removeAllItems(); @@ -1053,13 +1051,11 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co saveDistSetType.setEnabled(false); } for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) { - mandatory = false; - addTargetTableforUpdate(swModuleType, mandatory); + addTargetTableforUpdate(swModuleType, false); } for (final SoftwareModuleType swModuleType : selectedTypeTag.getMandatoryModuleTypes()) { - mandatory = true; - addTargetTableforUpdate(swModuleType, mandatory); + addTargetTableforUpdate(swModuleType, true); } if (null == selectedTypeTag.getColour()) { 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 542c4c12d..cd36918e8 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 @@ -60,44 +60,24 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { * @param filterButtonClickBehaviour * the clickable behaviour. */ + @Override public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); eventBus.subscribe(this); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButtonsTableId() - */ @Override protected String getButtonsTableId() { return SPUIComponetIdProvider.DISTRIBUTION_SET_TYPE_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonsLazyQueryContainer () - */ @Override protected LazyQueryContainer createButtonsLazyQueryContainer() { return HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(DistributionSetTypeBeanQuery.class)); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * isClickedByDefault(java.lang .Long) - */ @Override protected boolean isClickedByDefault(final Long buttonId) { @@ -105,26 +85,12 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { && manageDistUIState.getManageDistFilters().getClickedDistSetType().getId().equals(buttonId); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonId(java.lang. String) - */ @Override protected String createButtonId(final String name) { return SPUIComponetIdProvider.DS_TYPE_FILTER_BTN_ID + name; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getFilterButtonDropHandler() - */ @Override protected DropHandler getFilterButtonDropHandler() { @@ -148,13 +114,6 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButttonWrapperId() - */ @Override protected String getButttonWrapperIdPrefix() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java index 9092293db..068c28065 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java @@ -27,9 +27,6 @@ import com.vaadin.ui.Window; /** * Distribution Set Type filter buttons header. - * - * - * */ @SpringComponent @ViewScope @@ -49,9 +46,7 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { @Autowired private CreateUpdateDistSetTypeLayout createUpdateDistSetTypeLayout; - /** - * Initialize the components. - */ + @Override @PostConstruct public void init() { super.init(); @@ -60,37 +55,16 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hasCreateUpdatePermission() - */ @Override protected boolean hasCreateUpdatePermission() { - return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle( - * ) - */ @Override protected String getTitle() { return SPUILabelDefinitions.TYPE; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * settingsIconClicked(com.vaadin .ui.Button.ClickEvent) - */ @Override protected void settingsIconClicked(final ClickEvent event) { final Window addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); @@ -99,25 +73,11 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * dropHitsRequired() - */ @Override protected boolean dropHitsRequired() { return false; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hideFilterButtonLayout() - */ @Override protected void hideFilterButtonLayout() { manageDistUIState.setDistTypeFilterClosed(true); @@ -125,38 +85,17 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getConfigureFilterButtonId() - */ @Override protected String getConfigureFilterButtonId() { return SPUIDefinitions.ADD_DISTRIBUTION_TYPE_TAG; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getHideButtonId() - */ @Override protected String getHideButtonId() { - return SPUIDefinitions.HIDE_FILTER_DIST_TYPE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader# - * isAddTagRequired() - */ @Override protected boolean isAddTagRequired() { return true; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index b8e0d286a..8d22f6782 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -74,8 +74,6 @@ import com.vaadin.ui.UI; /** * Distribution set table. * - * - * */ @SpringComponent @ViewScope @@ -136,49 +134,36 @@ public class DistributionSetTable extends AbstractTable { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#getTableId() - */ @Override protected String getTableId() { return SPUIComponetIdProvider.DIST_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#createContainer( - * ) - */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap<>(); - manageDistUIState.getManageDistFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); - - if (null != manageDistUIState.getManageDistFilters().getClickedDistSetType()) { - queryConfiguration.put(SPUIDefinitions.FILTER_BY_DISTRIBUTION_SET_TYPE, - manageDistUIState.getManageDistFilters().getClickedDistSetType()); - } - + final Map queryConfiguration = prepareQueryConfigFilters(); final BeanQueryFactory distributionQF = new BeanQueryFactory<>(ManageDistBeanQuery.class); + distributionQF.setQueryConfiguration(queryConfiguration); return new LazyQueryContainer( new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), distributionQF); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#addContainerProperties - * (com.vaadin.data.Container ) - */ + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap<>(); + manageDistUIState.getManageDistFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + + if (null != manageDistUIState.getManageDistFilters().getClickedDistSetType()) { + queryConfig.put(SPUIDefinitions.FILTER_BY_DISTRIBUTION_SET_TYPE, + manageDistUIState.getManageDistFilters().getClickedDistSetType()); + } + + return queryConfig; + } + @Override protected void addContainerProperties(final Container container) { HawkbitCommonUtil.getDsTableColumnProperties(container); @@ -186,12 +171,6 @@ public class DistributionSetTable extends AbstractTable { Boolean.class, null, false, true); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable# - * addCustomGeneratedColumns () - */ @Override protected void addCustomGeneratedColumns() { /** @@ -199,23 +178,12 @@ public class DistributionSetTable extends AbstractTable { */ } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable# - * isFirstRowSelectedOnLoad () - */ @Override protected boolean isFirstRowSelectedOnLoad() { return !manageDistUIState.getSelectedDistributions().isPresent() || manageDistUIState.getSelectedDistributions().get().isEmpty(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getItemIdToSelect() - */ @Override protected Object getItemIdToSelect() { if (manageDistUIState.getSelectedDistributions().isPresent()) { @@ -224,12 +192,6 @@ public class DistributionSetTable extends AbstractTable { return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#onValueChange() - */ @Override protected void onValueChange() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); @@ -264,33 +226,16 @@ public class DistributionSetTable extends AbstractTable { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#isMaximized() - */ @Override protected boolean isMaximized() { return manageDistUIState.isDsTableMaximized(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getTableVisibleColumns - * () - */ @Override protected List getTableVisibleColumns() { return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), false, i18n); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getTableDropHandler() - */ @Override protected DropHandler getTableDropHandler() { return new DropHandler() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java index d64f07ca0..f8cb7a45b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java @@ -36,8 +36,6 @@ import com.vaadin.ui.Window; /** * Distribution table header. - * - * */ @SpringComponent @ViewScope @@ -60,9 +58,7 @@ public class DistributionSetTableHeader extends AbstractTableHeader { @Autowired private DistributionAddUpdateWindowLayout addUpdateWindowLayout; - /** - * Initialize the component. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -76,54 +72,26 @@ public class DistributionSetTableHeader extends AbstractTableHeader { } } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getHeaderCaption( - * ) - */ @Override protected String getHeaderCaption() { return i18n.get("header.dist.table"); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getSearchBoxId() - */ @Override protected String getSearchBoxId() { return SPUIComponetIdProvider.DIST_SEARCH_TEXTFIELD; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getSearchRestIconId() - */ @Override protected String getSearchRestIconId() { return SPUIComponetIdProvider.DIST_SEARCH_ICON; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getAddIconId() - */ @Override protected String getAddIconId() { return SPUIComponetIdProvider.DIST_ADD_ICON; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * onLoadSearchBoxValue() - */ @Override protected String onLoadSearchBoxValue() { if (manageDistUIstate.getManageDistFilters().getSearchText().isPresent()) { @@ -132,11 +100,6 @@ public class DistributionSetTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getDropFilterId() - */ @Override protected String getDropFilterId() { return null; @@ -170,9 +133,10 @@ public class DistributionSetTableHeader extends AbstractTableHeader { @Override protected void resetSearchText() { - manageDistUIstate.getManageDistFilters().setSearchText(null); - eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); - + if (manageDistUIstate.getManageDistFilters().getSearchText().isPresent()) { + manageDistUIstate.getManageDistFilters().setSearchText(null); + eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); + } } @Override @@ -222,11 +186,6 @@ public class DistributionSetTableHeader extends AbstractTableHeader { eventbus.unsubscribe(this); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#canAddNewItem() - */ @Override protected Boolean isAddNewItemAllowed() { return Boolean.TRUE; @@ -247,47 +206,21 @@ public class DistributionSetTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getBulkUploadIconId() - */ @Override protected String getBulkUploadIconId() { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com. - * vaadin.ui.Button.ClickEvent ) - */ @Override protected void bulkUpload(final ClickEvent event) { - /** - * No implementation as no bulk upload is supported. - */ + // No implementation as no bulk upload is supported. } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isBulkUploadAllowed() - */ @Override protected Boolean isBulkUploadAllowed() { return Boolean.FALSE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader# - * isBulkUploadInProgress() - */ @Override protected boolean isBulkUploadInProgress() { return false; 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 7c0d367f8..60b547285 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 @@ -37,8 +37,6 @@ import com.google.common.base.Strings; /** * Manage Distributions table bean query. * - * - * */ public class ManageDistBeanQuery extends AbstractBeanQuery { @@ -83,28 +81,15 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { } } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#constructBean() - */ @Override protected ProxyDistribution constructBean() { return new ProxyDistribution(); } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int, - * int) - */ @Override protected List loadBeans(final int startIndex, final int count) { Page distBeans; - final List proxyDistributions = new ArrayList(); + final List proxyDistributions = new ArrayList<>(); if (startIndex == 0 && firstPageDistributionSets != null) { distBeans = firstPageDistributionSets; } else if (Strings.isNullOrEmpty(searchText)) { @@ -136,24 +121,12 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { return proxyDistributions; } - /* - * (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) { // Add,Delete and Update are performed through repository methods } - /* - * (non-Javadoc) - * - * @see org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#size() - */ @Override public int size() { if (Strings.isNullOrEmpty(searchText) && null == distributionSetType) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java index 6a8296c0f..5b79b96f4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java @@ -28,8 +28,6 @@ import com.vaadin.ui.Component; /** * Distributions View for Accept criteria. * - * - * */ @SpringComponent @ViewScope @@ -47,12 +45,6 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { @Autowired private transient EventBus.SessionEventBus eventBus; - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.AbstractAcceptCriteria#analyseDragComponent - * (com.vaadin.event .dd.DragAndDropEvent, com.vaadin.ui.Component) - */ @Override protected void analyseDragComponent(final Component compsource) { final String sourceID = getComponentId(compsource); @@ -60,24 +52,11 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { eventBus.publish(this, event); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#hideDropHints - * () - */ @Override protected void hideDropHints() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#invalidDrop() - */ @Override protected void invalidDrop() { uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); @@ -94,34 +73,16 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { return id; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * getDropHintConfigurations() - */ @Override protected Map getDropHintConfigurations() { return DROP_HINTS_CONFIGS; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * publishDragStartEvent(java.lang.Object) - */ @Override protected void publishDragStartEvent(final Object event) { eventBus.publish(this, event); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * getDropConfigurations() - */ @Override protected Map> getDropConfigurations() { return DROP_CONFIGS; @@ -137,7 +98,7 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { } private static Map> createDropConfigurations() { - final Map> config = new HashMap>(); + final Map> config = new HashMap<>(); // Delete drop area droppable components config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, @@ -153,7 +114,7 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { } private static Map createDropHintConfigurations() { - final Map config = new HashMap(); + final Map config = new HashMap<>(); config.put(SPUIDefinitions.DISTRIBUTION_TYPE_ID_PREFIXS, DragEvent.DISTRIBUTION_TYPE_DRAG); config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, DragEvent.SOFTWAREMODULE_DRAG); 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 1581bfadd..859febbce 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 @@ -32,9 +32,6 @@ import com.google.common.base.Strings; /** * Simple implementation of generics bean query which dynamically loads a batch * of beans. - * - * - * * */ public class SwModuleBeanQuery extends AbstractBeanQuery { @@ -77,17 +74,10 @@ public class SwModuleBeanQuery extends AbstractBeanQuery return new ProxyBaseSwModuleItem(); } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int, - * int) - */ @Override protected List loadBeans(final int startIndex, final int count) { final Slice swModuleBeans; - final List proxyBeans = new ArrayList(); + final List proxyBeans = new ArrayList<>(); swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderByDistribution( new OffsetBasedPageRequest(startIndex, count, new Sort(Direction.ASC, "name", "version")), diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java index 9d31763ff..3b1a2cad6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java @@ -39,9 +39,6 @@ import com.vaadin.ui.Window; /** * Implementation of software module details block using generic abstract * details style . - * - * - * */ @SpringComponent @ViewScope @@ -70,9 +67,7 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { private SoftwareModule selectedSwModule; - /** - * Initialize the component. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -133,49 +128,21 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * getDefaultCaption() - */ @Override protected String getDefaultCaption() { return i18n.get("upload.swModuleTable.header"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * onLoadIsSwModuleSelected() - */ @Override protected Boolean onLoadIsTableRowSelected() { return !manageDistUIState.getSelectedSoftwareModules().isEmpty(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * onLoadIsTableMaximized() - */ @Override protected Boolean onLoadIsTableMaximized() { return manageDistUIState.isSwModuleTableMaximized(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * populateDetailsWidget() - */ @Override protected void populateDetailsWidget() { populateDetailsWidget(selectedSwModule); @@ -191,12 +158,6 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { return permissionChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getTabSheetId() - */ @Override protected String getTabSheetId() { return null; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java index 17ee9b8af..9218198b9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java @@ -67,8 +67,6 @@ import com.vaadin.ui.Window; /** * Implementation of software module table using generic abstract table styles . - * - * * */ @SpringComponent @@ -98,6 +96,7 @@ public class SwModuleTable extends AbstractTable { /** * Initialize the filter layout. */ + @Override @PostConstruct protected void init() { super.init(); @@ -158,50 +157,35 @@ public class SwModuleTable extends AbstractTable { } } - /* All Override methods */ - - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTable#getTableId() - */ @Override protected String getTableId() { return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTable#createContainer() - */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap(); - manageDistUIState.getSoftwareModuleFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + final Map queryConfiguration = prepareQueryConfigFilters(); - manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType() - .ifPresent(type -> queryConfiguration.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); - - manageDistUIState.getLastSelectedDistribution().ifPresent( - distIdName -> queryConfiguration.put(SPUIDefinitions.ORDER_BY_DISTRIBUTION, distIdName.getId())); - - final BeanQueryFactory swQF = new BeanQueryFactory( - SwModuleBeanQuery.class); + final BeanQueryFactory swQF = new BeanQueryFactory<>(SwModuleBeanQuery.class); swQF.setQueryConfiguration(queryConfiguration); - final LazyQueryContainer container = new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); - return container; + return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); + } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap<>(); + manageDistUIState.getSoftwareModuleFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + + manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType() + .ifPresent(type -> queryConfig.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); + + manageDistUIState.getLastSelectedDistribution() + .ifPresent(distIdName -> queryConfig.put(SPUIDefinitions.ORDER_BY_DISTRIBUTION, distIdName.getId())); + + return queryConfig; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTable#addContainerProperties(com. - * vaadin.data.Container) - */ @Override protected void addContainerProperties(final Container container) { final LazyQueryContainer lazyContainer = (LazyQueryContainer) container; @@ -220,11 +204,6 @@ public class SwModuleTable extends AbstractTable { lazyContainer.addContainerProperty(SPUILabelDefinitions.VAR_SOFT_TYPE_ID, Long.class, null, false, true); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTable#addCustomGeneratedColumns() - */ @Override protected void addCustomGeneratedColumns() { @@ -243,32 +222,16 @@ public class SwModuleTable extends AbstractTable { }); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTable#isFirstRowSelectedOnLoad() - */ @Override protected boolean isFirstRowSelectedOnLoad() { return manageDistUIState.getSelectedSoftwareModules().isEmpty(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTable#getItemIdToSelect() - */ @Override protected Object getItemIdToSelect() { return manageDistUIState.getSelectedSoftwareModules(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTable#isMaximized() - */ @Override protected boolean isMaximized() { return manageDistUIState.isSwModuleTableMaximized(); @@ -300,16 +263,9 @@ public class SwModuleTable extends AbstractTable { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTable#getTableVisibleColumns - * () - */ @Override protected List getTableVisibleColumns() { - final List columnList = new ArrayList(); + final List columnList = new ArrayList<>(); if (isMaximized()) { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F)); @@ -364,11 +320,6 @@ public class SwModuleTable extends AbstractTable { } - /** - * @param color - * @param isAssigned - * @return - */ private String getTableStyle(final Long typeId, final boolean isAssigned, final String color) { if (isAssigned) { addTypeStyle(typeId, color); @@ -385,11 +336,6 @@ public class SwModuleTable extends AbstractTable { + "{background-color:" + color + " !important;background-image:none !important }"))); } - /** - * @param itemId - * @param propertyId - * @return - */ private String createTableStyle(final Object itemId, final Object propertyId) { if (null == propertyId) { final Item item = getItem(itemId); @@ -423,12 +369,6 @@ public class SwModuleTable extends AbstractTable { return name + "." + version; } - /** - * Add new software module to table. - * - * @param swModule - * new software module - */ @SuppressWarnings("unchecked") private void addSoftwareModule(final SoftwareModule swModule) { final Object addItem = addItem(); @@ -455,11 +395,6 @@ public class SwModuleTable extends AbstractTable { select(swModule.getId()); } - /** - * @param itemId - * @param nameVersionStr - * @return - */ private void showArtifactDetailsWindow(final Long itemId, final String nameVersionStr) { final Window atrifactDtlsWindow = new Window(); atrifactDtlsWindow.setCaption(HawkbitCommonUtil.getArtifactoryDetailsLabelId(nameVersionStr)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java index 1eae1297b..56d7706fc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java @@ -36,9 +36,6 @@ import com.vaadin.ui.Window; /** * Implementation of software module Header block using generic abstract details * style . - * - * - * */ @SpringComponent @ViewScope @@ -61,9 +58,7 @@ public class SwModuleTableHeader extends AbstractTableHeader { @Autowired private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow; - /** - * Initialize the components. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -82,45 +77,21 @@ public class SwModuleTableHeader extends AbstractTableHeader { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getHeaderCaption - * () - */ @Override protected String getHeaderCaption() { return i18n.get("upload.swModuleTable.header"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getSearchBoxId() - */ @Override protected String getSearchBoxId() { return SPUIComponetIdProvider.SW_MODULE_SEARCH_TEXT_FIELD; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#getSearchRestIconId() - */ @Override protected String getSearchRestIconId() { return SPUIComponetIdProvider.SW_MODULE_SEARCH_RESET_ICON; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getAddIconId() - */ @Override protected String getAddIconId() { return SPUIComponetIdProvider.SW_MODULE_ADD_BUTTON; @@ -134,97 +105,47 @@ public class SwModuleTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getDropFilterId( - * ) - */ @Override protected String getDropFilterId() { /* not required */ return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isDropHintRequired() - */ @Override protected boolean isDropHintRequired() { - /* not required */ return false; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#isDropFilterRequired() - */ @Override protected boolean isDropFilterRequired() { /* Not Yet Implemented */ return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader# - * getShowFilterButtonLayoutId() - */ @Override protected String getShowFilterButtonLayoutId() { return "show.type.icon"; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#showFilterButtonsLayout - * () - */ @Override protected void showFilterButtonsLayout() { manageDistUIState.setSwTypeFilterClosed(false); eventbus.publish(this, DistributionsUIEvent.SHOW_SM_FILTER_BY_TYPE); - } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#resetSearchText( - * ) - */ @Override protected void resetSearchText() { - manageDistUIState.getSoftwareModuleFilters().setSearchText(null); - eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + if (manageDistUIState.getSoftwareModuleFilters().getSearchText().isPresent()) { + manageDistUIState.getSoftwareModuleFilters().setSearchText(null); + eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getMaxMinIconId( - * ) - */ @Override protected String getMaxMinIconId() { return SPUIComponetIdProvider.SW_MAX_MIN_TABLE_ICON; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#maximizeTable() - */ @Override public void maximizeTable() { manageDistUIState.setSwModuleTableMaximized(Boolean.TRUE); @@ -232,58 +153,28 @@ public class SwModuleTableHeader extends AbstractTableHeader { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#minimizeTable() - */ @Override public void minimizeTable() { manageDistUIState.setSwModuleTableMaximized(Boolean.FALSE); eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null)); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#onLoadIsTableMaximized( - * ) - */ @Override public Boolean onLoadIsTableMaximized() { return manageDistUIState.isSwModuleTableMaximized(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader# - * onLoadIsShowFilterButtonDisplayed() - */ @Override public Boolean onLoadIsShowFilterButtonDisplayed() { return manageDistUIState.isSwTypeFilterClosed(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#searchBy(java.lang. - * String) - */ @Override protected void searchBy(final String newSearchText) { manageDistUIState.getSoftwareModuleFilters().setSearchText(newSearchText); eventbus.publish(this, SMFilterEvent.FILTER_BY_TEXT); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#addNewItem(com.vaadin. - * ui.Button.ClickEvent) - */ @Override protected void addNewItem(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow.createAddSoftwareModuleWindow(); @@ -292,22 +183,11 @@ public class SwModuleTableHeader extends AbstractTableHeader { addSoftwareModule.setVisible(Boolean.TRUE); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.SPTableHeader#hasCreatePermission() - */ @Override protected boolean hasCreatePermission() { return permChecker.hasCreateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isAddNewItemAllowed() - */ @Override protected Boolean isAddNewItemAllowed() { return true; @@ -328,47 +208,21 @@ public class SwModuleTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getBulkUploadIconId() - */ @Override protected String getBulkUploadIconId() { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com. - * vaadin.ui.Button.ClickEvent ) - */ @Override protected void bulkUpload(final ClickEvent event) { - /** - * No implementation as no bulk upload is supported. - */ + // No implementation as no bulk upload is supported. } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isBulkUploadAllowed() - */ @Override protected Boolean isBulkUploadAllowed() { return Boolean.FALSE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader# - * isBulkUploadInProgress() - */ @Override protected boolean isBulkUploadInProgress() { return false; 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 18fafad2d..d3251cf9b 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 @@ -40,8 +40,6 @@ import com.vaadin.spring.annotation.ViewScope; /** * Software Module Type filter buttons. * - * - * */ @SpringComponent @ViewScope @@ -58,46 +56,24 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { @Autowired private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria; - /** - * Initialize component. - * - * @param filterButtonClickBehaviour - * the clickable behaviour. - */ + @Override public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); eventBus.subscribe(this); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButtonsTableId() - */ @Override protected String getButtonsTableId() { - return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonsLazyQueryContainer () - */ @Override protected LazyQueryContainer createButtonsLazyQueryContainer() { - final Map queryConfig = new HashMap(); - final BeanQueryFactory typeQF = new BeanQueryFactory( + final Map queryConfig = new HashMap<>(); + final BeanQueryFactory typeQF = new BeanQueryFactory<>( SoftwareModuleTypeBeanQuery.class); typeQF.setQueryConfiguration(queryConfig); - final LazyQueryContainer lazyQueryContainer = new LazyQueryContainer( - new LazyQueryDefinition(true, 20, SPUILabelDefinitions.VAR_NAME), typeQF); - return lazyQueryContainer; + return new LazyQueryContainer(new LazyQueryDefinition(true, 20, SPUILabelDefinitions.VAR_NAME), typeQF); } @Override @@ -105,13 +81,6 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * isClickedByDefault(java.lang .Long) - */ @Override protected boolean isClickedByDefault(final Long buttonId) { @@ -119,25 +88,11 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { && manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonId(java.lang. String) - */ @Override protected String createButtonId(final String name) { return SPUIComponetIdProvider.SM_TYPE_FILTER_BTN_ID + name; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getFilterButtonDropHandler() - */ @Override protected DropHandler getFilterButtonDropHandler() { @@ -156,16 +111,8 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { }; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButttonWrapperId() - */ @Override protected String getButttonWrapperIdPrefix() { - return SPUIDefinitions.SOFTWARE_MODULE_TAG_ID_PREFIXS; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java index 316d30f64..edf20b206 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java @@ -29,9 +29,6 @@ import com.vaadin.ui.Window; /** * Software Module Type filter buttons header. - * - * - * */ @SpringComponent @ViewScope @@ -51,9 +48,7 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader { @Autowired private CreateUpdateSoftwareTypeLayout createUpdateSWTypeLayout; - /** - * Initialize the components. - */ + @Override @PostConstruct public void init() { super.init(); @@ -62,50 +57,21 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getHideButtonId() - */ @Override protected String getHideButtonId() { return SPUIComponetIdProvider.SM_SHOW_FILTER_BUTTON_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hasCreateUpdatePermission() - */ @Override protected boolean hasCreateUpdatePermission() { - return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle( - * ) - */ @Override protected String getTitle() { - return SPUILabelDefinitions.TYPE; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * settingsIconClicked(com.vaadin .ui.Button.ClickEvent) - */ @Override protected void settingsIconClicked(final ClickEvent event) { final Window addUpdateWindow = createUpdateSWTypeLayout.getWindow(); @@ -114,51 +80,22 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * dropHitsRequired() - */ @Override protected boolean dropHitsRequired() { - return false; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hideFilterButtonLayout() - */ @Override protected void hideFilterButtonLayout() { manageDistUIState.setSwTypeFilterClosed(true); eventBus.publish(this, DistributionsUIEvent.HIDE_SM_FILTER_BY_TYPE); - } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getConfigureFilterButtonId() - */ @Override protected String getConfigureFilterButtonId() { return SPUIDefinitions.ADD_SOFTWARE_MODULE_TYPE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader# - * isAddTagRequired() - */ @Override protected boolean isAddTagRequired() { return true; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java index 7dbfafa7d..c63393fac 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java @@ -20,8 +20,6 @@ import com.vaadin.spring.annotation.VaadinSessionScope; /** * Distribution table filter state. - * - * */ @SpringComponent @VaadinSessionScope @@ -31,9 +29,9 @@ public class ManageDistFilters implements Serializable { private String searchText; - private List distSetTags = new ArrayList(); + private List distSetTags = new ArrayList<>(); - private List clickedDistSetTags = new ArrayList(); + private List clickedDistSetTags = new ArrayList<>(); private DistributionSetType clickedDistSetType; @@ -61,17 +59,10 @@ public class ManageDistFilters implements Serializable { this.clickedDistSetTags = clickedDistSetTags; } - /** - * @return the searchText - */ public Optional getSearchText() { return searchText == null ? Optional.empty() : Optional.of(searchText); } - /** - * @param searchText - * the searchText to set - */ public void setSearchText(final String searchText) { this.searchText = searchText; } 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 7dbe3467e..9c50640cd 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 @@ -34,7 +34,6 @@ import com.google.common.base.Strings; * * */ - public class TargetFilterBeanQuery extends AbstractBeanQuery { private static final long serialVersionUID = 1845964596238990987L; @@ -76,8 +75,8 @@ public class TargetFilterBeanQuery extends AbstractBeanQuery @Override protected List loadBeans(final int startIndex, final int count) { - Slice targetFilterQuery = null; - final List proxyTargetFilter = new ArrayList(); + Slice targetFilterQuery; + final List proxyTargetFilter = new ArrayList<>(); if (startIndex == 0 && firstPageTargetFilter != null) { targetFilterQuery = firstPageTargetFilter; } else if (Strings.isNullOrEmpty(searchText)) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java index a251521f5..17bfefe56 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java @@ -41,7 +41,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.server.FontAwesome; -import com.vaadin.server.Sizeable.Unit; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button; @@ -84,20 +83,20 @@ public class TargetFilterTable extends Table { * Initialize the Action History Table. */ @PostConstruct - public void init() { - setStyleName("sp-table"); - setSizeFull(); - setImmediate(true); - setHeight(100.0f, Unit.PERCENTAGE); - addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); - addStyleName(ValoTheme.TABLE_SMALL); - addCustomGeneratedColumns(); - populateTableData(); - setColumnCollapsingAllowed(true); - setColumnProperties(); - setId(SPUIComponetIdProvider.TAEGET_FILTER_TABLE_ID); - eventBus.subscribe(this); - } + public void init() { + setStyleName("sp-table"); + setSizeFull(); + setImmediate(true); + setHeight(100.0f, Unit.PERCENTAGE); + addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); + addStyleName(ValoTheme.TABLE_SMALL); + addCustomGeneratedColumns(); + populateTableData(); + setColumnCollapsingAllowed(true); + setColumnProperties(); + setId(SPUIComponetIdProvider.TAEGET_FILTER_TABLE_ID); + eventBus.subscribe(this); + } @PreDestroy void destroy() { @@ -114,20 +113,14 @@ public class TargetFilterTable extends Table { } } - /** - * Create a empty HierarchicalContainer. - * - * - */ private Container createContainer() { final Map queryConfig = prepareQueryConfigFilters(); - final BeanQueryFactory targetQF = new BeanQueryFactory( - TargetFilterBeanQuery.class); + final BeanQueryFactory targetQF = new BeanQueryFactory<>(TargetFilterBeanQuery.class); targetQF.setQueryConfiguration(queryConfig); // create lazy query container with lazy defination and query - final LazyQueryContainer targetFilterContainer = new LazyQueryContainer(new LazyQueryDefinition(true, - SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), targetQF); + final LazyQueryContainer targetFilterContainer = new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), targetQF); targetFilterContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); return targetFilterContainer; @@ -135,15 +128,12 @@ public class TargetFilterTable extends Table { } private Map prepareQueryConfigFilters() { - final Map queryConfig = new HashMap(); - filterManagementUIState.getCustomFilterSearchText().ifPresent( - value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + final Map queryConfig = new HashMap<>(); + filterManagementUIState.getCustomFilterSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); return queryConfig; } - /** - * Create a empty HierarchicalContainer. - */ private void addContainerproperties() { /* Create HierarchicalContainer container */ container.addContainerProperty(SPUILabelDefinitions.NAME, Link.class, null); @@ -154,7 +144,7 @@ public class TargetFilterTable extends Table { } private List getVisbleColumns() { - final List columnList = new ArrayList(); + final List columnList = new ArrayList<>(); columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_USER, i18n.get("header.createdBy"), 0.15F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.2F)); @@ -165,7 +155,6 @@ public class TargetFilterTable extends Table { } - /* re -create the container and get the data and set it to the table */ private void refreshContainer() { populateTableData(); @@ -187,10 +176,6 @@ public class TargetFilterTable extends Table { .toString(); } - /** - * @param event - * @return - */ private void onDelete(final ClickEvent event) { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.filter.delete.confirmbox"), @@ -206,8 +191,8 @@ public class TargetFilterTable extends Table { * of the deleted custom filter. */ - notification.displaySuccess(i18n.get("message.delete.filter.success", - new Object[] { deletedFilterName })); + notification.displaySuccess( + i18n.get("message.delete.filter.success", new Object[] { deletedFilterName })); refreshContainer(); } }); @@ -236,10 +221,6 @@ public class TargetFilterTable extends Table { return updateIcon; } - /** - * @param event - * @return - */ private void onClickOfDetailButton(final ClickEvent event) { final String targetFilterName = (String) ((Button) event.getComponent()).getData(); final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement 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 e3b84aac6..df9d8a60d 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 @@ -202,16 +202,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { hierarchicalContainer.addContainerProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, String.class, null); } - /** - * Get Action based on status. - * - * @param type - * as Action.Type - * - * @return List of Actions - */ private List getVisbleColumns() { - final List visibleColumnIds = new ArrayList(); + final List visibleColumnIds = new ArrayList<>(); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DIST); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DATETIME); 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 f3b68bce6..7b49ddcb2 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 @@ -96,7 +96,7 @@ public class DistributionBeanQuery extends AbstractBeanQuery @Override protected List loadBeans(final int startIndex, final int count) { Page distBeans; - final List proxyDistributions = new ArrayList(); + final List proxyDistributions = new ArrayList<>(); if (startIndex == 0 && firstPageDistributionSets != null) { distBeans = firstPageDistributionSets; } else if (pinnedControllerId != null) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java index 54d549055..ecc4a26c6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java @@ -39,9 +39,6 @@ import com.vaadin.ui.Window; /** * Distribution set details layout. - * - * - * */ @SpringComponent @ViewScope @@ -75,9 +72,7 @@ public class DistributionDetails extends AbstractTableDetailsLayout { private UI ui; - /** - * softwareLayout Initialize the component. - */ + @Override @PostConstruct protected void init() { eventBus.subscribe(this); @@ -116,23 +111,11 @@ public class DistributionDetails extends AbstractTableDetailsLayout { } } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getDefaultCaption() - */ @Override protected String getDefaultCaption() { return i18n.get("distribution.details.header"); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * addTabs(com.vaadin. ui.TabSheet) - */ @Override protected void addTabs(final TabSheet detailsTab) { detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); @@ -142,12 +125,6 @@ public class DistributionDetails extends AbstractTableDetailsLayout { detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * onEdit(com.vaadin.ui .Button.ClickEvent) - */ @Override protected void onEdit(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); @@ -157,79 +134,37 @@ public class DistributionDetails extends AbstractTableDetailsLayout { newDistWindow.setVisible(Boolean.TRUE); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getEditButtonId() - */ @Override protected String getEditButtonId() { return SPUIComponetIdProvider.DS_EDIT_BUTTON; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * onLoadIsTableRowSelected () - */ @Override protected Boolean onLoadIsTableRowSelected() { return !(managementUIState.getSelectedDsIdName().isPresent() && managementUIState.getSelectedDsIdName().get().isEmpty()); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * onLoadIsTableMaximized () - */ @Override protected Boolean onLoadIsTableMaximized() { return managementUIState.isDsTableMaximized(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * populateDetailsWidget() - */ @Override protected void populateDetailsWidget() { populateDetailsWidget(selectedDsModule); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * clearDetails() - */ @Override protected void clearDetails() { populateDetailsWidget(null); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * hasEditPermission() - */ @Override protected Boolean hasEditPermission() { return permissionChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getTabSheetId() - */ @Override protected String getTabSheetId() { return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java index 225407b84..4f4aa8b2f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java @@ -73,9 +73,6 @@ import com.vaadin.ui.UI; /** * Distribution set table. - * - * - * */ @SpringComponent @ViewScope @@ -113,9 +110,7 @@ public class DistributionTable extends AbstractTable { private Button distributinPinnedBtn; - /** - * Initialize the distribution table. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -219,44 +214,37 @@ public class DistributionTable extends AbstractTable { */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap(); + final Map queryConfiguration = prepareQueryConfigFilters(); + + final BeanQueryFactory distributionQF = new BeanQueryFactory<>( + DistributionBeanQuery.class); + distributionQF.setQueryConfiguration(queryConfiguration); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), + distributionQF); + } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap<>(); managementUIState.getDistributionTableFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); managementUIState.getDistributionTableFilters().getPinnedTargetId() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.ORDER_BY_PINNED_TARGET, value)); - final List list = new ArrayList(); - queryConfiguration.put(SPUIDefinitions.FILTER_BY_NO_TAG, + .ifPresent(value -> queryConfig.put(SPUIDefinitions.ORDER_BY_PINNED_TARGET, value)); + final List list = new ArrayList<>(); + queryConfig.put(SPUIDefinitions.FILTER_BY_NO_TAG, managementUIState.getDistributionTableFilters().isNoTagSelected()); if (!managementUIState.getDistributionTableFilters().getDistSetTags().isEmpty()) { list.addAll(managementUIState.getDistributionTableFilters().getDistSetTags()); } - queryConfiguration.put(SPUIDefinitions.FILTER_BY_TAG, list); - final BeanQueryFactory distributionQF = new BeanQueryFactory( - DistributionBeanQuery.class); - distributionQF.setQueryConfiguration(queryConfiguration); - final LazyQueryContainer distributionContainer = new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), - distributionQF); - return distributionContainer; + queryConfig.put(SPUIDefinitions.FILTER_BY_TAG, list); + return queryConfig; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#addContainerProperties( - * com.vaadin.data.Container ) - */ @Override protected void addContainerProperties(final Container container) { HawkbitCommonUtil.getDsTableColumnProperties(container); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable# - * addCustomGeneratedColumns() - */ @Override protected void addCustomGeneratedColumns() { addGeneratedColumn(SPUILabelDefinitions.PIN_COLUMN, new Table.ColumnGenerator() { @@ -269,23 +257,12 @@ public class DistributionTable extends AbstractTable { }); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable# - * isFirstRowSelectedOnLoad() - */ @Override protected boolean isFirstRowSelectedOnLoad() { return !managementUIState.getSelectedDsIdName().isPresent() || managementUIState.getSelectedDsIdName().get().isEmpty(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getItemIdToSelect() - */ @Override protected Object getItemIdToSelect() { if (managementUIState.getSelectedDsIdName().isPresent()) { @@ -294,16 +271,9 @@ public class DistributionTable extends AbstractTable { return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#onValueChange() - */ @Override protected void onValueChange() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - @SuppressWarnings("unchecked") final Set values = HawkbitCommonUtil.getSelectedDSDetails(this); DistributionSetIdName value = null; if (values != null && !values.isEmpty()) { @@ -312,10 +282,7 @@ public class DistributionTable extends AbstractTable { while (iterator.hasNext()) { value = iterator.next(); } - /** - * Adding null check to make to avoid NPE.Its weird that at times - * getValue returns null. - */ + if (null != value) { managementUIState.setSelectedDsIdName(values); managementUIState.setLastSelectedDsIdName(value); @@ -332,33 +299,16 @@ public class DistributionTable extends AbstractTable { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#isMaximized() - */ @Override protected boolean isMaximized() { return managementUIState.isDsTableMaximized(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getTableVisibleColumns( - * ) - */ @Override protected List getTableVisibleColumns() { return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), true, i18n); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getTableDropHandler() - */ @Override protected DropHandler getTableDropHandler() { return new DropHandler() { @@ -396,7 +346,7 @@ public class DistributionTable extends AbstractTable { final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); final Table distTable = (Table) taregtDet.getTarget(); final Set distsSelected = HawkbitCommonUtil.getSelectedDSDetails(distTable); - final Set distList = new HashSet(); + final Set distList = new HashSet<>(); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); final Object distItemId = dropData.getItemIdOver(); @@ -428,7 +378,7 @@ public class DistributionTable extends AbstractTable { // assign dist to those targets final List assignedTargets = targetService.findTargetsByTag(targetTagName); if (!assignedTargets.isEmpty()) { - final Set targetDetailsList = new HashSet(); + final Set targetDetailsList = new HashSet<>(); assignedTargets.forEach(target -> targetDetailsList .add(new TargetIdName(target.getId(), target.getControllerId(), target.getName()))); assignTargetToDs(getItem(distItemId), targetDetailsList); @@ -441,7 +391,7 @@ public class DistributionTable extends AbstractTable { final TableTransferable transferable = (TableTransferable) event.getTransferable(); final Table source = transferable.getSourceComponent(); final Set targetsSelected = HawkbitCommonUtil.getSelectedTargetDetails(source); - final Set targetDetailsList = new HashSet(); + final Set targetDetailsList = new HashSet<>(); if (!targetsSelected.contains(transferable.getData("itemId"))) { targetDetailsList.add((TargetIdName) transferable.getData("itemId")); @@ -467,13 +417,6 @@ public class DistributionTable extends AbstractTable { } } - /** - * Validate event. - * - * @param dragEvent - * as event - * @return boolean as flag - */ private Boolean doValidation(final DragAndDropEvent dragEvent) { final Component compsource = dragEvent.getTransferable().getSourceComponent(); if (compsource instanceof Table) { @@ -521,15 +464,6 @@ public class DistributionTable extends AbstractTable { return false; } - /** - * Validate the assignment. - * - * @param targetDetailsList - * @param source - * @param distId - * @param distName - * @return String as indicator - */ private String validate(final Set targetDetailsList, final DistributionSetIdName distributionSetIdName) { String pendingActionMessage = null; @@ -548,17 +482,6 @@ public class DistributionTable extends AbstractTable { return pendingActionMessage; } - /** - * Message for Pending Action. - * - * @param message - * as msg - * @param targId - * as ID - * @param distName - * as Dist Set Name - * @return String as message - */ private String getPendingActionMessage(final String message, final String targId, final String distNameVersion) { String pendActionMsg = i18n.get("message.target.assigned.pending"); if (null == message) { @@ -567,12 +490,6 @@ public class DistributionTable extends AbstractTable { return pendActionMsg; } - /** - * Show or Hide Popup Notification Message. - * - * @param message - * as msg - */ private void showOrHidePopupAndNotification(final String message) { if (null != managementUIState.getAssignedList() && !managementUIState.getAssignedList().isEmpty()) { eventBus.publish(this, ManagementUIEvent.UPDATE_COUNT); @@ -629,19 +546,6 @@ public class DistributionTable extends AbstractTable { } } - /** - * Added by Saumya Get Pin style. - * - * @param itemId - * as item clicked - * @param propertyId - * as property - * @param installedDistItemIds - * as set - * @param assignedDistTableItemIds - * as set - * @return String as Style - */ private String getPinnedDistributionStyle(final Long installedDistItemIds, final Long assignedDistTableItemIds, final Object itemId) { final Long distId = ((DistributionSetIdName) itemId).getId(); @@ -655,10 +559,6 @@ public class DistributionTable extends AbstractTable { } } - /** - * @param itemId - * @return - */ private Object getPinButton(final Object itemId) { final DistributionSetIdName dist = (DistributionSetIdName) getContainerDataSource().getItem(itemId) .getItemProperty(SPUILabelDefinitions.VAR_DIST_ID_NAME).getValue(); @@ -677,12 +577,6 @@ public class DistributionTable extends AbstractTable { } } - /** - * Add listener to pin. - * - * @param pinBtn - * as event - */ private void addPinClickListener(final ClickEvent event) { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); checkifAlreadyPinned(event.getButton()); @@ -694,12 +588,6 @@ public class DistributionTable extends AbstractTable { } - /** - * Check already pinned. - * - * @param eventBtn - * as button - */ private void checkifAlreadyPinned(final Button eventBtn) { final Long newPinnedDistItemId = ((DistributionSetIdName) eventBtn.getData()).getId(); Long pinnedDistId = null; @@ -751,9 +639,6 @@ public class DistributionTable extends AbstractTable { } } - /** - * set style to distribution set table. - */ private void styleDistributionSetTable() { setCellStyleGenerator(new Table.CellStyleGenerator() { private static final long serialVersionUID = 1L; @@ -765,12 +650,6 @@ public class DistributionTable extends AbstractTable { }); } - /** - * Apply pin style to pin. - * - * @param eventBtn - * as button - */ private void applyPinStyle(final Button eventBtn) { final StringBuilder style = new StringBuilder(SPUIComponentProvider.getPinButtonStyle()); style.append(' ').append(SPUIStyleDefinitions.DIST_PIN).append(' ').append("tablePin").append(' ') @@ -815,14 +694,9 @@ public class DistributionTable extends AbstractTable { * @param assignedDistTableItemIds * Item ids of assigned distribution set */ - @SuppressWarnings("serial") public void styleDistributionSetTable(final Long installedDistItemId, final Long assignedDistTableItemId) { - setCellStyleGenerator(new Table.CellStyleGenerator() { - @Override - public String getStyle(final Table source, final Object itemId, final Object propertyId) { - return getPinnedDistributionStyle(installedDistItemId, assignedDistTableItemId, itemId); - } - }); + setCellStyleGenerator((source, itemId, propertyId) -> getPinnedDistributionStyle(installedDistItemId, + assignedDistTableItemId, itemId)); } public void setDistributinPinnedBtn(final Button distributinPinnedBtn) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java index 1f28293d2..d2ac628a8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java @@ -58,9 +58,7 @@ public class DistributionTableHeader extends AbstractTableHeader { @Autowired private DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout; - /** - * Initialize the component. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -81,54 +79,26 @@ public class DistributionTableHeader extends AbstractTableHeader { } } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getHeaderCaption( - * ) - */ @Override protected String getHeaderCaption() { return i18n.get("header.dist.table"); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getSearchBoxId() - */ @Override protected String getSearchBoxId() { return SPUIComponetIdProvider.DIST_SEARCH_TEXTFIELD; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getSearchRestIconId() - */ @Override protected String getSearchRestIconId() { return SPUIComponetIdProvider.DIST_SEARCH_ICON; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getAddIconId() - */ @Override protected String getAddIconId() { return SPUIComponetIdProvider.DIST_ADD_ICON; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * onLoadSearchBoxValue() - */ @Override protected String onLoadSearchBoxValue() { if (managementUIState.getDistributionTableFilters().getSearchText().isPresent()) { @@ -137,155 +107,78 @@ public class DistributionTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getDropFilterId() - */ @Override protected String getDropFilterId() { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * hasCreatePermission() - */ @Override protected boolean hasCreatePermission() { return permChecker.hasCreateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isDropHintRequired() - */ @Override protected boolean isDropHintRequired() { return true; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isDropFilterRequired() - */ @Override protected boolean isDropFilterRequired() { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getShowFilterButtonLayoutId() - */ @Override protected String getShowFilterButtonLayoutId() { return "show.dist.tags.icon"; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * showFilterButtonsLayout() - */ @Override protected void showFilterButtonsLayout() { managementUIState.setDistTagFilterClosed(false); eventbus.publish(this, ManagementUIEvent.SHOW_DISTRIBUTION_TAG_LAYOUT); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#resetSearchText() - */ @Override protected void resetSearchText() { - managementUIState.getDistributionTableFilters().setSearchText(null); - eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); + if (managementUIState.getDistributionTableFilters().getSearchText().isPresent()) { + managementUIState.getDistributionTableFilters().setSearchText(null); + eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); + } } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#getMaxMinIconId() - */ @Override protected String getMaxMinIconId() { return SPUIComponetIdProvider.DS_MAX_MIN_TABLE_ICON; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#maximizeTable() - */ @Override public void maximizeTable() { managementUIState.setDsTableMaximized(Boolean.TRUE); eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MAXIMIZED, null)); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#minimizeTable() - */ @Override public void minimizeTable() { managementUIState.setDsTableMaximized(Boolean.FALSE); eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MINIMIZED, null)); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * onLoadIsTableMaximized() - */ @Override public Boolean onLoadIsTableMaximized() { return managementUIState.isDsTableMaximized(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * onLoadIsShowFilterButtonDisplayed() - */ @Override public Boolean onLoadIsShowFilterButtonDisplayed() { return managementUIState.isDistTagFilterClosed(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#searchBy(java. - * lang.String) - */ @Override protected void searchBy(final String newSearchText) { managementUIState.getDistributionTableFilters().setSearchText(newSearchText); eventbus.publish(this, DistributionTableFilterEvent.FILTER_BY_TEXT); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#addNewItem(com. - * vaadin.ui.Button.ClickEvent ) - */ @Override protected void addNewItem(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); @@ -295,12 +188,6 @@ public class DistributionTableHeader extends AbstractTableHeader { eventbus.publish(this, DragEvent.HIDE_DROP_HINT); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isAddNewItemAllowed() - */ @Override protected Boolean isAddNewItemAllowed() { return Boolean.FALSE; @@ -321,47 +208,21 @@ public class DistributionTableHeader extends AbstractTableHeader { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getBulkUploadIconId() - */ @Override protected String getBulkUploadIconId() { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com. - * vaadin.ui.Button.ClickEvent ) - */ @Override protected void bulkUpload(final ClickEvent event) { - /** - * No implementation as no bulk upload is supported. - */ + // No implementation as no bulk upload is supported. } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * isBulkUploadAllowed() - */ @Override protected Boolean isBulkUploadAllowed() { return Boolean.FALSE; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader# - * isBulkUploadInProgress() - */ @Override protected boolean isBulkUploadInProgress() { return false; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java index 1df06e603..8be9548f7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java @@ -75,7 +75,7 @@ public class DistributionTagBeanQuery extends AbstractBeanQuery { @Override protected List loadBeans(final int startIndex, final int count) { Page dsTagBeans; - final List tagList = new ArrayList(); + final List tagList = new ArrayList<>(); if (startIndex == 0 && firstPageDsTag != null) { dsTagBeans = firstPageDsTag; } else { 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 9866ba577..98c48d235 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 @@ -64,12 +64,7 @@ public class DistributionTagButtons extends AbstractFilterButtons { @Autowired private ManagementUIState managementUIState; - /** - * Initialize component. - * - * @param filterButtonClickBehaviour - * the clickable behaviour. - */ + @Override public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); addNewTag(new DistributionSetTag("NO TAG")); @@ -98,7 +93,6 @@ public class DistributionTagButtons extends AbstractFilterButtons { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DragEvent dragEvent) { - if (dragEvent == DragEvent.DISTRIBUTION_DRAG) { UI.getCurrent().access(() -> addStyleName(SPUIStyleDefinitions.SHOW_DROP_HINT_FILTER_BUTTON)); } else { @@ -106,34 +100,18 @@ public class DistributionTagButtons extends AbstractFilterButtons { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButtonsTableId() - */ @Override protected String getButtonsTableId() { return SPUIComponetIdProvider.DISTRIBUTION_TAG_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonsLazyQueryContainer () - */ @Override protected LazyQueryContainer createButtonsLazyQueryContainer() { - final Map queryConfig = new HashMap(); - final BeanQueryFactory tagQF = new BeanQueryFactory( - DistributionTagBeanQuery.class); + final Map queryConfig = new HashMap<>(); + final BeanQueryFactory tagQF = new BeanQueryFactory<>(DistributionTagBeanQuery.class); tagQF.setQueryConfiguration(queryConfig); - final LazyQueryContainer tagContainer = HawkbitCommonUtil.createDSLazyQueryContainer( + return HawkbitCommonUtil.createDSLazyQueryContainer( new BeanQueryFactory(DistributionTagBeanQuery.class)); - return tagContainer; } @@ -142,13 +120,6 @@ public class DistributionTagButtons extends AbstractFilterButtons { return SPUIDefinitions.DISTRIBUTION_TAG_BUTTON; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * isClickedByDefault(java.lang .Long) - */ @Override protected boolean isClickedByDefault(final Long buttonId) { final DistributionSetTag dsTagObject = tagMgmtService.findDistributionSetTagById(buttonId); @@ -161,37 +132,16 @@ public class DistributionTagButtons extends AbstractFilterButtons { return managementUIState.getDistributionTableFilters().isNoTagSelected(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonId(java.lang. String) - */ @Override protected String createButtonId(final String name) { return name; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getFilterButtonDropHandler() - */ @Override protected DropHandler getFilterButtonDropHandler() { return spDistTagDropEvent; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButttonWrapperId() - */ @Override protected String getButttonWrapperIdPrefix() { return SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java index 5e19e05f8..2d58849dc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java @@ -50,9 +50,7 @@ public class DistributionTagHeader extends AbstractFilterHeader { @Autowired private CreateUpdateDistributionTagLayoutWindow createORUpdateDistributionTagLayout; - /** - * Initialize the components. - */ + @Override @PostConstruct public void init() { super.init(); @@ -61,100 +59,45 @@ public class DistributionTagHeader extends AbstractFilterHeader { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getHideButtonId() - */ @Override protected String getHideButtonId() { return "hide.distribution.tags"; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hasCreateUpdatePermission() - */ @Override protected boolean hasCreateUpdatePermission() { return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle( - * ) - */ @Override protected String getTitle() { return i18n.get("header.filter.tag", new Object[] {}); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * settingsIconClicked(com.vaadin .ui.Button.ClickEvent) - */ @Override protected void settingsIconClicked(final ClickEvent event) { final Window addUpdateWindow = createORUpdateDistributionTagLayout.getWindow(); UI.getCurrent().addWindow(addUpdateWindow); addUpdateWindow.setModal(true); addUpdateWindow.setVisible(Boolean.TRUE); - } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * dropHitsRequired() - */ @Override protected boolean dropHitsRequired() { return true; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hideFilterButtonLayout() - */ @Override protected void hideFilterButtonLayout() { managementUIState.setDistTagFilterClosed(true); eventbus.publish(this, ManagementUIEvent.HIDE_DISTRIBUTION_TAG_LAYOUT); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getConfigureFilterButtonId() - */ @Override protected String getConfigureFilterButtonId() { return SPUIComponetIdProvider.ADD_DISTRIBUTION_TAG; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader# - * isAddTagRequired() - */ @Override protected boolean isAddTagRequired() { return true; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java index c87a5eec9..21013a55e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java @@ -86,20 +86,13 @@ public class DistributionTagDropEvent implements DropHandler { private Boolean isNoTagAssigned(final DragAndDropEvent event) { final String tagName = ((DragAndDropWrapper) (event.getTargetDetails().getTarget())).getData().toString(); if (tagName.equals(SPUIDefinitions.DISTRIBUTION_TAG_BUTTON)) { - notification.displayValidationError(i18n.get("message.tag.cannot.be.assigned", - new Object[] { i18n.get("label.no.tag.assigned") })); + notification.displayValidationError( + i18n.get("message.tag.cannot.be.assigned", new Object[] { i18n.get("label.no.tag.assigned") })); return false; } return true; } - /** - * Validate the drop. - * - * @param event - * DragAndDropEvent reference - * @return Boolean - */ private Boolean validate(final DragAndDropEvent event) { final Component compsource = event.getTransferable().getSourceComponent(); if (!(compsource instanceof Table)) { @@ -116,11 +109,6 @@ public class DistributionTagDropEvent implements DropHandler { return true; } - /** - * validate the update permission. - * - * @return boolean - */ private boolean checkForDSUpdatePermission() { if (!permChecker.hasUpdateDistributionPermission()) { @@ -131,13 +119,6 @@ public class DistributionTagDropEvent implements DropHandler { return true; } - /** - * validate the source tables. - * - * @param source - * table - * @return boolean - */ private boolean validateIfSourceIsDs(final Table source) { if (!source.getId().equals(SPUIComponetIdProvider.DIST_TABLE_ID)) { notification.displayValidationError(i18n.get(SPUILabelDefinitions.ACTION_NOT_ALLOWED)); @@ -146,12 +127,6 @@ public class DistributionTagDropEvent implements DropHandler { return true; } - /** - * Process target Drop event. - * - * @param event - * DragAndDropEvent - */ private void processDistributionDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); @@ -161,7 +136,7 @@ public class DistributionTagDropEvent implements DropHandler { @SuppressWarnings("unchecked") final Set distSelected = (Set) source.getValue(); - final Set distributionList = new HashSet(); + final Set distributionList = new HashSet<>(); if (!distSelected.contains(transferable.getData(ITEMID))) { distributionList.add(((DistributionSetIdName) transferable.getData(ITEMID)).getId()); } else { @@ -172,8 +147,8 @@ public class DistributionTagDropEvent implements DropHandler { SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); final List tagsClickedList = distFilterParameters.getDistSetTags(); - final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment( - distributionList, distTagName); + final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, + distTagName); notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n)); if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty()) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java index f5f890253..1c44014e8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java @@ -47,12 +47,6 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria { @Autowired private transient EventBus.SessionEventBus eventBus; - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.AbstractAcceptCriteria#analyseDragComponent - * (com.vaadin.event .dd.DragAndDropEvent, com.vaadin.ui.Component) - */ @Override protected void analyseDragComponent(final Component compsource) { final String sourceID = getComponentId(compsource); @@ -60,24 +54,11 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria { eventBus.publish(this, event); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#hideDropHints - * () - */ @Override protected void hideDropHints() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#invalidDrop() - */ @Override protected void invalidDrop() { uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); @@ -94,60 +75,31 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria { return id; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * getDropHintConfigurations() - */ @Override protected Map getDropHintConfigurations() { return DROP_HINTS_CONFIGS; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * publishDragStartEvent(java.lang.Object) - */ @Override protected void publishDragStartEvent(final Object event) { eventBus.publish(this, event); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria# - * getDropConfigurations() - */ @Override protected Map> getDropConfigurations() { return DROP_CONFIGS; } - /** - * @param id - * @return - */ private boolean isDistributionTagId(final String id) { return id != null && id.startsWith(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); } - /** - * @param id - * @return - */ private boolean isTargetTagId(final String id) { return id != null && id.startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS); } - /** - * @return - */ private static Map> createDropConfigurations() { - final Map> config = new HashMap>(); + final Map> config = new HashMap<>(); // Delete drop area acceptable components config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, @@ -174,7 +126,7 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria { } private static Map createDropHintConfigurations() { - final Map config = new HashMap(); + final Map config = new HashMap<>(); config.put(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, DragEvent.TARGET_TAG_DRAG); config.put(SPUIComponetIdProvider.TARGET_TABLE_ID, DragEvent.TARGET_DRAG); config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java index ec35463d7..1786429a1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; -import org.eclipse.hawkbit.ui.management.dstable.DistributionTable; import org.eclipse.hawkbit.ui.management.event.BulkUploadPopupEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -28,7 +27,6 @@ import org.eclipse.hawkbit.ui.management.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; -import org.eclipse.hawkbit.ui.management.targettable.TargetTable; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -85,12 +83,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { @Autowired private CountMessageLabel countMessageLabel; - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#init() - */ + @Override @PostConstruct protected void init() { super.init(); @@ -172,73 +165,31 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasDeletePermission() - */ @Override protected boolean hasDeletePermission() { return permChecker.hasDeleteDistributionPermission() || permChecker.hasDeleteTargetPermission(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasUpdatePermission() - */ @Override protected boolean hasUpdatePermission() { return permChecker.hasUpdateTargetPermission() && permChecker.hasReadDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getDeleteAreaLabel() - */ @Override protected String getDeleteAreaLabel() { return i18n.get("label.components.drop.area"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getDeleteAreaId() - */ @Override protected String getDeleteAreaId() { return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getDeleteLayoutAcceptCriteria () - */ @Override protected AcceptCriterion getDeleteLayoutAcceptCriteria() { return managementViewAcceptCriteria; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * processDroppedComponent(com .vaadin.event.dd.DragAndDropEvent) - */ @Override protected void processDroppedComponent(final DragAndDropEvent event) { final Component source = event.getTransferable().getSourceComponent(); @@ -275,61 +226,26 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return true; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getNoActionsButtonLabel() - */ @Override protected String getNoActionsButtonLabel() { return i18n.get("button.no.actions"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getActionsButtonLabel() - */ @Override protected String getActionsButtonLabel() { return i18n.get("button.actions"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * reloadActionCount() - */ @Override protected void restoreActionCount() { updateActionCount(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getUnsavedActionsWindowCaption () - */ @Override protected String getUnsavedActionsWindowCaption() { return i18n.get("caption.save.window"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * unsavedActionsWindowClosed() - */ @Override protected void unsavedActionsWindowClosed() { final String message = manangementConfirmationWindowLayout.getConsolidatedMessage(); @@ -338,26 +254,12 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getUnsavedActionsWindowContent () - */ @Override protected Component getUnsavedActionsWindowContent() { manangementConfirmationWindowLayout.init(); return manangementConfirmationWindowLayout; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasUnsavedActions() - */ @Override protected boolean hasUnsavedActions() { if (!managementUIState.getDeletedDistributionList().isEmpty() @@ -368,25 +270,11 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return false; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasCountMessage() - */ @Override protected boolean hasCountMessage() { return permChecker.hasTargetReadPermission(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getCountMessageLabel() - */ @Override protected Label getCountMessageLabel() { return countMessageLabel; @@ -413,19 +301,9 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } } - /** - * - * Prepare deleted distribution set . - * - * @param sourceTable - * {@link DistributionTable} - * @param transferable - * {@link TableTransferable} - * - */ private void addInDeleteDistributionList(final Table sourceTable, final TableTransferable transferable) { final Set distSelected = HawkbitCommonUtil.getSelectedDSDetails(sourceTable); - final Set distributionIdNameSet = new HashSet(); + final Set distributionIdNameSet = new HashSet<>(); if (!distSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { distributionIdNameSet.add((DistributionSetIdName) transferable.getData(SPUIDefinitions.ITEMID)); @@ -477,15 +355,6 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return false; } - /** - * Prepare deleted target list. - * - * @param sourceTable - * {@link TargetTable} - * @param transferable - * {@link TableTransferable} - * - */ private void addInDeleteTargetList(final Table sourceTable, final TableTransferable transferable) { final Set targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(sourceTable); @@ -521,9 +390,6 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } } - /** - * Update the software module delete count. - */ private void updateActionCount() { final int count = managementUIState.getDeletedTargetList().size() + managementUIState.getDeletedDistributionList().size() + managementUIState.getAssignedList().size(); @@ -546,34 +412,16 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return true; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * hasBulkUploadPermission() - */ @Override protected boolean hasBulkUploadPermission() { return permChecker.hasCreateTargetPermission(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * showBulkUploadWindow() - */ @Override protected void showBulkUploadWindow() { eventBus.publish(this, BulkUploadPopupEvent.MAXIMIMIZED); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * restoreBulkUploadStatusCount() - */ @Override protected void restoreBulkUploadStatusCount() { final Long failedCount = managementUIState.getTargetTableFilters().getBulkUpload().getFailedUploadCount(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java index 8f91bf336..c0f681c7a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java @@ -107,32 +107,15 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin super.inittialize(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.confirmwindow.layout. - * AbstractConfirmationWindowLayout# getConfimrationTabs() - */ @Override protected Map getConfimrationTabs() { - final Map tabs = new HashMap(); - /** - * create tab for deleted distribution. - */ - - /* Create tab for SW Module Type delete */ + final Map tabs = new HashMap<>(); if (!managementUIState.getDeletedDistributionList().isEmpty()) { tabs.put(i18n.get("caption.delete.dist.accordion.tab"), createDeletedDistributionTab()); } - /** - * create tab for deleted target. - */ if (!managementUIState.getDeletedTargetList().isEmpty()) { tabs.put(i18n.get("caption.delete.target.accordion.tab"), createDeletedTargetTab()); } - /** - * create tab for assignment. - */ if (!managementUIState.getAssignedList().isEmpty()) { tabs.put(i18n.get("caption.assign.dist.accordion.tab"), createAssignmentTab()); } @@ -196,8 +179,8 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin private void saveAllAssignments(final ConfirmationTab tab) { final Set itemIds = managementUIState.getAssignedList().keySet(); Long distId; - List targetIdSetList = null; - List tempIdList = null; + List targetIdSetList; + List tempIdList; final ActionType actionType = ((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout .getActionTypeOptionGroup().getValue()).getActionType(); final long forcedTimeStamp = (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout @@ -205,7 +188,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() : Action.NO_FORCE_TIME; - final Map> saveAssignedList = new HashMap>(); + final Map> saveAssignedList = new HashMap<>(); int successAssignmentCount = 0; int duplicateAssignmentCount = 0; @@ -216,7 +199,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin if (saveAssignedList.containsKey(distId)) { targetIdSetList = saveAssignedList.get(distId); } else { - targetIdSetList = new ArrayList(); + targetIdSetList = new ArrayList<>(); } targetIdSetList.add(itemId); saveAssignedList.put(distId, (ArrayList) targetIdSetList); @@ -275,15 +258,13 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin } private String getAssigmentSuccessMessage(final int assignedCount) { - final String assignment = FontAwesome.TASKS.getHtml() + SPUILabelDefinitions.HTML_SPACE + return FontAwesome.TASKS.getHtml() + SPUILabelDefinitions.HTML_SPACE + i18n.get("message.target.assignment", new Object[] { assignedCount }); - return assignment; } private String getDuplicateAssignmentMessage(final int alreadyAssignedCount) { - final String alreadyAssigned = FontAwesome.TASKS.getHtml() + SPUILabelDefinitions.HTML_SPACE + return FontAwesome.TASKS.getHtml() + SPUILabelDefinitions.HTML_SPACE + i18n.get("message.target.alreadyAssigned", new Object[] { alreadyAssignedCount }); - return alreadyAssigned; } private void discardAllAssignments(final ConfirmationTab tab) { @@ -456,7 +437,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin } private void deleteAllDistributions(final ConfirmationTab tab) { - final Set deletedIds = new HashSet(); + final Set deletedIds = new HashSet<>(); managementUIState.getDeletedDistributionList().forEach(distIdName -> deletedIds.add(distIdName.getId())); distributionSetManagement.deleteDistributionSet(deletedIds.toArray(new Long[deletedIds.size()])); addToConsolitatedMsg(FontAwesome.TRASH_O.getHtml() + SPUILabelDefinitions.HTML_SPACE @@ -516,7 +497,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin final IndexedContainer contactContainer = new IndexedContainer(); contactContainer.addContainerProperty(TARGET_ID, String.class, ""); contactContainer.addContainerProperty(TARGET_NAME, String.class, ""); - Item item = null; + Item item; for (final TargetIdName targteId : managementUIState.getDeletedTargetList()) { item = contactContainer.addItem(targteId); item.getItemProperty(TARGET_ID).setValue(targteId.getControllerId()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java index f4c825283..b4ca40da9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java @@ -33,9 +33,9 @@ public class DistributionTableFilters implements Serializable { private String pinnedTargetId; - private final List distSetTags = new ArrayList(); + private final List distSetTags = new ArrayList<>(); - private List clickedDistSetTags = new ArrayList(); + private List clickedDistSetTags = new ArrayList<>(); private Boolean noTagSelected = Boolean.FALSE; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java index 4adeb52ed..4f23b410c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java @@ -30,9 +30,9 @@ public class TargetFilterParameters implements Serializable { private String searchText; - private final List status = new ArrayList(); + private final List status = new ArrayList<>(); - private List targetTags = new ArrayList(); + private List targetTags = new ArrayList<>(); private Long distributionSetId; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java index 1e65caba9..6d8297345 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java @@ -22,9 +22,6 @@ import com.vaadin.spring.annotation.VaadinSessionScope; /** * Target Table Filters. - * - * - * */ @VaadinSessionScope @SpringComponent @@ -32,8 +29,8 @@ public class TargetTableFilters implements Serializable { private static final long serialVersionUID = -5251492630546463593L; - private final List clickedTargetTags = new ArrayList(); - private final List clickedStatusTargetTags = new ArrayList(); + private final List clickedTargetTags = new ArrayList<>(); + private final List clickedStatusTargetTags = new ArrayList<>(); private String searchText; private DistributionSetIdName distributionSet; private Long pinnedDistId; 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 be98ef3bc..dac50ab0d 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 @@ -39,10 +39,6 @@ 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; @@ -105,7 +101,7 @@ public class TargetBeanQuery extends AbstractBeanQuery { @Override protected List loadBeans(final int startIndex, final int count) { Slice targetBeans; - final List proxyTargetBeans = new ArrayList(); + final List proxyTargetBeans = new ArrayList<>(); if (pinnedDistId != null) { targetBeans = getTargetManagement().findTargetsAllOrderByLinkedDistributionSet( new OffsetBasedPageRequest(startIndex, SPUIDefinitions.PAGE_SIZE, sort), pinnedDistId, 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 9ed202343..960553a6a 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 @@ -15,6 +15,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -140,6 +141,8 @@ public class TargetTable extends AbstractTable implements Handler { private Boolean isTargetPinned = Boolean.FALSE; private ShortcutAction actionSelectAll; private ShortcutAction actionUnSelectAll; + + @Override @PostConstruct diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java index a1b094f99..05b6bfe4d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java @@ -56,9 +56,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Target table header layout. - * - * - * */ @SpringComponent @ViewScope @@ -92,9 +89,7 @@ public class TargetTableHeader extends AbstractTableHeader { private Boolean isComplexFilterViewDisplayed = Boolean.FALSE; - /** - * Initialization of Target Header Component. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -258,8 +253,10 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected void resetSearchText() { - managementUIState.getTargetTableFilters().setSearchText(null); - eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); + if (managementUIState.getTargetTableFilters().getSearchText().isPresent()) { + managementUIState.getTargetTableFilters().setSearchText(null); + eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); + } } private String getSearchText() { @@ -335,6 +332,11 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected DropHandler getDropFilterHandler() { return new DropHandler() { + /** + * + */ + private static final long serialVersionUID = 1L; + @Override public void drop(final DragAndDropEvent event) { filterByDroppedDist(event); @@ -393,10 +395,9 @@ public class TargetTableHeader extends AbstractTableHeader { } private Set getDropppedDistributionDetails(final TableTransferable transferable) { - @SuppressWarnings("unchecked") final Set distSelected = HawkbitCommonUtil .getSelectedDSDetails(transferable.getSourceComponent()); - final Set distributionIdSet = new HashSet(); + final Set distributionIdSet = new HashSet<>(); if (!distSelected.contains(transferable.getData("itemId"))) { distributionIdSet.add((DistributionSetIdName) transferable.getData("itemId")); } else { @@ -441,12 +442,6 @@ public class TargetTableHeader extends AbstractTableHeader { eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * displayFilterDropedInfoOnLoad() - */ @Override protected void displayFilterDropedInfoOnLoad() { if (managementUIState.getTargetTableFilters().getDistributionSet().isPresent()) { @@ -454,23 +449,11 @@ public class TargetTableHeader extends AbstractTableHeader { } } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader# - * getFilterIconStyle() - */ @Override protected String getFilterIconStyle() { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader# - * isBulkUploadInProgress() - */ @Override protected boolean isBulkUploadInProgress() { return managementUIState.getTargetTableFilters().getBulkUpload().getSucessfulUploadCount() != 0 diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java index ec2cff7fa..5164a409a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java @@ -75,7 +75,7 @@ public class TargetTagBeanQuery extends AbstractBeanQuery { @Override protected List loadBeans(final int startIndex, final int count) { Page targetTagBeans; - final List targetTagList = new ArrayList(); + final List targetTagList = new ArrayList<>(); if (startIndex == 0 && firstPageTargetTag != null) { targetTagBeans = firstPageTargetTag; } else { 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 c9a2c945c..9d93962da 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 @@ -57,9 +57,6 @@ import com.vaadin.ui.UI; /** * Target Tag filter buttons table. - * - * - * */ @SpringComponent @ViewScope @@ -129,40 +126,18 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButtonsTableId() - */ @Override protected String getButtonsTableId() { return SPUIComponetIdProvider.TARGET_TAG_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonsLazyQueryContainer () - */ @Override protected LazyQueryContainer createButtonsLazyQueryContainer() { - final LazyQueryContainer tagContainer = HawkbitCommonUtil + return HawkbitCommonUtil .createDSLazyQueryContainer(new BeanQueryFactory(TargetTagBeanQuery.class)); - return tagContainer; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * isClickedByDefault(java.lang .Long) - */ @Override protected boolean isClickedByDefault(final Long buttonId) { final TargetTag newTagClickedObj = tagMgmtService.findTargetTagById(buttonId); @@ -175,26 +150,12 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { return managementUIState.getTargetTableFilters().isNoTagSelected(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * createButtonId(java.lang. String) - */ @Override protected String createButtonId(final String name) { return name; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getFilterButtonDropHandler() - */ @Override protected DropHandler getFilterButtonDropHandler() { @@ -267,21 +228,14 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { return true; } - /** - * Process target Drop event. - * - * @param event - * DragAndDropEvent - */ private void processTargetDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); final Table source = transferable.getSourceComponent(); - @SuppressWarnings("unchecked") final Set targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(source); - final Set targetList = new HashSet(); + final Set targetList = new HashSet<>(); if (transferable.getData(ITEMID) != null) { if (!targetSelected.contains(transferable.getData(ITEMID))) { targetList.add(((TargetIdName) transferable.getData(ITEMID)).getControllerId()); @@ -306,13 +260,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } } - /** - * validate the source tables. - * - * @param source - * table - * @return boolean - */ private boolean validateIfSourceisTargetTable(final Table source) { if (!source.getId().equals(SPUIComponetIdProvider.TARGET_TABLE_ID)) { notification.displayValidationError(i18n.get(SPUILabelDefinitions.ACTION_NOT_ALLOWED)); @@ -321,13 +268,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { return true; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons# - * getButttonWrapperId() - */ @Override protected String getButttonWrapperIdPrefix() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java index 5175f5f60..7d0b5c76c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java @@ -25,9 +25,6 @@ import com.vaadin.ui.Button.ClickEvent; /** * Target Tag filter by Tag Header. - * - * - * */ @SpringComponent @ViewScope @@ -50,9 +47,7 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { @Autowired private ManagementUIState managementUIState; - /** - * Initialize Tag Header. - */ + @Override @PostConstruct public void init() { super.init(); @@ -61,101 +56,45 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getHideButtonId() - */ @Override protected String getHideButtonId() { return SPUIComponetIdProvider.HIDE_TARGET_TAGS; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hasCreateUpdatePermission() - */ @Override protected boolean hasCreateUpdatePermission() { return permChecker.hasCreateTargetPermission() || permChecker.hasUpdateTargetPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle( - * ) - */ @Override protected String getTitle() { return i18n.get("header.target.filter.tag", new Object[] {}); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * settingsIconClicked(com.vaadin .ui.Button.ClickEvent) - */ @Override protected void settingsIconClicked(final ClickEvent event) { - /** - * Add tag icon not displayed. - */ + // Add tag icon not displayed. } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * dropHitsRequired() - */ @Override protected boolean dropHitsRequired() { return true; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * hideFilterButtonLayout() - */ @Override protected void hideFilterButtonLayout() { managementUIState.setTargetTagFilterClosed(true); eventbus.publish(this, ManagementUIEvent.HIDE_TARGET_TAG_LAYOUT); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader# - * getConfigureFilterButtonId() - */ @Override protected String getConfigureFilterButtonId() { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader# - * isAddTagRequired() - */ @Override protected boolean isAddTagRequired() { return false; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java new file mode 100644 index 000000000..87fcbe922 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java @@ -0,0 +1,244 @@ +/** + * 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.push; + +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.BlockingDeque; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.eventbus.event.EntityEvent; +import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; +import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; +import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; +import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; +import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; +import org.vaadin.spring.events.EventBus; +import org.vaadin.spring.events.EventBus.SessionEventBus; + +import com.google.common.collect.Sets; +import com.google.common.eventbus.AllowConcurrentEvents; +import com.google.common.eventbus.Subscribe; +import com.vaadin.server.VaadinSession; +import com.vaadin.server.VaadinSession.State; +import com.vaadin.server.WrappedSession; +import com.vaadin.ui.UI; + +/** + * A {@link EventPushStrategy} implementation which retrieves events from + * {@link com.google.common.eventbus.EventBus} and store them first in an queue + * where they will dispatched every 2 seconds to the {@link EventBus} in a + * Vaadin access thread {@link UI#access(Runnable)}. + * + * This strategy avoids blocking UIs when too many events are fired and + * dispatched to the UI thread. The UI will freeze in the time. To avoid that + * all events are collected first and same events are merged to a list of events + * before they dispatched to the UI thread. + * + * The strategy also verifies the current tenant in the session with the tenant + * in the event and only forwards event from the right tenant to the UI. + * + */ +public class DelayedEventBusPushStrategy implements EventPushStrategy { + + private static final Logger LOG = LoggerFactory.getLogger(DelayedEventBusPushStrategy.class); + + private static final int BLOCK_SIZE = 10_000; + private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + private final BlockingDeque queue = new LinkedBlockingDeque<>(BLOCK_SIZE); + private final EventBus.SessionEventBus eventBus; + private final com.google.common.eventbus.EventBus systemEventBus; + + private ScheduledFuture jobHandle; + + /** + * only events defined in the set are dispatched to the session event bus. + */ + private static final Set> UI_EVENTS = Sets.newHashSet(TargetInfoUpdateEvent.class, + TargetCreatedEvent.class, TargetDeletedEvent.class, RolloutChangeEvent.class, RolloutGroupChangeEvent.class, + TargetTagCreatedBulkEvent.class, DistributionSetTagCreatedBulkEvent.class); + + /** + * Constructor. + * + * @param eventBus + * the session event bus to where the events should be dispatched + * @param systemEventBus + * the system event bus where to retrieve the events from the + * back-end + */ + public DelayedEventBusPushStrategy(final SessionEventBus eventBus, + final com.google.common.eventbus.EventBus systemEventBus) { + this.eventBus = eventBus; + this.systemEventBus = systemEventBus; + } + + /** + * An {@link com.google.common.eventbus.EventBus} subscriber which + * subscribes {@link EntityEvent} from the repository to dispatch these + * events to the UI {@link SessionEventBus}. + * + * @param event + * the entity event which has been published from the repository + */ + @Subscribe + @AllowConcurrentEvents + public void dispatch(final org.eclipse.hawkbit.eventbus.event.Event event) { + // to dispatch too many events which are not interested on the UI + if (UI_EVENTS.contains(event.getClass()) && !queue.offer(event)) { + LOG.warn("Deque limit is reached, cannot add more events!!! Dropped event is {}", event); + return; + } + } + + @Override + public void init(final UI vaadinUI) { + LOG.debug("Initialize delayed event push strategy"); + jobHandle = executorService.scheduleWithFixedDelay(new DispatchRunnable(vaadinUI, vaadinUI.getSession()), 500, + 2000, TimeUnit.MILLISECONDS); + systemEventBus.register(this); + } + + @Override + public void clean() { + LOG.debug("Cleanup resources"); + jobHandle.cancel(true); + systemEventBus.unregister(this); + executorService.shutdownNow(); + queue.clear(); + } + + /** + * Checks if the tenant within the event is equal with the current tenant in + * the context. + * + * @param userContext + * the security context of the current session + * @param event + * the event to dispatch to the UI + * @return {@code true} if the event can be dispatched to the UI otherwise + * {@code false} + */ + protected boolean eventSecurityCheck(final SecurityContext userContext, + final org.eclipse.hawkbit.eventbus.event.Event event) { + if (userContext == null || userContext.getAuthentication() == null) { + return false; + } + final Object tenantAuthenticationDetails = userContext.getAuthentication().getDetails(); + if (tenantAuthenticationDetails instanceof TenantAwareAuthenticationDetails) { + return ((TenantAwareAuthenticationDetails) tenantAuthenticationDetails).getTenant() + .equalsIgnoreCase(event.getTenant()); + } + return false; + } + + private final class DispatchRunnable implements Runnable { + + private final UI vaadinUI; + private final VaadinSession vaadinSession; + + private DispatchRunnable(final UI ui, final VaadinSession session) { + vaadinUI = ui; + vaadinSession = session; + } + + @Override + public void run() { + LOG.debug("UI EventBus aggregator started"); + final long timestamp = System.currentTimeMillis(); + final List events = new LinkedList<>(); + for (int i = 0; i < BLOCK_SIZE; i++) { + final org.eclipse.hawkbit.eventbus.event.Event pollEvent = queue.poll(); + if (pollEvent == null) { + continue; + } + events.add(pollEvent); + } + + if (events.isEmpty()) { + return; + } + + if (vaadinSession == null) { + return; + } + + LOG.debug("UI EventBus aggregator session: {}", vaadinSession); + + final WrappedSession wrappedSession = vaadinSession.getSession(); + if (wrappedSession == null) { + return; + } + + final int eventsSize = events.size(); + + doDispatch(events, wrappedSession); + + LOG.debug("UI EventBus aggregator done with sending {} events in {} ms", eventsSize, + System.currentTimeMillis() - timestamp); + + } + + private void doDispatch(final List events, + final WrappedSession wrappedSession) { + final SecurityContext userContext = (SecurityContext) wrappedSession + .getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY); + final SecurityContext oldContext = SecurityContextHolder.getContext(); + try { + SecurityContextHolder.setContext(userContext); + vaadinUI.access(() -> { + if (vaadinSession.getState() != State.OPEN) { + return; + } + fowardEvents(events, userContext); + + // send a list of events, because ui performance issues + publishEventAsList(events, userContext, TargetInfoUpdateEvent.class); + publishEventAsList(events, userContext, TargetCreatedEvent.class); + publishEventAsList(events, userContext, TargetDeletedEvent.class); + }); + } finally { + SecurityContextHolder.setContext(oldContext); + } + } + + private void publishEventAsList(final List events, + final SecurityContext userContext, final Class eventType) { + final List bulkEvents = events.stream() + .filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event) + && eventType.isInstance(event)) + .collect(Collectors.toList()); + if (bulkEvents.isEmpty()) { + return; + } + eventBus.publish(vaadinUI, bulkEvents); + } + + private void fowardEvents(final List events, + final SecurityContext userContext) { + events.stream().filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event)) + .forEach(event -> eventBus.publish(vaadinUI, event)); + } + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java new file mode 100644 index 000000000..504dece60 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java @@ -0,0 +1,33 @@ +/** + * 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.push; + +import com.vaadin.ui.UI; + +/** + * Interface declaring a strategy to push events from the back-end to the UI. + * + */ +public interface EventPushStrategy { + + /** + * Initialize the event push strategy, this is bound to the life-cycle of + * the {@link UI} so the strategy can be initialized based a {@link UI}. + * + * @param vaadinUI + * the {@link UI} + */ + void init(UI vaadinUI); + + /** + * Cleans up resources when the strategy is not be used anymore e.g. + * {@link UI#detach()}. + */ + void clean(); +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java index efe065b85..92f30293a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java @@ -24,10 +24,6 @@ public class ProxyRollout extends Rollout { private String modifiedDate; - private String createdBy; - - private String lastModifiedBy; - private Long numberOfGroups; private Long runningTargetsCount; @@ -106,36 +102,6 @@ public class ProxyRollout extends Rollout { this.modifiedDate = modifiedDate; } - /** - * @return the createdBy - */ - public String getCreatedBy() { - return createdBy; - } - - /** - * @param createdBy - * the createdBy to set - */ - public void setCreatedBy(final String createdBy) { - this.createdBy = createdBy; - } - - /** - * @return the lastModifiedBy - */ - public String getLastModifiedBy() { - return lastModifiedBy; - } - - /** - * @param lastModifiedBy - * the lastModifiedBy to set - */ - public void setLastModifiedBy(final String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - /** * @return the runningTargetsCount */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java index 8373fcf08..da49d843a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java @@ -22,10 +22,6 @@ public class ProxyRolloutGroup extends RolloutGroup { private String modifiedDate; - private String createdBy; - - private String lastModifiedBy; - private String finishedPercentage; private Long runningTargetsCount; @@ -74,36 +70,6 @@ public class ProxyRolloutGroup extends RolloutGroup { this.modifiedDate = modifiedDate; } - /** - * @return the createdBy - */ - public String getCreatedBy() { - return createdBy; - } - - /** - * @param createdBy - * the createdBy to set - */ - public void setCreatedBy(final String createdBy) { - this.createdBy = createdBy; - } - - /** - * @return the lastModifiedBy - */ - public String getLastModifiedBy() { - return lastModifiedBy; - } - - /** - * @param lastModifiedBy - * the lastModifiedBy to set - */ - public void setLastModifiedBy(final String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - /** * @return the finishedPercentage */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java index 562569136..19a504384 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java @@ -53,6 +53,7 @@ public class RolloutGroupTargetsListHeader extends AbstractSimpleTableHeader { private Button rolloutsGroupViewLink; private Label headerCaption; + @Override @PostConstruct protected void init() { super.init(); @@ -78,8 +79,8 @@ public class RolloutGroupTargetsListHeader extends AbstractSimpleTableHeader { headerCaption.setCaption(rolloutGroup.getName()); } - rolloutsGroupViewLink.setCaption(rolloutUiState.getRolloutName().isPresent() ? rolloutUiState.getRolloutName() - .get() : ""); + rolloutsGroupViewLink + .setCaption(rolloutUiState.getRolloutName().isPresent() ? rolloutUiState.getRolloutName().get() : ""); } @Override @@ -103,9 +104,7 @@ public class RolloutGroupTargetsListHeader extends AbstractSimpleTableHeader { @Override protected void searchBy(final String newSearchText) { - /** - * No implementation required. - */ + // No implementation required. } @@ -162,12 +161,6 @@ public class RolloutGroupTargetsListHeader extends AbstractSimpleTableHeader { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.rollout.AbstractSimpleTableHeader# - * getHeaderCaptionLayout() - */ @Override protected HorizontalLayout getHeaderCaptionLayout() { headerCaption = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_WIDGET_CAPTION); @@ -204,12 +197,6 @@ public class RolloutGroupTargetsListHeader extends AbstractSimpleTableHeader { eventBus.publish(this, RolloutEvent.SHOW_ROLLOUTS); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.ui.rollout.AbstractSimpleTableHeader#restoreCaption() - */ @Override protected void restoreCaption() { setCaptionDetails(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java index 95eba8380..bb037231b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java @@ -61,6 +61,7 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { @Autowired private transient RolloutUIState rolloutUIState; + @Override @PostConstruct protected void init() { super.init(); @@ -88,8 +89,8 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.15f)); columnList .add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.15f)); + columnList.add( + new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.15f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.15f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_TARGET_STATUS, i18n.get("header.status"), 0.1f)); @@ -101,15 +102,16 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { protected Container createContainer() { final BeanQueryFactory rolloutgrouBeanQueryFactory = new BeanQueryFactory<>( RolloutGroupTargetsBeanQuery.class); - return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, - SPUILabelDefinitions.VAR_ID), rolloutgrouBeanQueryFactory); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), + rolloutgrouBeanQueryFactory); } @Override protected void addContainerProperties(final Container container) { final LazyQueryContainer rolloutGroupTargetTableContainer = (LazyQueryContainer) container; - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CONT_ID, String.class, "", - false, false); + rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CONT_ID, String.class, "", false, + false); rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, true); rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, Status.class, @@ -124,10 +126,10 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { false, true); rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, null, false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, + rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, + false, true); + rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, - String.class, null, false, true); rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); } @@ -140,23 +142,20 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { @Override protected void onValueChange() { - /** - * No implementation required. - */ + // No implementation required. } @Override protected void addCustomGeneratedColumns() { - addGeneratedColumn(SPUILabelDefinitions.VAR_TARGET_STATUS, (source, itemId, columnId) -> getStatusLabel(itemId)); + addGeneratedColumn(SPUILabelDefinitions.VAR_TARGET_STATUS, + (source, itemId, columnId) -> getStatusLabel(itemId)); setColumnAlignment(SPUILabelDefinitions.VAR_TARGET_STATUS, Align.CENTER); } @Override protected void setCollapsiblecolumns() { - /** - * No implementation required. - */ + // No implementation required. } private Label getStatusLabel(final Object itemId) { @@ -171,8 +170,8 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { private void setStatusIcon(final Object itemId, final Label statusLabel) { final Item item = getItem(itemId); - final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() ? rolloutUIState - .getRolloutGroup().get() : null; + final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() + ? rolloutUIState.getRolloutGroup().get() : null; if (item != null) { final Status status = (Status) item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue(); if (status == null) { @@ -184,10 +183,10 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { statusLabel.setValue(FontAwesome.MINUS_CIRCLE.getHtml()); statusLabel.addStyleName("statusIconBlue"); - final String dsNameVersion = (String) item.getItemProperty( - SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).getValue(); - statusLabel.setDescription(i18n - .get("message.dist.already.assigned", new Object[] { dsNameVersion })); + final String dsNameVersion = (String) item + .getItemProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).getValue(); + statusLabel + .setDescription(i18n.get("message.dist.already.assigned", new Object[] { dsNameVersion })); } } else { setRolloutStatusIcon(status, statusLabel); @@ -197,36 +196,36 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { } private void setRolloutStatusIcon(final Status targetUpdateStatus, final Label statusLabel) { - switch (targetUpdateStatus) { - case ERROR: - statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconRed"); - break; - case SCHEDULED: - statusLabel.setValue(FontAwesome.BULLSEYE.getHtml()); - statusLabel.addStyleName("statusIconBlue"); - break; - case FINISHED: - statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconGreen"); - break; - case RUNNING: - case RETRIEVED: - case WARNING: - case DOWNLOAD: - statusLabel.setValue(FontAwesome.ADJUST.getHtml()); - statusLabel.addStyleName("statusIconYellow"); - break; - case CANCELED: - statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconGreen"); - break; - case CANCELING: - statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconPending"); - break; - default: - break; - } + switch (targetUpdateStatus) { + case ERROR: + statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconRed"); + break; + case SCHEDULED: + statusLabel.setValue(FontAwesome.BULLSEYE.getHtml()); + statusLabel.addStyleName("statusIconBlue"); + break; + case FINISHED: + statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconGreen"); + break; + case RUNNING: + case RETRIEVED: + case WARNING: + case DOWNLOAD: + statusLabel.setValue(FontAwesome.ADJUST.getHtml()); + statusLabel.addStyleName("statusIconYellow"); + break; + case CANCELED: + statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconGreen"); + break; + case CANCELING: + statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconPending"); + break; + default: + break; + } } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java index 58cc2a753..3c89518e1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java @@ -52,6 +52,7 @@ public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { private Label headerCaption; + @Override @PostConstruct protected void init() { super.init(); @@ -71,54 +72,42 @@ public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { } private void setCaptionDetails() { - headerCaption.setCaption(rolloutUiState.getRolloutName().isPresent() ? rolloutUiState.getRolloutName().get() - : ""); + headerCaption + .setCaption(rolloutUiState.getRolloutName().isPresent() ? rolloutUiState.getRolloutName().get() : ""); } @Override protected void resetSearchText() { - /** - * No implementation required. - */ + // No implementation required. } @Override protected String getSearchBoxId() { - /** - * No implementation required. - */ + // No implementation required. return null; } @Override protected String getSearchRestIconId() { - /** - * No implementation required. - */ + // No implementation required. return null; } @Override protected void searchBy(final String newSearchText) { - /** - * No implementation required. - */ + // No implementation required. } @Override protected String getAddIconId() { - /** - * No implementation required. - */ + // No implementation required. return null; } @Override protected void addNewItem(final ClickEvent event) { - /** - * No implementation required. - */ + // No implementation required. } @Override @@ -129,7 +118,6 @@ public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { @Override protected boolean hasCreatePermission() { - return true; } @@ -140,7 +128,6 @@ public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { @Override protected boolean showCloseButton() { - return true; } @@ -159,12 +146,6 @@ public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.rollout.AbstractSimpleTableHeader# - * getHeaderCaptionLayout() - */ @Override protected HorizontalLayout getHeaderCaptionLayout() { headerCaption = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_WIDGET_CAPTION); @@ -184,12 +165,6 @@ public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { return headerCaptionLayout; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.ui.rollout.AbstractSimpleTableHeader#restoreCaption() - */ @Override protected void restoreCaption() { setCaptionDetails(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java index 6abfdb584..26bf021c4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java @@ -50,9 +50,7 @@ public class RolloutListHeader extends AbstractSimpleTableHeader { @Autowired private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; - /** - * Initialization of Target Header Component. - */ + @Override @PostConstruct protected void init() { super.init(); @@ -101,9 +99,7 @@ public class RolloutListHeader extends AbstractSimpleTableHeader { @Override protected void onClose(final ClickEvent event) { - /** - * No implementation required. - */ + // No implementation required. } @Override @@ -133,16 +129,9 @@ public class RolloutListHeader extends AbstractSimpleTableHeader { @Override protected boolean isRollout() { - return true; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.rollout.AbstractSimpleTableHeader# - * getHeaderCaptionLayout() - */ @Override protected HorizontalLayout getHeaderCaptionLayout() { final Label headerCaption = SPUIComponentProvider.getLabel(getHeaderCaption(), @@ -153,17 +142,9 @@ public class RolloutListHeader extends AbstractSimpleTableHeader { return headerCaptionLayout; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.ui.rollout.AbstractSimpleTableHeader#restoreCaption() - */ @Override protected void restoreCaption() { - /** - * No implementation required. - */ + // No implementation required. } } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 08617bd58..c63b0ba8a 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -313,7 +313,7 @@ soft.module.os =OS message.error.noFileSelected = No file selected for upload message.error.noProvidedName = Please provide custom file name message.error.noSwModuleSelected = Please select a software module -message.no.duplicateFiles = duplicate files selected +message.no.duplicateFiles = Duplicate files selected message.no.duplicateFile = Duplicate file selected : message.delete.artifact = Are you sure that you want to delete artifact {0} ? message.duplicate.filename = Duplicate file name diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index c1d9a850f..9ff2e5e75 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -310,7 +310,7 @@ soft.module.os =OS message.error.noFileSelected = No file selected for upload message.error.noProvidedName = Please provide custom file name message.error.noSwModuleSelected = Please select a software module -message.no.duplicateFiles = duplicate files selected +message.no.duplicateFiles = Duplicate files selected message.no.duplicateFile = Duplicate file selected : message.delete.artifact = Are you sure that you want to delete artifact {0} ? message.duplicate.filename = Duplicate file name diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index b1f95cb45..762b68c56 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -305,7 +305,7 @@ soft.module.os =OS message.error.noFileSelected = No file selected for upload message.error.noProvidedName = Please provide custom file name message.error.noSwModuleSelected = Please select a software module -message.no.duplicateFiles = duplicate files selected +message.no.duplicateFiles = Duplicate files selected message.no.duplicateFile = Duplicate file selected : message.delete.artifact = Are you sure that you want to delete artifact {0} ? message.duplicate.filename = Duplicate file name