Merge remote-tracking branch 'eclipse/master' into harmonize-test-documentation

This commit is contained in:
Kai Zimmermann
2016-03-03 20:59:15 +01:00
118 changed files with 1623 additions and 3490 deletions

View File

@@ -8,21 +8,12 @@
*/ */
package org.eclipse.hawkbit.app; 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.eclipse.hawkbit.ui.HawkbitUI;
import org.springframework.security.core.context.SecurityContext; import org.eclipse.hawkbit.ui.push.DelayedEventBusPushStrategy;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
import org.vaadin.spring.events.EventBus.SessionEventBus;
import com.google.common.eventbus.AllowConcurrentEvents; import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.vaadin.annotations.Push; 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.communication.PushMode;
import com.vaadin.shared.ui.ui.Transport; import com.vaadin.shared.ui.ui.Transport;
import com.vaadin.spring.annotation.SpringUI; 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 * 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} * 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. * and to annotated it with {@link SpringUI} as in this example.
*
*
* *
*/ */
@SpringUI @SpringUI
@Push(value = PushMode.AUTOMATIC, transport = Transport.WEBSOCKET) @Push(value = PushMode.AUTOMATIC, transport = Transport.WEBSOCKET)
@EventSubscriber
public class MyUI extends HawkbitUI { public class MyUI extends HawkbitUI {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** @Autowired
* An {@link com.google.common.eventbus.EventBus} subscriber which public MyUI(final EventBus systemEventBus, final org.vaadin.spring.events.EventBus.SessionEventBus eventBus) {
* subscribes {@link EntityEvent} from the repository to dispatch these super(new DelayedEventBusPushStrategy(eventBus, systemEventBus));
* 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);
}
}
}
}
} }
} }

View File

@@ -25,7 +25,7 @@ public class SoftwareModuleAssigmentBuilder {
private final List<Long> ids; private final List<Long> ids;
public SoftwareModuleAssigmentBuilder() { public SoftwareModuleAssigmentBuilder() {
ids = new ArrayList<Long>(); ids = new ArrayList<>();
} }
/** /**

View File

@@ -75,7 +75,7 @@ public class RedisConfiguration {
*/ */
@Bean @Bean
public RedisTemplate<String, Object> redisTemplate() { public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory()); redisTemplate.setConnectionFactory(jedisConnectionFactory());
redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer()); redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());

View File

@@ -95,7 +95,7 @@ public class EventDistributor {
* wants to subscribe * wants to subscribe
*/ */
public Collection<Topic> getTopics() { public Collection<Topic> getTopics() {
final List<Topic> topics = new ArrayList<Topic>(); final List<Topic> topics = new ArrayList<>();
topics.add(new PatternTopic(SUB_DISTRIBUTION_CHANNEL)); topics.add(new PatternTopic(SUB_DISTRIBUTION_CHANNEL));
return topics; return topics;
} }

View File

@@ -51,7 +51,12 @@ public class TenantAwareCacheManager implements TenancyCacheManager {
@Override @Override
public Cache getCache(final String name) { 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)) { if (currentTenant.contains(TENANT_CACHE_DELIMITER)) {
return null; return null;
} }
@@ -60,7 +65,12 @@ public class TenantAwareCacheManager implements TenancyCacheManager {
@Override @Override
public Collection<String> getCacheNames() { public Collection<String> 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)) { if (currentTenant.contains(TENANT_CACHE_DELIMITER)) {
return Collections.emptyList(); return Collections.emptyList();
} }

View File

@@ -23,6 +23,7 @@ import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@@ -121,11 +122,22 @@ public class AmqpConfiguration {
/** /**
* Create amqp handler service bean. * Create amqp handler service bean.
* *
* @return * @return handler service bean
*/ */
@Bean @Bean
public AmqpMessageHandlerService amqpMessageHandlerService() { 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);
} }
/** /**

View File

@@ -127,10 +127,7 @@ public class AmqpControllerAuthentfication {
LOGGER.debug("preAuthenticatedPrincipal = {} trying to authenticate", principal); LOGGER.debug("preAuthenticatedPrincipal = {} trying to authenticate", principal);
final PreAuthenticatedAuthenticationToken authRequest = new PreAuthenticatedAuthenticationToken(principal, return new PreAuthenticatedAuthenticationToken(principal, credentials);
credentials);
return authRequest;
} }
public void setControllerManagement(final ControllerManagement controllerManagement) { public void setControllerManagement(final ControllerManagement controllerManagement) {

View File

@@ -25,35 +25,43 @@ import org.eclipse.hawkbit.eventbus.EventSubscriber;
import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent;
import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent;
import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.LocalArtifact;
import org.eclipse.hawkbit.tenancy.TenantAware;
import org.eclipse.hawkbit.util.ArtifactUrlHandler; import org.eclipse.hawkbit.util.ArtifactUrlHandler;
import org.eclipse.hawkbit.util.IpUtil; import org.eclipse.hawkbit.util.IpUtil;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.AbstractJavaTypeMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.eventbus.Subscribe; 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 @EventSubscriber
public class AmqpMessageDispatcherService { public class AmqpMessageDispatcherService extends BaseAmqpService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private TenantAware tenantAware;
@Autowired @Autowired
private ArtifactUrlHandler artifactUrlHandler; 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 * Method to send a message to a RabbitMQ Exchange after the Distribution
* set has been assign to a Target. * set has been assign to a Target.
@@ -79,11 +87,10 @@ public class AmqpMessageDispatcherService {
downloadAndUpdateRequest.addSoftwareModule(amqpSoftwareModule); downloadAndUpdateRequest.addSoftwareModule(amqpSoftwareModule);
} }
final Message message = rabbitTemplate.getMessageConverter().toMessage( final Message message = getMessageConverter().toMessage(downloadAndUpdateRequest,
downloadAndUpdateRequest,
createConnectorMessageProperties(targetAssignDistributionSetEvent.getTenant(), controllerId, createConnectorMessageProperties(targetAssignDistributionSetEvent.getTenant(), controllerId,
EventTopic.DOWNLOAD_AND_INSTALL)); EventTopic.DOWNLOAD_AND_INSTALL));
sendMessage(targetAdress.getHost(), message); amqpSenderService.sendMessage(message, targetAdress);
} }
/** /**
@@ -98,29 +105,13 @@ public class AmqpMessageDispatcherService {
final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent) { final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent) {
final String controllerId = cancelTargetAssignmentDistributionSetEvent.getControllerId(); final String controllerId = cancelTargetAssignmentDistributionSetEvent.getControllerId();
final Long actionId = cancelTargetAssignmentDistributionSetEvent.getActionId(); final Long actionId = cancelTargetAssignmentDistributionSetEvent.getActionId();
final Message message = rabbitTemplate.getMessageConverter().toMessage( final Message message = getMessageConverter().toMessage(actionId, createConnectorMessageProperties(
actionId, cancelTargetAssignmentDistributionSetEvent.getTenant(), controllerId, EventTopic.CANCEL_DOWNLOAD));
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, private MessageProperties createConnectorMessageProperties(final String tenant, final String controllerId,
final EventTopic topic) { final EventTopic topic) {
final MessageProperties messageProperties = createMessageProperties(); final MessageProperties messageProperties = createMessageProperties();
@@ -155,9 +146,8 @@ public class AmqpMessageDispatcherService {
return Collections.emptyList(); return Collections.emptyList();
} }
final List<Artifact> convertedArtifacts = localArtifacts.stream() return localArtifacts.stream().map(localArtifact -> convertArtifact(targetId, localArtifact))
.map(localArtifact -> convertArtifact(targetId, localArtifact)).collect(Collectors.toList()); .collect(Collectors.toList());
return convertedArtifacts;
} }
private Artifact convertArtifact(final String targetId, final LocalArtifact localArtifact) { private Artifact convertArtifact(final String targetId, final LocalArtifact localArtifact) {
@@ -175,15 +165,11 @@ public class AmqpMessageDispatcherService {
return artifact; 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) { public void setArtifactUrlHandler(final ArtifactUrlHandler artifactUrlHandler) {
this.artifactUrlHandler = artifactUrlHandler; this.artifactUrlHandler = artifactUrlHandler;
} }
public void setAmqpSenderService(final AmqpSenderService amqpSenderService) {
this.amqpSenderService = amqpSenderService;
}
} }

View File

@@ -12,7 +12,6 @@ import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import org.apache.commons.lang3.StringUtils; 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.core.MessageProperties;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate; 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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.Cache; 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); private static final Logger LOG = LoggerFactory.getLogger(AmqpMessageHandlerService.class);
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired @Autowired
private ControllerManagement controllerManagement; private ControllerManagement controllerManagement;
@@ -105,7 +97,23 @@ public class AmqpMessageHandlerService {
private HostnameResolver hostnameResolver; 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 * @param message
* incoming message * incoming message
@@ -115,11 +123,11 @@ public class AmqpMessageHandlerService {
* the contentType of the message * the contentType of the message
* @param tenant * @param tenant
* the contentType of the message * the contentType of the message
* @param virtualHost
* the virtual host
* @return a message if <null> no message is send back to sender * @return a message if <null> no message is send back to sender
*/ */
@RabbitListener(queues = "${hawkbit.dmf.rabbitmq.receiverQueue}", containerFactory = "listenerContainerFactory") public Message onMessage(final Message message, final String type, final String tenant, final String virtualHost) {
public Message onMessage(final Message message, @Header(MessageHeaderKey.TYPE) final String type,
@Header(MessageHeaderKey.TENANT) final String tenant) {
checkContentTypeJson(message); checkContentTypeJson(message);
final SecurityContext oldContext = SecurityContextHolder.getContext(); final SecurityContext oldContext = SecurityContextHolder.getContext();
try { try {
@@ -127,7 +135,7 @@ public class AmqpMessageHandlerService {
switch (messageType) { switch (messageType) {
case THING_CREATED: case THING_CREATED:
setTenantSecurityContext(tenant); setTenantSecurityContext(tenant);
registerTarget(message); registerTarget(message, virtualHost);
break; break;
case EVENT: case EVENT:
setTenantSecurityContext(tenant); setTenantSecurityContext(tenant);
@@ -153,8 +161,8 @@ public class AmqpMessageHandlerService {
final String sha1 = secruityToken.getSha1(); final String sha1 = secruityToken.getSha1();
try { try {
SecurityContextHolder.getContext().setAuthentication(authenticationManager.doAuthenticate(secruityToken)); SecurityContextHolder.getContext().setAuthentication(authenticationManager.doAuthenticate(secruityToken));
final LocalArtifact localArtifact = artifactManagement.findFirstLocalArtifactsBySHA1(secruityToken final LocalArtifact localArtifact = artifactManagement
.getSha1()); .findFirstLocalArtifactsBySHA1(secruityToken.getSha1());
if (localArtifact == null) { if (localArtifact == null) {
throw new EntityNotFoundException(); throw new EntityNotFoundException();
} }
@@ -177,9 +185,9 @@ public class AmqpMessageHandlerService {
final String downloadId = UUID.randomUUID().toString(); final String downloadId = UUID.randomUUID().toString();
final DownloadArtifactCache downloadCache = new DownloadArtifactCache(DownloadType.BY_SHA1, sha1); final DownloadArtifactCache downloadCache = new DownloadArtifactCache(DownloadType.BY_SHA1, sha1);
cache.put(downloadId, downloadCache); cache.put(downloadId, downloadCache);
authentificationResponse.setDownloadUrl(UriComponentsBuilder authentificationResponse
.fromUri(hostnameResolver.resolveHostname().toURI()).path("/api/v1/downloadserver/downloadId/") .setDownloadUrl(UriComponentsBuilder.fromUri(hostnameResolver.resolveHostname().toURI())
.path(downloadId).build().toUriString()); .path("/api/v1/downloadserver/downloadId/").path(downloadId).build().toUriString());
authentificationResponse.setResponseCode(HttpStatus.OK.value()); authentificationResponse.setResponseCode(HttpStatus.OK.value());
} catch (final BadCredentialsException | AuthenticationServiceException | CredentialsExpiredException e) { } catch (final BadCredentialsException | AuthenticationServiceException | CredentialsExpiredException e) {
LOG.error("Login failed", e); LOG.error("Login failed", e);
@@ -196,7 +204,7 @@ public class AmqpMessageHandlerService {
authentificationResponse.setMessage(errorMessage); authentificationResponse.setMessage(errorMessage);
} }
return rabbitTemplate.getMessageConverter().toMessage(authentificationResponse, messageProperties); return getMessageConverter().toMessage(authentificationResponse, messageProperties);
} }
private static Artifact convertDbArtifact(final DbArtifact dbArtifact) { private static Artifact convertDbArtifact(final DbArtifact dbArtifact) {
@@ -207,11 +215,6 @@ public class AmqpMessageHandlerService {
return artifact; 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) { private static void setSecurityContext(final Authentication authentication) {
final SecurityContextImpl securityContextImpl = new SecurityContextImpl(); final SecurityContextImpl securityContextImpl = new SecurityContextImpl();
securityContextImpl.setAuthentication(authentication); securityContextImpl.setAuthentication(authentication);
@@ -219,22 +222,13 @@ public class AmqpMessageHandlerService {
} }
private static void setTenantSecurityContext(final String tenantId) { private static void setTenantSecurityContext(final String tenantId) {
final AnonymousAuthenticationToken authenticationToken = new AnonymousAuthenticationToken(UUID.randomUUID() final AnonymousAuthenticationToken authenticationToken = new AnonymousAuthenticationToken(
.toString(), "AMQP-Controller", Collections.singletonList(new SimpleGrantedAuthority( UUID.randomUUID().toString(), "AMQP-Controller",
SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS))); Collections.singletonList(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS)));
authenticationToken.setDetails(new TenantAwareAuthenticationDetails(tenantId, true)); authenticationToken.setDetails(new TenantAwareAuthenticationDetails(tenantId, true));
setSecurityContext(authenticationToken); setSecurityContext(authenticationToken);
} }
private String getStringHeaderKey(final Message message, final String key, final String errorMessageIfNull) {
final Map<String, Object> 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. * Method to create a new target or to find the target if it already exists.
* *
@@ -243,14 +237,15 @@ public class AmqpMessageHandlerService {
* @param ip * @param ip
* the ip of the target/thing * 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 thingId = getStringHeaderKey(message, MessageHeaderKey.THING_ID, "ThingId is null");
final String replyTo = message.getMessageProperties().getReplyTo(); final String replyTo = message.getMessageProperties().getReplyTo();
if (StringUtils.isEmpty(replyTo)) { if (StringUtils.isEmpty(replyTo)) {
logAndThrowMessageError(message, "No ReplyTo was set for the createThing Event."); 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); final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotexist(thingId, amqpUri);
LOG.debug("Target {} reported online state.", thingId); LOG.debug("Target {} reported online state.", thingId);
@@ -267,8 +262,8 @@ public class AmqpMessageHandlerService {
final DistributionSet distributionSet = action.getDistributionSet(); final DistributionSet distributionSet = action.getDistributionSet();
final List<SoftwareModule> softwareModuleList = controllerManagement final List<SoftwareModule> softwareModuleList = controllerManagement
.findSoftwareModulesByDistributionSet(distributionSet); .findSoftwareModulesByDistributionSet(distributionSet);
eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), target eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(),
.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress())); target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress()));
} }
@@ -281,13 +276,11 @@ public class AmqpMessageHandlerService {
* the topic of the event. * the topic of the event.
*/ */
private void handleIncomingEvent(final Message message, final EventTopic topic) { private void handleIncomingEvent(final Message message, final EventTopic topic) {
switch (topic) { if (EventTopic.UPDATE_ACTION_STATUS.equals(topic)) {
case UPDATE_ACTION_STATUS:
updateActionStatus(message); updateActionStatus(message);
return; 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."); logAndThrowMessageError(message, "Status for action does not exisit.");
} }
Action addUpdateActionStatus; final Action addUpdateActionStatus = getUpdateActionStatus(action, actionStatus);
if (!actionStatus.getStatus().equals(Status.CANCELED)) {
addUpdateActionStatus = controllerManagement.addUpdateActionStatus(actionStatus, action);
} else {
addUpdateActionStatus = controllerManagement.addCancelActionStatus(actionStatus, action);
}
if (!addUpdateActionStatus.isActive()) { if (!addUpdateActionStatus.isActive()) {
lookIfUpdateAvailable(action.getTarget()); lookIfUpdateAvailable(action.getTarget());
} }
} }
/** private Action getUpdateActionStatus(final Action action, final ActionStatus actionStatus) {
* @param message if (actionStatus.getStatus().equals(Status.CANCELED)) {
* @param actionUpdateStatus return controllerManagement.addCancelActionStatus(actionStatus, action);
* @return }
*/ return controllerManagement.addUpdateActionStatus(actionStatus, action);
}
private Action checkActionExist(final Message message, final ActionUpdateStatus actionUpdateStatus) { private Action checkActionExist(final Message message, final ActionUpdateStatus actionUpdateStatus) {
final Long actionId = actionUpdateStatus.getActionId(); final Long actionId = actionUpdateStatus.getActionId();
LOG.debug("Target notifies intermediate about action {} with status {}.", actionId, actionUpdateStatus LOG.debug("Target notifies intermediate about action {} with status {}.", actionId,
.getActionStatus().name()); actionUpdateStatus.getActionStatus().name());
if (actionId == null) { if (actionId == null) {
logAndThrowMessageError(message, "Invalid message no action id"); logAndThrowMessageError(message, "Invalid message no action id");
@@ -366,8 +355,8 @@ public class AmqpMessageHandlerService {
final Action action = controllerManagement.findActionWithDetails(actionId); final Action action = controllerManagement.findActionWithDetails(actionId);
if (action == null) { if (action == null) {
logAndThrowMessageError(message, "Got intermediate notification about action " + actionId logAndThrowMessageError(message,
+ " but action does not exist"); "Got intermediate notification about action " + actionId + " but action does not exist");
} }
return action; return action;
} }
@@ -381,38 +370,12 @@ public class AmqpMessageHandlerService {
// back to running action status // back to running action status
} else { } else {
logAndThrowMessageError(message, "Cancel Recjected message is not allowed, if action is on state: " logAndThrowMessageError(message,
+ action.getStatus()); "Cancel recjected message is not allowed, if action is on state: " + action.getStatus());
} }
} }
/** private void checkContentTypeJson(final Message message) {
* 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> T convertMessage(final Message message, final Class<T> 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) {
final MessageProperties messageProperties = message.getMessageProperties(); final MessageProperties messageProperties = message.getMessageProperties();
if (messageProperties.getContentType() != null && messageProperties.getContentType().contains("json")) { if (messageProperties.getContentType() != null && messageProperties.getContentType().contains("json")) {
return; return;
@@ -428,14 +391,6 @@ public class AmqpMessageHandlerService {
this.hostnameResolver = hostnameResolver; this.hostnameResolver = hostnameResolver;
} }
void setRabbitTemplate(final RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
MessageConverter getMessageConverter() {
return rabbitTemplate.getMessageConverter();
}
void setAuthenticationManager(final AmqpControllerAuthentfication authenticationManager) { void setAuthenticationManager(final AmqpControllerAuthentfication authenticationManager) {
this.authenticationManager = authenticationManager; this.authenticationManager = authenticationManager;
} }

View File

@@ -8,78 +8,41 @@
*/ */
package org.eclipse.hawkbit.amqp; package org.eclipse.hawkbit.amqp;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
/** /**
* Bean which holds the necessary properties for configuring the AMQP * Bean which holds the necessary properties for configuring the AMQP
* connection. * connection.
*
*
*
* *
*/ */
@ConfigurationProperties("hawkbit.dmf.rabbitmq") @ConfigurationProperties("hawkbit.dmf.rabbitmq")
public class AmqpProperties { public class AmqpProperties {
private String deadLetterQueue = "dmf_connector_deadletter"; private String deadLetterQueue = "dmf_receiver_deadletter";
private String deadLetterExchange = "dmf.connector.deadletter"; private String deadLetterExchange = "dmf.receiver.deadletter";
private String receiverQueue = "dmf_receiver"; private String receiverQueue = "dmf_receiver";
private boolean missingQueuesFatal = false; private boolean missingQueuesFatal = false;
/**
* Is missingQueuesFatal enabled
*
* @see SimpleMessageListenerContainer#setMissingQueuesFatal
* @return the missingQueuesFatal <true> enabled <false> disabled
*/
public boolean isMissingQueuesFatal() { public boolean isMissingQueuesFatal() {
return missingQueuesFatal; return missingQueuesFatal;
} }
/**
* @param missingQueuesFatal
* the missingQueuesFatal to set.
* @see SimpleMessageListenerContainer#setMissingQueuesFatal
*/
public void setMissingQueuesFatal(final boolean missingQueuesFatal) { public void setMissingQueuesFatal(final boolean missingQueuesFatal) {
this.missingQueuesFatal = missingQueuesFatal; this.missingQueuesFatal = missingQueuesFatal;
} }
/**
* Returns the dead letter exchange.
*
* @return dead letter exchange
*/
public String getDeadLetterExchange() { public String getDeadLetterExchange() {
return deadLetterExchange; return deadLetterExchange;
} }
/**
* Sets the dead letter exchange.
*
* @param deadLetterExchange
* the deadLetterExchange to be set
*/
public void setDeadLetterExchange(final String deadLetterExchange) { public void setDeadLetterExchange(final String deadLetterExchange) {
this.deadLetterExchange = deadLetterExchange; this.deadLetterExchange = deadLetterExchange;
} }
/**
* Returns the dead letter queue.
*
* @return the dead letter queue
*/
public String getDeadLetterQueue() { public String getDeadLetterQueue() {
return deadLetterQueue; return deadLetterQueue;
} }
/**
* Sets the dead letter queue.
*
* @param deadLetterQueue
* the deadLetterQueue ro be set
*/
public void setDeadLetterQueue(final String deadLetterQueue) { public void setDeadLetterQueue(final String deadLetterQueue) {
this.deadLetterQueue = deadLetterQueue; this.deadLetterQueue = deadLetterQueue;
} }

View File

@@ -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);
}
}

View File

@@ -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> T convertMessage(final Message message, final Class<T> 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 <T> List<T> convertMessageList(final Message message, final Class<T> 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<T>) 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<String, Object> 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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -60,11 +60,10 @@ public class AmqpControllerAuthenticationTest {
@Before @Before
public void before() throws Exception { public void before() throws Exception {
amqpMessageHandlerService = new AmqpMessageHandlerService();
messageConverter = new Jackson2JsonMessageConverter(); messageConverter = new Jackson2JsonMessageConverter();
final RabbitTemplate rabbitTemplate = new RabbitTemplate(); final RabbitTemplate rabbitTemplate = mock(RabbitTemplate.class);
rabbitTemplate.setMessageConverter(messageConverter); when(rabbitTemplate.getMessageConverter()).thenReturn(messageConverter);
amqpMessageHandlerService.setRabbitTemplate(rabbitTemplate); amqpMessageHandlerService = new AmqpMessageHandlerService(rabbitTemplate);
authenticationManager = new AmqpControllerAuthentfication(); authenticationManager = new AmqpControllerAuthentfication();
authenticationManager.setControllerManagement(mock(ControllerManagement.class)); authenticationManager.setControllerManagement(mock(ControllerManagement.class));
@@ -78,7 +77,6 @@ public class AmqpControllerAuthenticationTest {
final ControllerManagement controllerManagement = mock(ControllerManagement.class); final ControllerManagement controllerManagement = mock(ControllerManagement.class);
when(controllerManagement.getSecurityTokenByControllerId(anyString())).thenReturn(CONTROLLLER_ID); when(controllerManagement.getSecurityTokenByControllerId(anyString())).thenReturn(CONTROLLLER_ID);
authenticationManager.setControllerManagement(controllerManagement); authenticationManager.setControllerManagement(controllerManagement);
amqpMessageHandlerService.setArtifactManagement(mock(ArtifactManagement.class)); amqpMessageHandlerService.setArtifactManagement(mock(ArtifactManagement.class));
authenticationManager.setTenantAware(new SecurityContextTenantAware()); authenticationManager.setTenantAware(new SecurityContextTenantAware());
@@ -139,7 +137,7 @@ public class AmqpControllerAuthenticationTest {
// test // test
final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(),
TENANT); TENANT, "vHost");
// verify // verify
final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage);
@@ -161,7 +159,7 @@ public class AmqpControllerAuthenticationTest {
// test // test
final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(),
TENANT); TENANT, "vHost");
// verify // verify
final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage);
@@ -183,7 +181,7 @@ public class AmqpControllerAuthenticationTest {
// test // test
final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(),
TENANT); TENANT, "vHost");
// verify // verify
final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage);

View File

@@ -19,6 +19,7 @@ import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; import org.springframework.amqp.support.converter.AbstractJavaTypeMapper;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Description;
@@ -59,39 +59,41 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
private AmqpMessageDispatcherService amqpMessageDispatcherService; private AmqpMessageDispatcherService amqpMessageDispatcherService;
private MessageConverter messageConverter;
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
private DefaultAmqpSenderService senderService;
private static final String CONTROLLER_ID = "1"; private static final String CONTROLLER_ID = "1";
@Override @Override
public void before() throws Exception { public void before() throws Exception {
super.before(); super.before();
amqpMessageDispatcherService = new AmqpMessageDispatcherService(); this.rabbitTemplate = Mockito.mock(RabbitTemplate.class);
when(rabbitTemplate.getMessageConverter()).thenReturn(new Jackson2JsonMessageConverter());
amqpMessageDispatcherService = new AmqpMessageDispatcherService(rabbitTemplate);
amqpMessageDispatcherService = spy(amqpMessageDispatcherService); amqpMessageDispatcherService = spy(amqpMessageDispatcherService);
messageConverter = new Jackson2JsonMessageConverter();
senderService = Mockito.mock(DefaultAmqpSenderService.class);
amqpMessageDispatcherService.setAmqpSenderService(senderService);
final ArtifactUrlHandler artifactUrlHandlerMock = Mockito.mock(ArtifactUrlHandler.class); final ArtifactUrlHandler artifactUrlHandlerMock = Mockito.mock(ArtifactUrlHandler.class);
when(artifactUrlHandlerMock.getUrl(anyString(), any(), anyObject())).thenReturn("http://mockurl"); 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); amqpMessageDispatcherService.setArtifactUrlHandler(artifactUrlHandlerMock);
} }
@Test @Test
@Description("Verfies that download and install event with no software modul works") @Description("Verfies that download and install event with no software modul works")
public void testSendDownloadRequesWithEmptySoftwareModules() { public void testSendDownloadRequesWithEmptySoftwareModules() {
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
1L, "default", CONTROLLER_ID, 1l, new ArrayList<SoftwareModule>(), IpUtil.createAmqpUri("mytest")); 1L, "default", CONTROLLER_ID, 1l, new ArrayList<SoftwareModule>(),
IpUtil.createAmqpUri("vHost", "mytest"));
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress().getHost()); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
assertTrue(downloadAndUpdateRequest.getSoftwareModules().isEmpty()); assertTrue("No softwaremmodule should be contained in the request",
downloadAndUpdateRequest.getSoftwareModules().isEmpty());
} }
@Test @Test
@@ -100,21 +102,26 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement,
distributionSetManagement); distributionSetManagement);
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( 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); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress().getHost()); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); 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 for (final org.eclipse.hawkbit.dmf.json.model.SoftwareModule softwareModule : downloadAndUpdateRequest
.getSoftwareModules()) { .getSoftwareModules()) {
assertTrue(softwareModule.getArtifacts().isEmpty()); assertTrue("Artifact list for softwaremodule should be empty", softwareModule.getArtifacts().isEmpty());
for (final SoftwareModule softwareModule2 : dsA.getModules()) { for (final SoftwareModule softwareModule2 : dsA.getModules()) {
assertNotNull(softwareModule.getModuleId()); assertNotNull("Sofware module ID should be set", softwareModule.getModuleId());
if (!softwareModule.getModuleId().equals(softwareModule2.getId())) { if (!softwareModule.getModuleId().equals(softwareModule2.getId())) {
continue; continue;
} }
assertEquals(softwareModule.getModuleType(), softwareModule2.getType().getKey()); assertEquals(
assertEquals(softwareModule.getModuleVersion(), softwareModule2.getVersion()); "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); Mockito.when(rabbitTemplate.convertSendAndReceive(any())).thenReturn(receivedList);
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( 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); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress().getHost()); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); 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 for (final org.eclipse.hawkbit.dmf.json.model.SoftwareModule softwareModule : downloadAndUpdateRequest
.getSoftwareModules()) { .getSoftwareModules()) {
if (!softwareModule.getModuleId().equals(module.getId())) { if (!softwareModule.getModuleId().equals(module.getId())) {
continue; 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") @Description("Verfies that send cancel event works")
public void testSendCancelRequest() { public void testSendCancelRequest() {
final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent = new CancelTargetAssignmentEvent( final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent = new CancelTargetAssignmentEvent(
1L, "default", CONTROLLER_ID, 1l, IpUtil.createAmqpUri("mytest")); 1L, "default", CONTROLLER_ID, 1l, IpUtil.createAmqpUri("vHost", "mytest"));
amqpMessageDispatcherService amqpMessageDispatcherService
.targetCancelAssignmentToDistributionSet(cancelTargetAssignmentDistributionSetEvent); .targetCancelAssignmentToDistributionSet(cancelTargetAssignmentDistributionSetEvent);
final Message sendMessage = createArgumentCapture( final Message sendMessage = createArgumentCapture(cancelTargetAssignmentDistributionSetEvent.getTargetAdress());
cancelTargetAssignmentDistributionSetEvent.getTargetAdress().getHost());
assertCancelMessage(sendMessage); assertCancelMessage(sendMessage);
} }
@@ -164,8 +171,8 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
private void assertCancelMessage(final Message sendMessage) { private void assertCancelMessage(final Message sendMessage) {
assertEventMessage(sendMessage); assertEventMessage(sendMessage);
final Long actionId = convertMessage(sendMessage, Long.class); final Long actionId = convertMessage(sendMessage, Long.class);
assertEquals(actionId, Long.valueOf(1)); assertEquals("Action ID should be 1", actionId, Long.valueOf(1));
assertEquals(EventTopic.CANCEL_DOWNLOAD, assertEquals("The topc in the message should be a CANCEL_DOWNLOAD value", EventTopic.CANCEL_DOWNLOAD,
sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC)); sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC));
} }
@@ -174,8 +181,9 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
assertEventMessage(sendMessage); assertEventMessage(sendMessage);
final DownloadAndUpdateRequest downloadAndUpdateRequest = convertMessage(sendMessage, final DownloadAndUpdateRequest downloadAndUpdateRequest = convertMessage(sendMessage,
DownloadAndUpdateRequest.class); DownloadAndUpdateRequest.class);
assertEquals(downloadAndUpdateRequest.getActionId(), Long.valueOf(1)); assertEquals("The action ID of the downloadAndUpdateRequest event shuold be 1",
assertEquals(EventTopic.DOWNLOAD_AND_INSTALL, 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)); sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC));
return downloadAndUpdateRequest; return downloadAndUpdateRequest;
@@ -185,16 +193,19 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
* @param sendMessage * @param sendMessage
*/ */
private void assertEventMessage(final Message 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("The value of the message header THING_ID should be " + CONTROLLER_ID, CONTROLLER_ID,
assertEquals(MessageType.EVENT, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TYPE)); sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.THING_ID));
assertEquals(MessageProperties.CONTENT_TYPE_JSON, sendMessage.getMessageProperties().getContentType()); 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<Message> argumentCaptor = ArgumentCaptor.forClass(Message.class); final ArgumentCaptor<Message> argumentCaptor = ArgumentCaptor.forClass(Message.class);
Mockito.verify(amqpMessageDispatcherService).sendMessage(eq(exchange), argumentCaptor.capture()); Mockito.verify(senderService).sendMessage(argumentCaptor.capture(), eq(uri));
return argumentCaptor.getValue(); return argumentCaptor.getValue();
} }

View File

@@ -99,14 +99,15 @@ public class AmqpMessageHandlerServiceTest {
@Mock @Mock
private EventBus eventBus; private EventBus eventBus;
@Mock
private RabbitTemplate rabbitTemplate;
@Before @Before
public void before() throws Exception { public void before() throws Exception {
amqpMessageHandlerService = new AmqpMessageHandlerService();
amqpMessageHandlerService.setControllerManagement(controllerManagementMock);
messageConverter = new Jackson2JsonMessageConverter(); messageConverter = new Jackson2JsonMessageConverter();
final RabbitTemplate rabbitTemplate = new RabbitTemplate(); when(rabbitTemplate.getMessageConverter()).thenReturn(messageConverter);
rabbitTemplate.setMessageConverter(messageConverter); amqpMessageHandlerService = new AmqpMessageHandlerService(rabbitTemplate);
amqpMessageHandlerService.setRabbitTemplate(rabbitTemplate); amqpMessageHandlerService.setControllerManagement(controllerManagementMock);
amqpMessageHandlerService.setAuthenticationManager(authenticationManagerMock); amqpMessageHandlerService.setAuthenticationManager(authenticationManagerMock);
amqpMessageHandlerService.setArtifactManagement(artifactManagementMock); amqpMessageHandlerService.setArtifactManagement(artifactManagementMock);
amqpMessageHandlerService.setCache(cacheMock); amqpMessageHandlerService.setCache(cacheMock);
@@ -115,14 +116,16 @@ public class AmqpMessageHandlerServiceTest {
} }
@Test(expected = IllegalArgumentException.class)
@Description("Tests not allowed content-type in message") @Description("Tests not allowed content-type in message")
public void testWrongContentType() { public void testWrongContentType() {
final MessageProperties messageProperties = new MessageProperties(); final MessageProperties messageProperties = new MessageProperties();
messageProperties.setContentType("xml"); messageProperties.setContentType("xml");
final Message message = new Message(new byte[0], messageProperties); final Message message = new Message(new byte[0], messageProperties);
amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT); try {
fail(); amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost");
fail("IllegalArgumentException was excepeted due to worng content type");
} catch (final IllegalArgumentException e) {
}
} }
@Test @Test
@@ -133,18 +136,16 @@ public class AmqpMessageHandlerServiceTest {
messageProperties.setHeader(MessageHeaderKey.THING_ID, "1"); messageProperties.setHeader(MessageHeaderKey.THING_ID, "1");
final Message message = messageConverter.toMessage(new byte[0], messageProperties); final Message message = messageConverter.toMessage(new byte[0], messageProperties);
// mock
final ArgumentCaptor<String> targetIdCaptor = ArgumentCaptor.forClass(String.class); final ArgumentCaptor<String> targetIdCaptor = ArgumentCaptor.forClass(String.class);
final ArgumentCaptor<URI> uriCaptor = ArgumentCaptor.forClass(URI.class); final ArgumentCaptor<URI> uriCaptor = ArgumentCaptor.forClass(URI.class);
when(controllerManagementMock.findOrRegisterTargetIfItDoesNotexist(targetIdCaptor.capture(), when(controllerManagementMock.findOrRegisterTargetIfItDoesNotexist(targetIdCaptor.capture(),
uriCaptor.capture())).thenReturn(null); uriCaptor.capture())).thenReturn(null);
// test amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost");
amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT);
// verify // verify
assertThat(targetIdCaptor.getValue()).isEqualTo(knownThingId); assertThat(targetIdCaptor.getValue()).as("Thing id is wrong").isEqualTo(knownThingId);
assertThat(uriCaptor.getValue().toString()).isEqualTo("amqp://MyTest"); 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); final Message message = messageConverter.toMessage("", messageProperties);
try { 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"); fail("IllegalArgumentException was excepeted since no replyTo header was set");
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
// test ok - exception was excepted // test ok - exception was excepted
@@ -170,7 +171,7 @@ public class AmqpMessageHandlerServiceTest {
final MessageProperties messageProperties = createMessageProperties(MessageType.THING_CREATED); final MessageProperties messageProperties = createMessageProperties(MessageType.THING_CREATED);
final Message message = messageConverter.toMessage(new byte[0], messageProperties); final Message message = messageConverter.toMessage(new byte[0], messageProperties);
try { 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"); fail("IllegalArgumentException was excepeted since no thingID was set");
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
// test ok - exception was excepted // test ok - exception was excepted
@@ -186,7 +187,7 @@ public class AmqpMessageHandlerServiceTest {
final Message message = messageConverter.toMessage(new byte[0], messageProperties); final Message message = messageConverter.toMessage(new byte[0], messageProperties);
try { try {
amqpMessageHandlerService.onMessage(message, type, TENANT); amqpMessageHandlerService.onMessage(message, type, TENANT, "vHost");
fail("IllegalArgumentException was excepeted due to unknown message type"); fail("IllegalArgumentException was excepeted due to unknown message type");
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
// test ok - exception was excepted // test ok - exception was excepted
@@ -199,21 +200,21 @@ public class AmqpMessageHandlerServiceTest {
final MessageProperties messageProperties = createMessageProperties(MessageType.EVENT); final MessageProperties messageProperties = createMessageProperties(MessageType.EVENT);
final Message message = new Message(new byte[0], messageProperties); final Message message = new Message(new byte[0], messageProperties);
try { try {
amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost");
fail(); fail("IllegalArgumentException was excepeted due to unknown message type");
} catch (final IllegalArgumentException e) { } catch (final IllegalArgumentException e) {
} }
try { try {
messageProperties.setHeader(MessageHeaderKey.TOPIC, "wrongTopic"); messageProperties.setHeader(MessageHeaderKey.TOPIC, "wrongTopic");
amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost");
fail(); fail("IllegalArgumentException was excepeted due to unknown topic");
} catch (final IllegalArgumentException e) { } catch (final IllegalArgumentException e) {
} }
messageProperties.setHeader(MessageHeaderKey.TOPIC, EventTopic.CANCEL_DOWNLOAD.name()); messageProperties.setHeader(MessageHeaderKey.TOPIC, EventTopic.CANCEL_DOWNLOAD.name());
try { 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"); fail("IllegalArgumentException was excepeted because there was no event topic");
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
// test ok - exception was excepted // test ok - exception was excepted
@@ -232,7 +233,7 @@ public class AmqpMessageHandlerServiceTest {
messageProperties); messageProperties);
try { 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"); fail("IllegalArgumentException was excepeted since no action id was set");
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
// test ok - exception was excepted // test ok - exception was excepted
@@ -249,7 +250,7 @@ public class AmqpMessageHandlerServiceTest {
messageProperties); messageProperties);
try { 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"); fail("IllegalArgumentException was excepeted since no action id was set");
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
// test ok - exception was excepted // test ok - exception was excepted
@@ -267,12 +268,13 @@ public class AmqpMessageHandlerServiceTest {
// test // test
final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(),
TENANT); TENANT, "vHost");
// verify // verify
final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage);
assertThat(downloadResponse).isNotNull(); assertThat(downloadResponse).as("Message body should not null").isNotNull();
assertThat(downloadResponse.getResponseCode()).isEqualTo(HttpStatus.NOT_FOUND.value()); assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong")
.isEqualTo(HttpStatus.NOT_FOUND.value());
} }
@Test @Test
@@ -290,12 +292,13 @@ public class AmqpMessageHandlerServiceTest {
// test // test
final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(),
TENANT); TENANT, "vHost");
// verify // verify
final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage);
assertThat(downloadResponse).isNotNull(); assertThat(downloadResponse).as("Message body should not null").isNotNull();
assertThat(downloadResponse.getResponseCode()).isEqualTo(HttpStatus.NOT_FOUND.value()); assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong")
.isEqualTo(HttpStatus.NOT_FOUND.value());
} }
@Test @Test
@@ -321,14 +324,16 @@ public class AmqpMessageHandlerServiceTest {
// test // test
final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(),
TENANT); TENANT, "vHost");
// verify // verify
final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage);
assertThat(downloadResponse).isNotNull(); assertThat(downloadResponse).as("Message body should not null").isNotNull();
assertThat(downloadResponse.getResponseCode()).isEqualTo(HttpStatus.OK.value()); assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong")
assertThat(downloadResponse.getArtifact().getSize()).isEqualTo(1L); .isEqualTo(HttpStatus.OK.value());
assertThat(downloadResponse.getDownloadUrl()).startsWith("http://localhost/api/v1/downloadserver/downloadId/"); 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 @Test
@@ -355,7 +360,7 @@ public class AmqpMessageHandlerServiceTest {
messageProperties); messageProperties);
// test // test
amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT); amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost");
// verify // verify
final ArgumentCaptor<TargetAssignDistributionSetEvent> captorTargetAssignDistributionSetEvent = ArgumentCaptor final ArgumentCaptor<TargetAssignDistributionSetEvent> captorTargetAssignDistributionSetEvent = ArgumentCaptor
@@ -364,9 +369,11 @@ public class AmqpMessageHandlerServiceTest {
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = captorTargetAssignDistributionSetEvent final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = captorTargetAssignDistributionSetEvent
.getValue(); .getValue();
assertThat(targetAssignDistributionSetEvent.getControllerId()).isEqualTo("target1"); assertThat(targetAssignDistributionSetEvent.getControllerId()).as("event has wrong controller id")
assertThat(targetAssignDistributionSetEvent.getActionId()).isEqualTo(22L); .isEqualTo("target1");
assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).isEqualTo(softwareModuleList); assertThat(targetAssignDistributionSetEvent.getActionId()).as("event has wrong action id").isEqualTo(22L);
assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).as("event has wrong sofware modules")
.isEqualTo(softwareModuleList);
} }

View File

@@ -11,6 +11,9 @@ package org.eclipse.hawkbit.util;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; 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.TestDataUtil;
import org.eclipse.hawkbit.dmf.json.model.Artifact; import org.eclipse.hawkbit.dmf.json.model.Artifact;
import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet;
@@ -20,6 +23,7 @@ import org.eclipse.hawkbit.tenancy.TenantAware;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; 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.Description;
import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Features;
@@ -31,6 +35,8 @@ import ru.yandex.qatools.allure.annotations.Stories;
*/ */
@Features("Component Tests - Artifact URL Handler") @Features("Component Tests - Artifact URL Handler")
@Stories("Test to generate the artifact download URL") @Stories("Test to generate the artifact download URL")
@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, TestConfiguration.class,
AmqpTestConfiguration.class })
public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB {
@Autowired @Autowired
@@ -53,18 +59,22 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest
@Description("Tests generate the http download url") @Description("Tests generate the http download url")
public void testHttpUrl() { public void testHttpUrl() {
final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTP); final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTP);
assertEquals("http://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId assertEquals("http is build incorrect",
+ "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" "http://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId
+ localArtifact.getFilename(), url); + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/"
+ localArtifact.getFilename(),
url);
} }
@Test @Test
@Description("Tests generate the https download url") @Description("Tests generate the https download url")
public void testHttpsUrl() { public void testHttpsUrl() {
final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTPS); final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTPS);
assertEquals("https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId assertEquals("https is build incorrect",
+ "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" "https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId
+ localArtifact.getFilename(), url); + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/"
+ localArtifact.getFilename(),
url);
} }
@Test @Test
@@ -72,7 +82,7 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest
public void testCoapUrl() { public void testCoapUrl() {
final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.COAP); final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.COAP);
assertEquals("coap://127.0.0.1:5683/fw/" + tenantAware.getCurrentTenant() + "/" + controllerId + "/sha1/" assertEquals("coap is build incorrect", "coap://127.0.0.1:5683/fw/" + tenantAware.getCurrentTenant() + "/"
+ localArtifact.getSha1Hash(), url); + controllerId + "/sha1/" + localArtifact.getSha1Hash(), url);
} }
} }

View File

@@ -215,7 +215,7 @@
<plugin> <plugin>
<groupId>com.ethlo.persistence.tools</groupId> <groupId>com.ethlo.persistence.tools</groupId>
<artifactId>eclipselink-maven-plugin</artifactId> <artifactId>eclipselink-maven-plugin</artifactId>
<version>1.1-SNAPSHOT</version> <version>2.6.2</version>
<executions> <executions>
<execution> <execution>
<phase>process-classes</phase> <phase>process-classes</phase>

View File

@@ -48,7 +48,9 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager {
&& !definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".deleteTenant") && !definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".deleteTenant")
&& !definition.getName() && !definition.getName()
.startsWith(SystemManagement.class.getCanonicalName() + ".currentTenantKeyGenerator") .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(); final String currentTenant = tenantAware.getCurrentTenant();
if (currentTenant == null) { if (currentTenant == null) {

View File

@@ -21,7 +21,7 @@ import java.util.List;
*/ */
public class ListReportSeries extends AbstractReportSeries { public class ListReportSeries extends AbstractReportSeries {
private final List<Number> data = new ArrayList<Number>(); private final List<Number> data = new ArrayList<>();
/** /**
* @param name * @param name

View File

@@ -330,7 +330,7 @@ public class DeploymentManagement {
// one we have been switched to canceling state because for targets // one we have been switched to canceling state because for targets
// which we have changed to // which we have changed to
// canceling we don't want to publish the new action update event. // canceling we don't want to publish the new action update event.
final Set<Long> targetIdsCancellList = new HashSet<Long>(); final Set<Long> targetIdsCancellList = new HashSet<>();
targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids))); targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids)));
// cancel all scheduled actions which are in-active, these actions were // cancel all scheduled actions which are in-active, these actions were
@@ -435,7 +435,7 @@ public class DeploymentManagement {
*/ */
private Set<Long> overrideObsoleteUpdateActions(final List<Long> targetsIds) { private Set<Long> overrideObsoleteUpdateActions(final List<Long> targetsIds) {
final Set<Long> cancelledTargetIds = new HashSet<Long>(); final Set<Long> cancelledTargetIds = new HashSet<>();
// Figure out if there are potential target/action combinations that // Figure out if there are potential target/action combinations that
// need to be considered // need to be considered
@@ -779,8 +779,7 @@ public class DeploymentManagement {
multiselect.where(cb.equal(actionRoot.get(Action_.target), target)); multiselect.where(cb.equal(actionRoot.get(Action_.target), target));
multiselect.orderBy(cb.desc(actionRoot.get(Action_.id))); multiselect.orderBy(cb.desc(actionRoot.get(Action_.id)));
multiselect.groupBy(actionRoot.get(Action_.id)); multiselect.groupBy(actionRoot.get(Action_.id));
final List<ActionWithStatusCount> resultList = entityManager.createQuery(multiselect).getResultList(); return entityManager.createQuery(multiselect).getResultList();
return resultList;
} }
/** /**

View File

@@ -57,7 +57,7 @@ public class NoCountPagingRepository {
*/ */
public <T, I extends Serializable> Slice<T> findAll(final Specification<T> spec, final Pageable pageable, public <T, I extends Serializable> Slice<T> findAll(final Specification<T> spec, final Pageable pageable,
final Class<T> domainClass) { final Class<T> domainClass) {
final SimpleJpaNoCountRepository<T, I> noCountDao = new SimpleJpaNoCountRepository<T, I>(domainClass, em); final SimpleJpaNoCountRepository<T, I> noCountDao = new SimpleJpaNoCountRepository<>(domainClass, em);
return noCountDao.findAll(spec, pageable); return noCountDao.findAll(spec, pageable);
} }
@@ -76,7 +76,7 @@ public class NoCountPagingRepository {
* org.springframework.data.domain.Pageable) * org.springframework.data.domain.Pageable)
*/ */
public <T, I extends Serializable> Slice<T> findAll(final Pageable pageable, final Class<T> domainClass) { public <T, I extends Serializable> Slice<T> findAll(final Pageable pageable, final Class<T> domainClass) {
final SimpleJpaNoCountRepository<T, I> noCountDao = new SimpleJpaNoCountRepository<T, I>(domainClass, em); final SimpleJpaNoCountRepository<T, I> noCountDao = new SimpleJpaNoCountRepository<>(domainClass, em);
return noCountDao.findAll(pageable); return noCountDao.findAll(pageable);
} }
@@ -120,7 +120,7 @@ public class NoCountPagingRepository {
final List<T> content = query.getResultList(); final List<T> content = query.getResultList();
return new PageImpl<T>(content, pageable, content.size()); return new PageImpl<>(content, pageable, content.size());
} }
} }
} }

View File

@@ -160,7 +160,7 @@ public class TagManagement {
public void deleteTargetTag(@NotEmpty final String targetTagName) { public void deleteTargetTag(@NotEmpty final String targetTagName) {
final TargetTag tag = targetTagRepository.findByNameEquals(targetTagName); final TargetTag tag = targetTagRepository.findByNameEquals(targetTagName);
final List<Target> changed = new LinkedList<Target>(); final List<Target> changed = new LinkedList<>();
for (final Target target : targetRepository.findByTag(tag)) { for (final Target target : targetRepository.findByTag(tag)) {
target.getTags().remove(tag); target.getTags().remove(tag);
changed.add(target); changed.add(target);
@@ -311,7 +311,7 @@ public class TagManagement {
public void deleteDistributionSetTag(@NotEmpty final String tagName) { public void deleteDistributionSetTag(@NotEmpty final String tagName) {
final DistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName); final DistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName);
final List<DistributionSet> changed = new LinkedList<DistributionSet>(); final List<DistributionSet> changed = new LinkedList<>();
for (final DistributionSet set : distributionSetRepository.findByTag(tag)) { for (final DistributionSet set : distributionSetRepository.findByTag(tag)) {
set.getTags().remove(tag); set.getTags().remove(tag);
changed.add(set); changed.add(set);

View File

@@ -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 = { @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") }) @Index(name = "sp_idx_action_status_msgs_01", columnList = "action_status_id") })
@Column(name = "detail_message", length = 512) @Column(name = "detail_message", length = 512)
private final List<String> messages = new ArrayList<String>(); private final List<String> messages = new ArrayList<>();
/** /**
* Creates a new {@link ActionStatus} object. * Creates a new {@link ActionStatus} object.

View File

@@ -87,7 +87,7 @@ public class Target extends NamedEntity implements Persistable<Long> {
@JoinTable(name = "sp_target_target_tag", joinColumns = { @JoinTable(name = "sp_target_target_tag", joinColumns = {
@JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_target") ) }, inverseJoinColumns = { @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") ) }) @JoinColumn(name = "tag", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_tag") ) })
private Set<TargetTag> tags = new HashSet<TargetTag>(); private Set<TargetTag> tags = new HashSet<>();
@CascadeOnDelete @CascadeOnDelete
@OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = { CascadeType.REMOVE }) @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = { CascadeType.REMOVE })

View File

@@ -54,7 +54,7 @@ public class MethodSecurityUtil {
if (!METHOD_SECURITY_EXCLUSION.contains(method.getName()) && !method.isSynthetic() if (!METHOD_SECURITY_EXCLUSION.contains(method.getName()) && !method.isSynthetic()
&& Modifier.isPublic(method.getModifiers())) { && Modifier.isPublic(method.getModifiers())) {
final PreAuthorize annotation = method.getAnnotation(PreAuthorize.class); 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?") "The public method " + method.getName() + " is not annoated with @PreAuthorize, security leak?")
.isNotNull(); .isNotNull();
} }

View File

@@ -150,14 +150,14 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB {
ExternalArtifact result = artifactManagement.createExternalArtifact(provider, null, sm.getId()); 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(externalArtifactRepository.findAll()).contains(result).hasSize(1);
assertThat(result.getSoftwareModule().getId()).isEqualTo(sm.getId()); assertThat(result.getSoftwareModule().getId()).isEqualTo(sm.getId());
assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/{version}/"); assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/{version}/");
assertThat(result.getExternalArtifactProvider()).isEqualTo(provider); assertThat(result.getExternalArtifactProvider()).isEqualTo(provider);
result = artifactManagement.createExternalArtifact(provider, "/test", sm2.getId()); 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(externalArtifactRepository.findAll()).contains(result).hasSize(2);
assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/test"); assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/test");
assertThat(result.getExternalArtifactProvider()).isEqualTo(provider); assertThat(result.getExternalArtifactProvider()).isEqualTo(provider);
@@ -176,7 +176,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB {
"https://fhghdfjgh", "/{version}/"); "https://fhghdfjgh", "/{version}/");
final ExternalArtifact result = artifactManagement.createExternalArtifact(provider, null, sm.getId()); 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); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(1);
artifactManagement.deleteExternalArtifact(result.getId()); artifactManagement.deleteExternalArtifact(result.getId());
@@ -348,7 +348,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB {
final LocalArtifact result = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), final LocalArtifact result = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random),
sm.getId(), "file1", false); 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())); artifactManagement.loadLocalArtifactBinary(result).getFileInputStream()));
} }

View File

@@ -19,7 +19,6 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.AbstractIntegrationTest;
import org.eclipse.hawkbit.Constants; import org.eclipse.hawkbit.Constants;
@@ -98,8 +97,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
final List<ActionWithStatusCount> findActionsWithStatusCountByTarget = deploymentManagement final List<ActionWithStatusCount> findActionsWithStatusCountByTarget = deploymentManagement
.findActionsWithStatusCountByTargetOrderByIdDesc(testTarget.get(0)); .findActionsWithStatusCountByTargetOrderByIdDesc(testTarget.get(0));
assertThat(findActionsWithStatusCountByTarget).hasSize(1); assertThat(findActionsWithStatusCountByTarget).as("wrong action size").hasSize(1);
assertThat(findActionsWithStatusCountByTarget.get(0).getActionStatusCount()).isEqualTo(3L); assertThat(findActionsWithStatusCountByTarget.get(0).getActionStatusCount()).as("wrong action status size")
.isEqualTo(3L);
} }
@Test @Test
@@ -115,27 +115,32 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
final DistributionSetTag tag = tagManagement.createDistributionSetTag(new DistributionSetTag("Tag1")); final DistributionSetTag tag = tagManagement.createDistributionSetTag(new DistributionSetTag("Tag1"));
final List<DistributionSet> assignedDS = distributionSetManagement.assignTag(assignDS, tag); final List<DistributionSet> assignedDS = distributionSetManagement.assignTag(assignDS, tag);
assertThat(assignedDS.size()).isEqualTo(4); assertThat(assignedDS.size()).as("assigned ds has wrong size").isEqualTo(4);
assignedDS.forEach(ds -> assertThat(ds.getTags().size()).isEqualTo(1)); assignedDS.forEach(ds -> assertThat(ds.getTags().size()).as("ds has wrong tag size").isEqualTo(1));
DistributionSetTag findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1"); 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), final DistributionSet unAssignDS = distributionSetManagement.unAssignTag(assignDS.get(0),
findDistributionSetTag); findDistributionSetTag);
assertThat(unAssignDS.getId()).isEqualTo(assignDS.get(0)); assertThat(unAssignDS.getId()).as("unassigned ds is wrong").isEqualTo(assignDS.get(0));
assertThat(unAssignDS.getTags().size()).isEqualTo(0); assertThat(unAssignDS.getTags().size()).as("unassigned ds has wrong tag size").isEqualTo(0);
findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1"); 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<DistributionSet> unAssignTargets = distributionSetManagement final List<DistributionSet> unAssignTargets = distributionSetManagement
.unAssignAllDistributionSetsByTag(findDistributionSetTag); .unAssignAllDistributionSetsByTag(findDistributionSetTag);
findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1"); findDistributionSetTag = tagManagement.findDistributionSetTag("Tag1");
assertThat(findDistributionSetTag.getAssignedToDistributionSet().size()).isEqualTo(0); assertThat(findDistributionSetTag.getAssignedToDistributionSet().size()).as("ds tag has wrong ds size")
assertThat(unAssignTargets.size()).isEqualTo(3); .isEqualTo(0);
unAssignTargets.forEach(target -> assertThat(target.getTags().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 @Test
@@ -156,7 +161,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
targetManagement.findAllTargetIds().forEach(targetIdName -> { targetManagement.findAllTargetIds().forEach(targetIdName -> {
assertThat(deploymentManagement.findActiveActionsByTarget( 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 // check initial status
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.UNKNOWN); .as("target has update status").isEqualTo(TargetUpdateStatus.UNKNOWN);
// assign the two sets in a row // assign the two sets in a row
Action firstAction = assignSet(target, dsFirst); Action firstAction = assignSet(target, dsFirst);
Action secondAction = assignSet(target, dsSecond); Action secondAction = assignSet(target, dsSecond);
assertThat(actionRepository.findAll()).hasSize(2); assertThat(actionRepository.findAll()).as("wrong size of actions").hasSize(2);
assertThat(actionStatusRepository.findAll()).hasSize(2); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(2);
// we cancel second -> back to first // we cancel second -> back to first
deploymentManagement.cancelAction(secondAction, deploymentManagement.cancelAction(secondAction,
@@ -196,10 +202,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
secondAction.setStatus(Status.CANCELED); secondAction.setStatus(Status.CANCELED);
controllerManagement.addCancelActionStatus( controllerManagement.addCancelActionStatus(
new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction); new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction);
assertThat(actionStatusRepository.findAll()).hasSize(4); assertThat(actionStatusRepository.findAll()).as("wrong size of actions status").hasSize(4);
assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(dsFirst); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).as("wrong ds")
.isEqualTo(dsFirst);
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.PENDING); .as("wrong update status").isEqualTo(TargetUpdateStatus.PENDING);
// we cancel first -> back to installed // we cancel first -> back to installed
deploymentManagement.cancelAction(firstAction, deploymentManagement.cancelAction(firstAction,
@@ -209,11 +216,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
firstAction.setStatus(Status.CANCELED); firstAction.setStatus(Status.CANCELED);
controllerManagement.addCancelActionStatus( controllerManagement.addCancelActionStatus(
new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction); 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()) assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet())
.isEqualTo(dsInstalled); .as("wrong assigned ds").isEqualTo(dsInstalled);
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.IN_SYNC); .as("wrong update status").isEqualTo(TargetUpdateStatus.IN_SYNC);
} }
@Test @Test
@@ -235,14 +242,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// check initial status // check initial status
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.UNKNOWN); .as("wrong update status").isEqualTo(TargetUpdateStatus.UNKNOWN);
// assign the two sets in a row // assign the two sets in a row
Action firstAction = assignSet(target, dsFirst); Action firstAction = assignSet(target, dsFirst);
Action secondAction = assignSet(target, dsSecond); Action secondAction = assignSet(target, dsSecond);
assertThat(actionRepository.findAll()).hasSize(2); assertThat(actionRepository.findAll()).as("wrong size of actions").hasSize(2);
assertThat(actionStatusRepository.findAll()).hasSize(2); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(2);
// we cancel first -> second is left // we cancel first -> second is left
deploymentManagement.cancelAction(firstAction, deploymentManagement.cancelAction(firstAction,
@@ -252,26 +259,28 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
firstAction.setStatus(Status.CANCELED); firstAction.setStatus(Status.CANCELED);
controllerManagement.addCancelActionStatus( controllerManagement.addCancelActionStatus(
new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction); new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction);
assertThat(actionStatusRepository.findAll()).hasSize(4); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(4);
assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(dsSecond); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet())
.as("wrong assigned ds").isEqualTo(dsSecond);
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) 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 // we cancel second -> remain assigned until finished cancellation
deploymentManagement.cancelAction(secondAction, deploymentManagement.cancelAction(secondAction,
targetManagement.findTargetByControllerID(target.getControllerId())); targetManagement.findTargetByControllerID(target.getControllerId()));
secondAction = deploymentManagement.findActionWithDetails(secondAction.getId()); secondAction = deploymentManagement.findActionWithDetails(secondAction.getId());
assertThat(actionStatusRepository.findAll()).hasSize(5); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(5);
assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(dsSecond); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet())
.as("wrong assigned ds").isEqualTo(dsSecond);
// confirm cancellation // confirm cancellation
secondAction.setStatus(Status.CANCELED); secondAction.setStatus(Status.CANCELED);
controllerManagement.addCancelActionStatus( controllerManagement.addCancelActionStatus(
new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction); new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction);
// cancelled success -> back to dsInstalled // cancelled success -> back to dsInstalled
assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet())
.isEqualTo(dsInstalled); .as("wrong installed ds").isEqualTo(dsInstalled);
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.IN_SYNC); .as("wrong target info update status").isEqualTo(TargetUpdateStatus.IN_SYNC);
} }
@Test @Test
@@ -290,13 +299,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// verify initial status // verify initial status
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.UNKNOWN); .as("wrong target info update status").isEqualTo(TargetUpdateStatus.UNKNOWN);
Action assigningAction = assignSet(target, ds); Action assigningAction = assignSet(target, ds);
// verify assignment // verify assignment
assertThat(actionRepository.findAll()).hasSize(1); assertThat(actionRepository.findAll()).as("wrong size of action").hasSize(1);
assertThat(actionStatusRepository.findAll()).hasSize(1); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(1);
target = targetManagement.findTargetByControllerID(target.getControllerId()); target = targetManagement.findTargetByControllerID(target.getControllerId());
@@ -309,11 +318,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
assigningAction = deploymentManagement.findActionWithDetails(assigningAction.getId()); assigningAction = deploymentManagement.findActionWithDetails(assigningAction.getId());
// verify // verify
assertThat(assigningAction.getStatus()).isEqualTo(Status.CANCELED); assertThat(assigningAction.getStatus()).as("wrong size of status").isEqualTo(Status.CANCELED);
assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet())
.isEqualTo(dsInstalled); .as("wrong assigned ds").isEqualTo(dsInstalled);
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.IN_SYNC); .as("wrong target update status").isEqualTo(TargetUpdateStatus.IN_SYNC);
} }
@Test @Test
@@ -332,13 +341,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// verify initial status // verify initial status
assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.UNKNOWN); .as("wrong update status").isEqualTo(TargetUpdateStatus.UNKNOWN);
final Action assigningAction = assignSet(target, ds); final Action assigningAction = assignSet(target, ds);
// verify assignment // verify assignment
assertThat(actionRepository.findAll()).hasSize(1); assertThat(actionRepository.findAll()).as("wrong size of action").hasSize(1);
assertThat(actionStatusRepository.findAll()).hasSize(1); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(1);
// force quit assignment // force quit assignment
try { try {
@@ -353,11 +362,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
deploymentManagement.assignDistributionSet(ds.getId(), new String[] { target.getControllerId() }); deploymentManagement.assignDistributionSet(ds.getId(), new String[] { target.getControllerId() });
assertThat( assertThat(
targetManagement.findTargetByControllerID(target.getControllerId()).getTargetInfo().getUpdateStatus()) targetManagement.findTargetByControllerID(target.getControllerId()).getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.PENDING); .as("wrong update status").isEqualTo(TargetUpdateStatus.PENDING);
assertThat(targetManagement.findTargetByControllerID(target.getControllerId()).getAssignedDistributionSet()) 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); 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; return action;
} }
@@ -389,26 +398,30 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
deploymentManagement.assignDistributionSet(ds, savedDeployedTargets); deploymentManagement.assignDistributionSet(ds, savedDeployedTargets);
// verify that one Action for each assignDistributionSet // 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<Target> allFoundTargets = targetManagement.findTargetsAll(pageReq).getContent(); final Iterable<Target> allFoundTargets = targetManagement.findTargetsAll(pageReq).getContent();
assertThat(allFoundTargets).containsAll(savedDeployedTargets).containsAll(savedNakedTargets); assertThat(allFoundTargets).as("founded targets are wrong").containsAll(savedDeployedTargets)
assertThat(savedDeployedTargets).doesNotContain(Iterables.toArray(savedNakedTargets, Target.class)); .containsAll(savedNakedTargets);
assertThat(savedNakedTargets).doesNotContain(Iterables.toArray(savedDeployedTargets, Target.class)); 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) { for (final Target myt : savedNakedTargets) {
final Target t = targetManagement.findTargetByControllerID(myt.getControllerId()); 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) { for (final Target myt : savedDeployedTargets) {
final Target t = targetManagement.findTargetByControllerID(myt.getControllerId()); final Target t = targetManagement.findTargetByControllerID(myt.getControllerId());
final List<Action> activeActionsByTarget = deploymentManagement.findActiveActionsByTarget(t); final List<Action> activeActionsByTarget = deploymentManagement.findActiveActionsByTarget(t);
assertThat(activeActionsByTarget).isNotEmpty(); assertThat(activeActionsByTarget).as("action should not be empty").isNotEmpty();
assertThat(t.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); assertThat(t.getTargetInfo().getUpdateStatus()).as("wrong target update status")
.isEqualTo(TargetUpdateStatus.PENDING);
for (final Action ua : activeActionsByTarget) { 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 // give some chance to receive events asynchronously
Thread.sleep(300); Thread.sleep(300);
final List<TargetAssignDistributionSetEvent> events = eventHandlerMock.getEvents(1, TimeUnit.MILLISECONDS); final List<TargetAssignDistributionSetEvent> events = eventHandlerMock.getEvents(1, TimeUnit.MILLISECONDS);
assertThat(events).isEmpty(); assertThat(events).as("events should be empty").isEmpty();
final EventHandlerMock eventHandlerMockAfterCompletionOfDs = new EventHandlerMock(10); final EventHandlerMock eventHandlerMockAfterCompletionOfDs = new EventHandlerMock(10);
eventBus.register(eventHandlerMockAfterCompletionOfDs); 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, assertTargetAssignDistributionSetEvents(targets, nowComplete,
eventHandlerMockAfterCompletionOfDs.getEvents(10, TimeUnit.SECONDS)); eventHandlerMockAfterCompletionOfDs.getEvents(10, TimeUnit.SECONDS));
} }
@@ -492,7 +506,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// retrieving all Actions created by the assignDistributionSet call // retrieving all Actions created by the assignDistributionSet call
final Page<Action> page = actionRepository.findAll(pageReq); final Page<Action> page = actionRepository.findAll(pageReq);
// and verify the number // 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 // only records retrieved from the DB can be evaluated to be sure that
// all fields are // all fields are
@@ -503,17 +518,20 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
final Iterable<Target> undeployedTargetsFromDB = targetRepository.findAll(undeployedTargetIDs); final Iterable<Target> undeployedTargetsFromDB = targetRepository.findAll(undeployedTargetIDs);
// test that number of Targets // test that number of Targets
assertThat(allFoundTargets.spliterator().getExactSizeIfKnown()) assertThat(allFoundTargets.spliterator().getExactSizeIfKnown()).as("number of target is wrong")
.isEqualTo(deployedTargetsFromDB.spliterator().getExactSizeIfKnown() .isEqualTo(deployedTargetsFromDB.spliterator().getExactSizeIfKnown()
+ undeployedTargetsFromDB.spliterator().getExactSizeIfKnown()); + undeployedTargetsFromDB.spliterator().getExactSizeIfKnown());
assertThat(deployedTargetsFromDB.spliterator().getExactSizeIfKnown()).isEqualTo(noOfDeployedTargets); assertThat(deployedTargetsFromDB.spliterator().getExactSizeIfKnown()).as("number of target is wrong")
assertThat(undeployedTargetsFromDB.spliterator().getExactSizeIfKnown()).isEqualTo(noOfUndeployedTargets); .isEqualTo(noOfDeployedTargets);
assertThat(undeployedTargetsFromDB.spliterator().getExactSizeIfKnown()).as("number of target is wrong")
.isEqualTo(noOfUndeployedTargets);
// test the content of different lists // test the content of different lists
assertThat(allFoundTargets).containsAll(deployedTargetsFromDB).containsAll(undeployedTargetsFromDB); assertThat(allFoundTargets).as("content of founded target is wrong").containsAll(deployedTargetsFromDB)
assertThat(deployedTargetsFromDB).containsAll(savedDeployedTargets) .containsAll(undeployedTargetsFromDB);
assertThat(deployedTargetsFromDB).as("content of deployed target is wrong").containsAll(savedDeployedTargets)
.doesNotContain(Iterables.toArray(undeployedTargetsFromDB, Target.class)); .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)); .doesNotContain(Iterables.toArray(deployedTargetsFromDB, Target.class));
// For each of the 4 targets 1 distribution sets gets assigned // 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); final DistributionSet dsC = deployResWithDsC.getDistributionSets().get(0);
// retrieving the UpdateActions created by the assignments // retrieving the UpdateActions created by the assignments
final Action updActA = actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(0); actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(0);
final Action updActB = actionRepository.findByDistributionSet(pageRequest, dsB).getContent().get(0); actionRepository.findByDistributionSet(pageRequest, dsB).getContent().get(0);
final Action updActC = actionRepository.findByDistributionSet(pageRequest, dsC).getContent().get(0); actionRepository.findByDistributionSet(pageRequest, dsC).getContent().get(0);
// verifying the correctness of the assignments // verifying the correctness of the assignments
for (final Target t : deployResWithDsA.getDeployedTargets()) { 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() assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo()
.getInstalledDistributionSet()).isNull(); .getInstalledDistributionSet()).as("installed ds should be null").isNull();
} }
for (final Target t : deployResWithDsB.getDeployedTargets()) { 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() assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo()
.getInstalledDistributionSet()).isNull(); .getInstalledDistributionSet()).as("installed ds should be null").isNull();
} }
for (final Target t : deployResWithDsC.getDeployedTargets()) { for (final Target t : deployResWithDsC.getDeployedTargets()) {
assertThat(t.getAssignedDistributionSet().getId()).isEqualTo(dsC.getId()); assertThat(t.getAssignedDistributionSet().getId()).isEqualTo(dsC.getId());
assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo() assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo()
.getInstalledDistributionSet()).isNull(); .getInstalledDistributionSet()).as("installed ds should not be null").isNull();
assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.PENDING); .as("wrong target info update status").isEqualTo(TargetUpdateStatus.PENDING);
} }
final List<Target> updatedTsDsA = sendUpdateActionStatusToTargets(dsA, deployResWithDsA.getDeployedTargets(), final List<Target> updatedTsDsA = sendUpdateActionStatusToTargets(dsA, deployResWithDsA.getDeployedTargets(),
Status.FINISHED, new String[] { "alles gut" }); Status.FINISHED, new String[] { "alles gut" });
// verify, that dsA is deployed correctly // 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) { for (final Target t_ : updatedTsDsA) {
final Target t = targetManagement.findTargetByControllerID(t_.getControllerId()); 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() assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo()
.getInstalledDistributionSet()).isEqualTo(dsA); .getInstalledDistributionSet()).as("installed ds is wrong").isEqualTo(dsA);
assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus()) assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus())
.isEqualTo(TargetUpdateStatus.IN_SYNC); .as("wrong target info update status").isEqualTo(TargetUpdateStatus.IN_SYNC);
assertThat(deploymentManagement.findActiveActionsByTarget(t)).hasSize(0); assertThat(deploymentManagement.findActiveActionsByTarget(t)).as("no actions should be active").hasSize(0);
} }
// deploy dsA to the target which already have dsB deployed -> must // deploy dsA to the target which already have dsB deployed -> must
@@ -585,18 +603,18 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// UpdateAction for dsA // UpdateAction for dsA
final Iterable<Target> deployed2DS = deploymentManagement final Iterable<Target> deployed2DS = deploymentManagement
.assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets()).getAssignedTargets(); .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).as("deployed ds is wrong").containsAll(deployResWithDsB.getDeployedTargets());
assertThat(deployed2DS).hasSameSizeAs(deployResWithDsB.getDeployedTargets()); assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsB.getDeployedTargets());
for (final Target t_ : deployed2DS) { for (final Target t_ : deployed2DS) {
final Target t = targetManagement.findTargetByControllerID(t_.getControllerId()); 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() assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo()
.getInstalledDistributionSet()).isNull(); .getInstalledDistributionSet()).as("installed ds should be null").isNull();
assertThat(targetManagement.findTargetByControllerID(t.getControllerId()).getTargetInfo().getUpdateStatus()) 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()); distributionSetManagement.deleteDistributionSet(dsA.getId());
dsA = distributionSetManagement.findDistributionSetById(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 // // verify that the ds is not physically deleted
for (final DistributionSet ds : deploymentResult.getDistributionSets()) { for (final DistributionSet ds : deploymentResult.getDistributionSets()) {
distributionSetManagement.deleteDistributionSet(ds.getId()); distributionSetManagement.deleteDistributionSet(ds.getId());
final DistributionSet foundDS = distributionSetManagement.findDistributionSetById(ds.getId()); final DistributionSet foundDS = distributionSetManagement.findDistributionSetById(ds.getId());
assertThat(foundDS).isNotNull(); assertThat(foundDS).as("founded should not be null").isNotNull();
assertThat(foundDS.isDeleted()).isTrue(); assertThat(foundDS.isDeleted()).as("founded ds should be deleted").isTrue();
} }
// verify that deleted attribute is used correctly // verify that deleted attribute is used correctly
List<DistributionSet> allFoundDS = distributionSetManagement.findDistributionSetsAll(pageReq, false, true) List<DistributionSet> allFoundDS = distributionSetManagement.findDistributionSetsAll(pageReq, false, true)
.getContent(); .getContent();
assertThat(allFoundDS.size()).isEqualTo(0); assertThat(allFoundDS.size()).as("no ds should be founded").isEqualTo(0);
allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, true, true).getContent(); 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()) { for (final DistributionSet ds : deploymentResult.getDistributionSets()) {
sendUpdateActionStatusToTargets(ds, deploymentResult.getDeployedTargets(), Status.FINISHED, sendUpdateActionStatusToTargets(ds, deploymentResult.getDeployedTargets(), Status.FINISHED,
@@ -658,9 +676,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// successfully and no activeAction is referring to created distribution // successfully and no activeAction is referring to created distribution
// sets // sets
allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, false, true).getContent(); 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(); 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"); "blabla alles gut");
} }
assertThat(targetManagement.countTargetsAll()).isNotZero(); assertThat(targetManagement.countTargetsAll()).as("size of targets is wrong").isNotZero();
assertThat(actionStatusRepository.count()).isNotZero(); assertThat(actionStatusRepository.count()).as("size of action status is wrong").isNotZero();
targetManagement targetManagement
.deleteTargets(deploymentResult.getUndeployedTargetIDs().toArray(new Long[noOfUndeployedTargets])); .deleteTargets(deploymentResult.getUndeployedTargetIDs().toArray(new Long[noOfUndeployedTargets]));
targetManagement.deleteTargets(deploymentResult.getDeployedTargetIDs().toArray(new Long[noOfDeployedTargets])); targetManagement.deleteTargets(deploymentResult.getDeployedTargetIDs().toArray(new Long[noOfDeployedTargets]));
assertThat(targetManagement.countTargetsAll()).isZero(); assertThat(targetManagement.countTargetsAll()).as("size of targets should be zero").isZero();
assertThat(actionStatusRepository.count()).isZero(); assertThat(actionStatusRepository.count()).as("size of action status is wrong").isZero();
} }
private List<Target> sendUpdateActionStatusToTargets(final DistributionSet dsA, final Iterable<Target> targs, private List<Target> sendUpdateActionStatusToTargets(final DistributionSet dsA, final Iterable<Target> targs,
@@ -743,16 +761,17 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
// checking the revisions of the created entities // checking the revisions of the created entities
// verifying that the revision of the object and the revision within the // verifying that the revision of the object and the revision within the
// DB has not changed // DB has not changed
assertThat(dsA.getOptLockRevision()).isEqualTo( assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo(
distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision()); distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision());
// verifying that the assignment is correct // verifying that the assignment is correct
assertEquals(1, deploymentManagement.findActiveActionsByTarget(targ).size()); assertEquals("Active target actions are wrong", 1, deploymentManagement.findActiveActionsByTarget(targ).size());
assertEquals(1, deploymentManagement.findActionsByTarget(targ).size()); assertEquals("Target actions are wrong", 1, deploymentManagement.findActionsByTarget(targ).size());
assertEquals(TargetUpdateStatus.PENDING, targ.getTargetInfo().getUpdateStatus()); assertEquals("Target status is wrong", TargetUpdateStatus.PENDING, targ.getTargetInfo().getUpdateStatus());
assertEquals(dsA, targ.getAssignedDistributionSet()); assertEquals("Assigned ds is wrong", dsA, targ.getAssignedDistributionSet());
assertEquals(dsA, deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()); assertEquals("Active ds is wrong", dsA,
assertNull(targ.getTargetInfo().getInstalledDistributionSet()); deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet());
assertNull("Installed ds should be null", targ.getTargetInfo().getInstalledDistributionSet());
final Page<Action> updAct = actionRepository.findByDistributionSet(pageReq, dsA); final Page<Action> updAct = actionRepository.findByDistributionSet(pageReq, dsA);
final Action action = updAct.getContent().get(0); final Action action = updAct.getContent().get(0);
@@ -763,12 +782,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
targ = targetManagement.findTargetByControllerID(targ.getControllerId()); targ = targetManagement.findTargetByControllerID(targ.getControllerId());
assertEquals(0, deploymentManagement.findActiveActionsByTarget(targ).size()); assertEquals(0, deploymentManagement.findActiveActionsByTarget(targ).size());
// try {
assertEquals(1, deploymentManagement.findInActiveActionsByTarget(targ).size()); assertEquals(1, deploymentManagement.findInActiveActionsByTarget(targ).size());
// }
// catch( final LazyInitializationException ex ) {
//
// }
assertEquals(TargetUpdateStatus.IN_SYNC, targ.getTargetInfo().getUpdateStatus()); assertEquals(TargetUpdateStatus.IN_SYNC, targ.getTargetInfo().getUpdateStatus());
assertEquals(dsA, targ.getAssignedDistributionSet()); assertEquals(dsA, targ.getAssignedDistributionSet());
assertEquals(dsA, targ.getTargetInfo().getInstalledDistributionSet()); assertEquals(dsA, targ.getTargetInfo().getInstalledDistributionSet());
@@ -778,13 +793,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
targ = targs.iterator().next(); targ = targs.iterator().next();
assertEquals(1, deploymentManagement.findActiveActionsByTarget(targ).size()); assertEquals("active actions are wrong", 1, deploymentManagement.findActiveActionsByTarget(targ).size());
assertEquals(TargetUpdateStatus.PENDING, assertEquals("target status is wrong", TargetUpdateStatus.PENDING,
targetManagement.findTargetByControllerID(targ.getControllerId()).getTargetInfo().getUpdateStatus()); targetManagement.findTargetByControllerID(targ.getControllerId()).getTargetInfo().getUpdateStatus());
assertEquals(dsB, targ.getAssignedDistributionSet()); assertEquals(dsB, targ.getAssignedDistributionSet());
assertEquals(dsA.getId(), targetManagement.findTargetByControllerIDWithDetails(targ.getControllerId()) assertEquals("Installed ds is wrong", dsA.getId(),
.getTargetInfo().getInstalledDistributionSet().getId()); targetManagement.findTargetByControllerIDWithDetails(targ.getControllerId()).getTargetInfo()
assertEquals(dsB, deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()); .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() { public void checkThatDsRevisionsIsNotChangedWithTargetAssignment() {
final DistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement, final DistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement,
distributionSetManagement); distributionSetManagement);
final DistributionSet dsB = TestDataUtil.generateDistributionSet("b", softwareManagement, TestDataUtil.generateDistributionSet("b", softwareManagement, distributionSetManagement);
distributionSetManagement);
Target targ = targetManagement Target targ = targetManagement
.createTarget(TestDataUtil.buildTargetFixture("target-id-A", "first description")); .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()); distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision());
final List<Target> targs = new ArrayList<Target>(); final List<Target> targs = new ArrayList<Target>();
@@ -807,7 +823,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
final Iterable<Target> savedTargs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedTargets(); final Iterable<Target> savedTargs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedTargets();
targ = savedTargs.iterator().next(); targ = savedTargs.iterator().next();
assertThat(dsA.getOptLockRevision()).isEqualTo( assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo(
distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision()); distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision());
} }
@@ -824,14 +840,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0));
// verify preparation // verify preparation
Action findAction = deploymentManagement.findAction(action.getId()); Action findAction = deploymentManagement.findAction(action.getId());
assertThat(findAction.getActionType()).isEqualTo(ActionType.SOFT); assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.SOFT);
// test // test
deploymentManagement.forceTargetAction(action.getId()); deploymentManagement.forceTargetAction(action.getId());
// verify test // verify test
findAction = deploymentManagement.findAction(action.getId()); findAction = deploymentManagement.findAction(action.getId());
assertThat(findAction.getActionType()).isEqualTo(ActionType.FORCED); assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
} }
@Test @Test
@@ -847,15 +863,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0));
// verify perparation // verify perparation
Action findAction = deploymentManagement.findAction(action.getId()); Action findAction = deploymentManagement.findAction(action.getId());
assertThat(findAction.getActionType()).isEqualTo(ActionType.FORCED); assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
// test // test
final Action forceTargetAction = deploymentManagement.forceTargetAction(action.getId()); final Action forceTargetAction = deploymentManagement.forceTargetAction(action.getId());
// verify test // verify test
assertThat(forceTargetAction.getActionType()).isEqualTo(ActionType.FORCED); assertThat(forceTargetAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
findAction = deploymentManagement.findAction(action.getId()); 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())) { if (event.getControllerId().equals(myt.getControllerId())) {
found = true; found = true;
final List<Action> activeActionsByTarget = deploymentManagement.findActiveActionsByTarget(myt); final List<Action> activeActionsByTarget = deploymentManagement.findActiveActionsByTarget(myt);
assertThat(activeActionsByTarget).isNotEmpty(); assertThat(activeActionsByTarget).as("size of active actions for target is wrong").isNotEmpty();
assertThat(event.getActionId()).isEqualTo(activeActionsByTarget.get(0).getId()) assertThat(event.getActionId()).as("Action id in database and event do not match")
.as("Action id in database and event do not match"); .isEqualTo(activeActionsByTarget.get(0).getId());
assertThat(event.getSoftwareModules()) assertThat(event.getSoftwareModules()).as("softwaremodule size is not correct")
.containsOnly(ds.getModules().toArray(new SoftwareModule[ds.getModules().size()])); .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<Target> deployedTargets = new ArrayList<Target>(); private final List<Target> deployedTargets = new ArrayList<Target>();
private final List<DistributionSet> distributionSets = new ArrayList<DistributionSet>(); private final List<DistributionSet> distributionSets = new ArrayList<DistributionSet>();
private final String undeployedTargetPrefix;
private final String deployedTargetPrefix;
private final String distributionSetPrefix;
public DeploymentResult(final Iterable<Target> deployedTs, final Iterable<Target> undeployedTs, public DeploymentResult(final Iterable<Target> deployedTs, final Iterable<Target> undeployedTs,
final Iterable<DistributionSet> dss, final String deployedTargetPrefix, final Iterable<DistributionSet> dss, final String deployedTargetPrefix,
final String undeployedTargetPrefix, final String distributionSetPrefix) { final String undeployedTargetPrefix, final String distributionSetPrefix) {
this.undeployedTargetPrefix = undeployedTargetPrefix;
this.deployedTargetPrefix = deployedTargetPrefix;
this.distributionSetPrefix = distributionSetPrefix;
Iterables.addAll(deployedTargets, deployedTs); Iterables.addAll(deployedTargets, deployedTs);
Iterables.addAll(undeployedTargets, undeployedTs); Iterables.addAll(undeployedTargets, undeployedTs);
Iterables.addAll(distributionSets, dss); Iterables.addAll(distributionSets, dss);
deployedTargets.forEach(new Consumer<Target>() { deployedTargets.forEach(t -> deployedTargetIDs.add(t.getId()));
@Override
public void accept(final Target t) {
deployedTargetIDs.add(t.getId());
}
});
undeployedTargets.forEach(new Consumer<Target>() { undeployedTargets.forEach(t -> undeployedTargetIDs.add(t.getId()));
@Override
public void accept(final Target t) {
undeployedTargetIDs.add(t.getId());
}
});
distributionSets.forEach(new Consumer<DistributionSet>() { distributionSets.forEach(ds -> distributionSetIDs.add(ds.getId()));
@Override
public void accept(final DistributionSet ds) {
distributionSetIDs.add(ds.getId());
}
});
} }
@@ -1017,27 +1010,6 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
return deployedTargets; 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 * @return the undeployedTargetIDs
*/ */
@@ -1045,26 +1017,6 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
return undeployedTargetIDs; 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 { private static class EventHandlerMock {
@@ -1089,9 +1041,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
latch.await(timeout, unit); latch.await(timeout, unit);
final List<TargetAssignDistributionSetEvent> handledEvents = new LinkedList<TargetAssignDistributionSetEvent>( final List<TargetAssignDistributionSetEvent> handledEvents = new LinkedList<TargetAssignDistributionSetEvent>(
events); events);
assertThat(handledEvents).hasSize(expectedNumberOfEvents) assertThat(handledEvents).as("Did not receive the expected amount of events (" + expectedNumberOfEvents
.as("Did not receive the expected amount of events (" + expectedNumberOfEvents + ") within timeout. Received events are " + handledEvents).hasSize(expectedNumberOfEvents);
+ ") within timeout. Received events are " + handledEvents);
return handledEvents; return handledEvents;
} }
} }
@@ -1117,9 +1069,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest {
throws InterruptedException { throws InterruptedException {
latch.await(timeout, unit); latch.await(timeout, unit);
final List<CancelTargetAssignmentEvent> handledEvents = new LinkedList<CancelTargetAssignmentEvent>(events); final List<CancelTargetAssignmentEvent> handledEvents = new LinkedList<CancelTargetAssignmentEvent>(events);
assertThat(handledEvents).hasSize(expectedNumberOfEvents) assertThat(handledEvents).as("Did not receive the expected amount of events (" + expectedNumberOfEvents
.as("Did not receive the expected amount of events (" + expectedNumberOfEvents + ") within timeout. Received events are " + handledEvents).hasSize(expectedNumberOfEvents);
+ ") within timeout. Received events are " + handledEvents);
return handledEvents; return handledEvents;
} }
} }

View File

@@ -18,7 +18,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.AbstractIntegrationTest;
@@ -96,7 +95,8 @@ public class ReportManagementTest extends AbstractIntegrationTest {
// +1 because we go back #maxMonthBackAmountReportTargets but in the // +1 because we go back #maxMonthBackAmountReportTargets but in the
// report the current month // report the current month
// is included for sure, so from this month we go back // 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<LocalDate> reportItem : targetsCreatedOverPeriod.getData()) { for (final DataReportSeriesItem<LocalDate> reportItem : targetsCreatedOverPeriod.getData()) {
// only one target is created for each month // only one target is created for each month
assertThat(reportItem.getData().intValue()).as("Target for each month").isEqualTo(1); 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 // +1 because we go back #maxMonthBackAmountReportTargets but in the
// report the current month // report the current month
// is included for sure, so from this month we go back // 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<LocalDate> reportItem : feedbackReceivedOverTime.getData()) { for (final DataReportSeriesItem<LocalDate> reportItem : feedbackReceivedOverTime.getData()) {
// only one target feedback is created for each month // 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 // check cache evict
@@ -165,7 +166,7 @@ public class ReportManagementTest extends AbstractIntegrationTest {
} }
feedbackReceivedOverTime = reportManagement.feedbackReceivedOverTime(DateTypes.perMonth(), from, to); feedbackReceivedOverTime = reportManagement.feedbackReceivedOverTime(DateTypes.perMonth(), from, to);
for (final DataReportSeriesItem<LocalDate> reportItem : feedbackReceivedOverTime.getData()) { for (final DataReportSeriesItem<LocalDate> 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); .isEqualTo(3L);
final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData();
assertThat(Arrays.stream(outerData).map(DataReportSeriesItem::getType).collect(Collectors.toList())) 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")) { } else if (dataReportSeriesItem.getType().equals("ds2")) {
assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 2 in statistics") assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 2 in statistics")
.isEqualTo(1L); .isEqualTo(1L);
final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); final DataReportSeriesItem<String>[] 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") assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 2 in statistics")
.isEqualTo("0.0.2"); .isEqualTo("0.0.2");
} else if (dataReportSeriesItem.getType().equals("ds3")) { } 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") assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 3 in statistics")
.isEqualTo(0L); .isEqualTo(0L);
final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); final DataReportSeriesItem<String>[] 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") assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 3 in statistics")
.isEqualTo("0.0.3"); .isEqualTo("0.0.3");
} else { } else {
@@ -395,13 +396,13 @@ public class ReportManagementTest extends AbstractIntegrationTest {
final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData();
assertThat(Arrays.stream(outerData).map(DataReportSeriesItem::getType).collect(Collectors.toList())) 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")) { } else if (dataReportSeriesItem.getType().equals("ds2")) {
assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 2 in statistics") assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 2 in statistics")
.isEqualTo(1L); .isEqualTo(1L);
final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); final DataReportSeriesItem<String>[] 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") assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 2 in statistics")
.isEqualTo("0.0.2"); .isEqualTo("0.0.2");
@@ -409,7 +410,7 @@ public class ReportManagementTest extends AbstractIntegrationTest {
assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 3 in statistics") assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 3 in statistics")
.isEqualTo(0L); .isEqualTo(0L);
final DataReportSeriesItem<String>[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); final DataReportSeriesItem<String>[] 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") assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 3 in statistics")
.isEqualTo("0.0.3"); .isEqualTo("0.0.3");
} else { } else {
@@ -487,33 +488,26 @@ public class ReportManagementTest extends AbstractIntegrationTest {
final int targetCreateAmount = 10; final int targetCreateAmount = 10;
// create targets for another tenant // create targets for another tenant
securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), new Callable<Void>() { securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), () -> {
@Override for (int index = 0; index < targetCreateAmount; index++) {
public Void call() throws Exception { targetManagement.createTarget(new Target("t" + index));
for (int index = 0; index < targetCreateAmount; index++) {
targetManagement.createTarget(new Target("t" + index));
}
return null;
} }
return null;
}); });
// ensure targets has been created for 'anotherTenant' // ensure targets has been created for 'anotherTenant'
final Slice<Target> targetsForAnotherTenant = securityRule.runAs( final Slice<Target> targetsForAnotherTenant = securityRule.runAs(
WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), new Callable<Slice<Target>>() { WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"),
@Override () -> targetManagement.findTargetsAll(new PageRequest(0, 1000)));
public Slice<Target> call() throws Exception { assertThat(targetsForAnotherTenant).as("targets has wrong size").hasSize(targetCreateAmount);
return targetManagement.findTargetsAll(new PageRequest(0, 1000));
}
});
assertThat(targetsForAnotherTenant).hasSize(targetCreateAmount);
final LocalDateTime to = LocalDateTime.now(); final LocalDateTime to = LocalDateTime.now();
final LocalDateTime from = to.minusMonths(targetCreateAmount); final LocalDateTime from = to.minusMonths(targetCreateAmount);
// now retrieve the report for the 'mytenant' // now retrieve the report for the 'mytenant'
final DataReportSeries<LocalDate> targetsCreatedOverPeriod = reportManagement final DataReportSeries<LocalDate> targetsCreatedOverPeriod = reportManagement
.targetsCreatedOverPeriod(DateTypes.perMonth(), from, to); .targetsCreatedOverPeriod(DateTypes.perMonth(), from, to);
// final no targets should final be created for this tenant assertThat(targetsCreatedOverPeriod.getData()).as("final no targets should final be created for this tenant")
assertThat(targetsCreatedOverPeriod.getData()).hasSize(0); .hasSize(0);
} }

View File

@@ -159,10 +159,10 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
public void hardDeleteOfNotAssignedArtifact() { public void hardDeleteOfNotAssignedArtifact() {
// [STEP1]: Create SoftwareModuleX with Artifacts // [STEP1]: Create SoftwareModuleX with Artifacts
SoftwareModule unassignedModule = createSoftwareModuleWithArtifacts(osType, "moduleX", "3.0.2", 2); final SoftwareModule unassignedModule = createSoftwareModuleWithArtifacts(osType, "moduleX", "3.0.2", 2);
Iterator<Artifact> artifactsIt = unassignedModule.getArtifacts().iterator(); final Iterator<Artifact> artifactsIt = unassignedModule.getArtifacts().iterator();
Artifact artifact1 = artifactsIt.next(); final Artifact artifact1 = artifactsIt.next();
Artifact artifact2 = artifactsIt.next(); final Artifact artifact2 = artifactsIt.next();
// [STEP2]: Delete unassigned SoftwareModule // [STEP2]: Delete unassigned SoftwareModule
softwareManagement.deleteSoftwareModule(unassignedModule); softwareManagement.deleteSoftwareModule(unassignedModule);
@@ -185,7 +185,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
public void softDeleteOfAssignedArtifact() { public void softDeleteOfAssignedArtifact() {
// Init DistributionSet // Init DistributionSet
DistributionSet disSet = distributionSetManagement final DistributionSet disSet = distributionSetManagement
.createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); .createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null));
// [STEP1]: Create SoftwareModuleX with ArtifactX // [STEP1]: Create SoftwareModuleX with ArtifactX
@@ -200,14 +200,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
// [VERIFY EXPECTED RESULT]: // [VERIFY EXPECTED RESULT]:
// verify: assignedModule is marked as deleted // verify: assignedModule is marked as deleted
assignedModule = softwareManagement.findSoftwareModuleById(assignedModule.getId()); 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(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
assertThat(softwareModuleRepository.findAll()).hasSize(1); assertThat(softwareModuleRepository.findAll()).hasSize(1);
// verify: binary data is deleted // verify: binary data is deleted
Iterator<Artifact> artifactsIt = assignedModule.getArtifacts().iterator(); final Iterator<Artifact> artifactsIt = assignedModule.getArtifacts().iterator();
Artifact artifact1 = artifactsIt.next(); final Artifact artifact1 = artifactsIt.next();
Artifact artifact2 = artifactsIt.next(); final Artifact artifact2 = artifactsIt.next();
assertArtfiactNull(artifact1, artifact2); assertArtfiactNull(artifact1, artifact2);
// verify: artifact meta data is still available // verify: artifact meta data is still available
@@ -221,7 +221,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
// Init target and DistributionSet // Init target and DistributionSet
final Target target = targetManagement.createTarget(new Target("test123")); 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)); .createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null));
// [STEP1]: Create SoftwareModuleX and include the new ArtifactX // [STEP1]: Create SoftwareModuleX and include the new ArtifactX
@@ -242,14 +242,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
// [VERIFY EXPECTED RESULT]: // [VERIFY EXPECTED RESULT]:
// verify: assignedModule is marked as deleted // verify: assignedModule is marked as deleted
assignedModule = softwareManagement.findSoftwareModuleById(assignedModule.getId()); 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(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
assertThat(softwareModuleRepository.findAll()).hasSize(1); assertThat(softwareModuleRepository.findAll()).hasSize(1);
// verify: binary data is deleted // verify: binary data is deleted
Iterator<Artifact> artifactsIt = assignedModule.getArtifacts().iterator(); final Iterator<Artifact> artifactsIt = assignedModule.getArtifacts().iterator();
Artifact artifact1 = artifactsIt.next(); final Artifact artifact1 = artifactsIt.next();
Artifact artifact2 = artifactsIt.next(); final Artifact artifact2 = artifactsIt.next();
assertArtfiactNull(artifact1, artifact2); assertArtfiactNull(artifact1, artifact2);
// verify: artifact meta data is still available // verify: artifact meta data is still available
@@ -265,7 +265,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
assertThat(operations.find(new Query())).hasSize(0); assertThat(operations.find(new Query())).hasSize(0);
// Init artifact binary data, target and DistributionSets // 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 // [STEP1]: Create SoftwareModuleX and add a new ArtifactX
SoftwareModule moduleX = createSoftwareModuleWithArtifacts(osType, "modulex", "v1.0", 0); 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 // [STEP2]: Create newArtifactX and add it to SoftwareModuleX
artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleX.getId(), "artifactx", false); artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleX.getId(), "artifactx", false);
moduleX = softwareManagement.findSoftwareModuleWithDetails(moduleX.getId()); 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 // [STEP3]: Create SoftwareModuleY and add the same ArtifactX
SoftwareModule moduleY = createSoftwareModuleWithArtifacts(osType, "moduley", "v1.0", 0); SoftwareModule moduleY = createSoftwareModuleWithArtifacts(osType, "moduley", "v1.0", 0);
@@ -281,7 +281,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
// [STEP4]: Assign the same ArtifactX to SoftwareModuleY // [STEP4]: Assign the same ArtifactX to SoftwareModuleY
artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleY.getId(), "artifactx", false); artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleY.getId(), "artifactx", false);
moduleY = softwareManagement.findSoftwareModuleWithDetails(moduleY.getId()); 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 // verify: that only one entry was created in mongoDB
assertThat(operations.find(new Query())).hasSize(1); 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); artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleX.getId(), "artifactx", false);
moduleX = softwareManagement.findSoftwareModuleWithDetails(moduleX.getId()); 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 // [STEP2]: Create SoftwareModuleY and add the same ArtifactX
SoftwareModule moduleY = createSoftwareModuleWithArtifacts(osType, "moduley", "v1.0", 0); SoftwareModule moduleY = createSoftwareModuleWithArtifacts(osType, "moduley", "v1.0", 0);
artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleY.getId(), "artifactx", false); artifactManagement.createLocalArtifact(new ByteArrayInputStream(source), moduleY.getId(), "artifactx", false);
moduleY = softwareManagement.findSoftwareModuleWithDetails(moduleY.getId()); 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 // verify: that only one entry was created in mongoDB
assertThat(operations.find(new Query())).hasSize(1); assertThat(operations.find(new Query())).hasSize(1);
@@ -358,8 +358,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
// verify: SoftwareModuleX and SofwtareModule are marked as deleted // verify: SoftwareModuleX and SofwtareModule are marked as deleted
assertThat(moduleX).isNotNull(); assertThat(moduleX).isNotNull();
assertThat(moduleY).isNotNull(); assertThat(moduleY).isNotNull();
assertTrue(moduleX.isDeleted()); assertTrue("The module should be flagged deleted", moduleX.isDeleted());
assertTrue(moduleY.isDeleted()); assertTrue("The module should be flagged deleted", moduleY.isDeleted());
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
assertThat(softwareModuleRepository.findAll()).hasSize(2); assertThat(softwareModuleRepository.findAll()).hasSize(2);
@@ -370,10 +370,10 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
assertThat(artifactRepository.findOne(artifactY.getId())).isNotNull(); assertThat(artifactRepository.findOne(artifactY.getId())).isNotNull();
} }
private SoftwareModule createSoftwareModuleWithArtifacts(SoftwareModuleType type, String name, String version, private SoftwareModule createSoftwareModuleWithArtifacts(final SoftwareModuleType type, final String name,
int numberArtifacts) { final String version, final int numberArtifacts) {
long countSoftwareModule = softwareModuleRepository.count(); final long countSoftwareModule = softwareModuleRepository.count();
// create SoftwareModule // create SoftwareModule
SoftwareModule softwareModule = softwareManagement SoftwareModule softwareModule = softwareManagement
@@ -388,7 +388,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB {
softwareModule = softwareManagement.findSoftwareModuleWithDetails(softwareModule.getId()); softwareModule = softwareManagement.findSoftwareModuleWithDetails(softwareModule.getId());
assertThat(softwareModuleRepository.findAll()).hasSize((int) countSoftwareModule + 1); assertThat(softwareModuleRepository.findAll()).hasSize((int) countSoftwareModule + 1);
List<Artifact> artifacts = softwareModule.getArtifacts(); final List<Artifact> artifacts = softwareModule.getArtifacts();
assertThat(artifacts).hasSize(numberArtifacts); assertThat(artifacts).hasSize(numberArtifacts);
if (numberArtifacts != 0) { if (numberArtifacts != 0) {

View File

@@ -96,24 +96,26 @@ public class TargetManagementTest extends AbstractIntegrationTest {
final TargetTag targetTag = tagManagement.createTargetTag(new TargetTag("Tag1")); final TargetTag targetTag = tagManagement.createTargetTag(new TargetTag("Tag1"));
final List<Target> assignedTargets = targetManagement.assignTag(assignTarget, targetTag); final List<Target> 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)); assignedTargets.forEach(target -> assertThat(target.getTags().size()).isEqualTo(1));
TargetTag findTargetTag = tagManagement.findTargetTag("Tag1"); 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); final Target unAssignTarget = targetManagement.unAssignTag("targetId123", findTargetTag);
assertThat(unAssignTarget.getControllerId()).isEqualTo("targetId123"); assertThat(unAssignTarget.getControllerId()).as("Controller id is wrong").isEqualTo("targetId123");
assertThat(unAssignTarget.getTags().size()).isEqualTo(0); assertThat(unAssignTarget.getTags()).as("Tag size is wrong").isEmpty();
findTargetTag = tagManagement.findTargetTag("Tag1"); findTargetTag = tagManagement.findTargetTag("Tag1");
assertThat(findTargetTag.getAssignedToTargets().size()).isEqualTo(3); assertThat(findTargetTag.getAssignedToTargets()).as("Assigned targets are wrong").hasSize(3);
final List<Target> unAssignTargets = targetManagement.unAssignAllTargetsByTag(findTargetTag); final List<Target> unAssignTargets = targetManagement.unAssignAllTargetsByTag(findTargetTag);
findTargetTag = tagManagement.findTargetTag("Tag1"); findTargetTag = tagManagement.findTargetTag("Tag1");
assertThat(findTargetTag.getAssignedToTargets().size()).isEqualTo(0); assertThat(findTargetTag.getAssignedToTargets()).as("Unassigned targets are wrong").isEmpty();
assertThat(unAssignTargets.size()).isEqualTo(3); assertThat(unAssignTargets).as("Unassigned targets are wrong").hasSize(3);
unAssignTargets.forEach(target -> assertThat(target.getTags().size()).isEqualTo(0)); 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") @Description("Ensures that targets can deleted e.g. test all cascades")
public void deleteAndCreateTargets() { public void deleteAndCreateTargets() {
Target target = targetManagement.createTarget(new Target("targetId123")); 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()); targetManagement.deleteTargets(target.getId());
assertThat(targetManagement.countTargetsAll()).isEqualTo(0); assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(0);
target = createTargetWithAttributes("4711"); target = createTargetWithAttributes("4711");
assertThat(targetManagement.countTargetsAll()).isEqualTo(1); assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(1);
targetManagement.deleteTargets(target.getId()); targetManagement.deleteTargets(target.getId());
assertThat(targetManagement.countTargetsAll()).isEqualTo(0); assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(0);
final List<Long> targets = new ArrayList<Long>(); final List<Long> targets = new ArrayList<Long>();
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
@@ -136,9 +138,9 @@ public class TargetManagementTest extends AbstractIntegrationTest {
targets.add(target.getId()); targets.add(target.getId());
targets.add(createTargetWithAttributes("" + (i * i + 1000)).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()])); 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) { private Target createTargetWithAttributes(final String controllerId) {
@@ -150,7 +152,8 @@ public class TargetManagementTest extends AbstractIntegrationTest {
target = controllerManagament.updateControllerAttributes(controllerId, testData); target = controllerManagament.updateControllerAttributes(controllerId, testData);
target = targetManagement.findTargetByControllerIDWithDetails(controllerId); target = targetManagement.findTargetByControllerIDWithDetails(controllerId);
assertThat(target.getTargetInfo().getControllerAttributes()).isEqualTo(testData); assertThat(target.getTargetInfo().getControllerAttributes()).as("Controller Attributes are wrong")
.isEqualTo(testData);
return target; return target;
} }
@@ -162,10 +165,14 @@ public class TargetManagementTest extends AbstractIntegrationTest {
final DistributionSet set2 = TestDataUtil.generateDistributionSet("test2", softwareManagement, final DistributionSet set2 = TestDataUtil.generateDistributionSet("test2", softwareManagement,
distributionSetManagement); distributionSetManagement);
assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).isEqualTo(0); assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).as("Target count is wrong")
assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).isEqualTo(0); .isEqualTo(0);
assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).isEqualTo(0); assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).as("Target count is wrong")
assertThat(targetManagement.countTargetByInstalledDistributionSet(set2.getId())).isEqualTo(0); .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"); Target target = createTargetWithAttributes("4711");
@@ -183,13 +190,19 @@ public class TargetManagementTest extends AbstractIntegrationTest {
target = targetManagement.findTargetByControllerIDWithDetails("4711"); target = targetManagement.findTargetByControllerIDWithDetails("4711");
// read data // read data
assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).isEqualTo(0); assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).as("Target count is wrong")
assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).isEqualTo(1); .isEqualTo(0);
assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).isEqualTo(1); assertThat(targetManagement.countTargetByInstalledDistributionSet(set.getId())).as("Target count is wrong")
assertThat(targetManagement.countTargetByInstalledDistributionSet(set2.getId())).isEqualTo(0); .isEqualTo(1);
assertThat(target.getTargetInfo().getLastTargetQuery()).isGreaterThanOrEqualTo(current); assertThat(targetManagement.countTargetByAssignedDistributionSet(set2.getId())).as("Target count is wrong")
assertThat(target.getAssignedDistributionSet()).isEqualTo(set2); .isEqualTo(1);
assertThat(target.getTargetInfo().getInstalledDistributionSet().getId()).isEqualTo(set.getId()); 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") assertThat(firstSaved.spliterator().getExactSizeIfKnown() - nr2Del).as("Size of splited list")
.isEqualTo(allFound.spliterator().getExactSizeIfKnown()); .isEqualTo(allFound.spliterator().getExactSizeIfKnown());
// verify that all undeleted are still found assertThat(allFound).as("Not all undeleted found").doesNotContain(deletedTargets);
assertThat(allFound).doesNotContain(deletedTargets);
} }
@Test @Test
@@ -404,7 +416,7 @@ public class TargetManagementTest extends AbstractIntegrationTest {
targetInfo = targetInfoRepository.save(targetInfo); targetInfo = targetInfoRepository.save(targetInfo);
} }
final Query qry = entityManager.createNativeQuery("select * from sp_target_attributes ta"); 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") assertThat(attribs.size() * ts.spliterator().getExactSizeIfKnown()).as("Amount of all target attributes")
.isEqualTo(result.size()); .isEqualTo(result.size());
@@ -467,7 +479,8 @@ public class TargetManagementTest extends AbstractIntegrationTest {
final Target tNoAttrib = targetManagement.findTargetByControllerID(tNoAttribl.getControllerId()); final Target tNoAttrib = targetManagement.findTargetByControllerID(tNoAttribl.getControllerId());
if (tNoAttrib.getControllerId().equals(target.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_; continue restTarget_;
} }
} }
@@ -479,7 +492,7 @@ public class TargetManagementTest extends AbstractIntegrationTest {
if (tNoAttrib.getControllerId().equals(target.getControllerId())) { if (tNoAttrib.getControllerId().equals(target.getControllerId())) {
assertThat(target.getTargetInfo().getControllerAttributes().keySet().toArray()) assertThat(target.getTargetInfo().getControllerAttributes().keySet().toArray())
.doesNotContain(attribs2Del.toArray()); .as("Controller attributes are wrong").doesNotContain(attribs2Del.toArray());
continue restTarget_; continue restTarget_;
} }
} }
@@ -504,12 +517,14 @@ public class TargetManagementTest extends AbstractIntegrationTest {
t2 = targetManagement.createTarget(t2); t2 = targetManagement.createTarget(t2);
t1 = targetManagement.findTargetByControllerID(t1.getControllerId()); t1 = targetManagement.findTargetByControllerID(t1.getControllerId());
assertThat(t1.getTags()).hasSize(noT1Tags).containsAll(t1Tags); assertThat(t1.getTags()).as("Tag size is wrong").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)
.doesNotContain(Iterables.toArray(t2Tags, TargetTag.class));
t2 = targetManagement.findTargetByControllerID(t2.getControllerId()); t2 = targetManagement.findTargetByControllerID(t2.getControllerId());
assertThat(t2.getTags()).hasSize(noT2Tags).containsAll(t2Tags); assertThat(t2.getTags()).as("Tag size is wrong").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)
.doesNotContain(Iterables.toArray(t1Tags, TargetTag.class));
} }
@Test @Test
@@ -531,7 +546,7 @@ public class TargetManagementTest extends AbstractIntegrationTest {
final TargetTag tagA = tagManagement.createTargetTag(new TargetTag("A")); final TargetTag tagA = tagManagement.createTargetTag(new TargetTag("A"));
final TargetTag tagB = tagManagement.createTargetTag(new TargetTag("B")); final TargetTag tagB = tagManagement.createTargetTag(new TargetTag("B"));
final TargetTag tagC = tagManagement.createTargetTag(new TargetTag("C")); final TargetTag tagC = tagManagement.createTargetTag(new TargetTag("C"));
final TargetTag tagX = tagManagement.createTargetTag(new TargetTag("X")); tagManagement.createTargetTag(new TargetTag("X"));
// doing different assignments // doing different assignments
targetManagement.toggleTagAssignment(tagATargets, tagA); targetManagement.toggleTagAssignment(tagATargets, tagA);
@@ -545,7 +560,8 @@ public class TargetManagementTest extends AbstractIntegrationTest {
targetManagement.toggleTagAssignment(tagABCTargets, tagB); targetManagement.toggleTagAssignment(tagABCTargets, tagB);
targetManagement.toggleTagAssignment(tagABCTargets, tagC); 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 // search for targets with tag tagA
final List<Target> targetWithTagA = new ArrayList<Target>(); final List<Target> targetWithTagA = new ArrayList<Target>();
@@ -575,11 +591,11 @@ public class TargetManagementTest extends AbstractIntegrationTest {
// check again target lists refreshed from DB // check again target lists refreshed from DB
assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "A")) 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")) 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")) assertThat(targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, "C"))
.isEqualTo(targetWithTagC.size()); .as("Target count is wrong").isEqualTo(targetWithTagC.size());
} }
@Test @Test
@@ -656,14 +672,15 @@ public class TargetManagementTest extends AbstractIntegrationTest {
targetManagement.toggleTagAssignment(targAs, targTagA); targetManagement.toggleTagAssignment(targAs, targTagA);
assertThat(targetManagement.findTargetsByControllerIDsWithTags( 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 // no lazy loading exception and tag correctly assigned
assertThat(targetManagement assertThat(targetManagement
.findTargetsByControllerIDsWithTags( .findTargetsByControllerIDsWithTags(
targAs.stream().map(target -> target.getControllerId()).collect(Collectors.toList())) targAs.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))
.stream().map(target -> target.getTags().contains(targTagA)).collect(Collectors.toList())) .stream().map(target -> target.getTags().contains(targTagA)).collect(Collectors.toList()))
.containsOnly(true); .as("Tags not correctly assigned").containsOnly(true);
} }
@Test @Test
@@ -678,7 +695,7 @@ public class TargetManagementTest extends AbstractIntegrationTest {
final List<String> findAllTargetIds = findAllTargetIdNames.stream().map(TargetIdName::getControllerId) final List<String> findAllTargetIds = findAllTargetIdNames.stream().map(TargetIdName::getControllerId)
.collect(Collectors.toList()); .collect(Collectors.toList());
assertThat(findAllTargetIds).containsOnly(createdTargetIds); assertThat(findAllTargetIds).as("Target list has wrong content").containsOnly(createdTargetIds);
} }
@Test @Test

View File

@@ -72,7 +72,7 @@ public class RSQLActionFieldsTest extends AbstractIntegrationTest {
try { try {
assertRSQLQuery(ActionFields.STATUS.name() + "==true", 5); assertRSQLQuery(ActionFields.STATUS.name() + "==true", 5);
fail(); fail("Missing expected RSQLParameterUnsupportedFieldException because status cannot be compared with 'true'");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
} }

View File

@@ -140,7 +140,7 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest {
final Page<DistributionSet> find = distributionSetManagement.findDistributionSetsAll( final Page<DistributionSet> find = distributionSetManagement.findDistributionSetsAll(
RSQLUtility.parse(rsqlParam, DistributionSetFields.class), new PageRequest(0, 100), false); RSQLUtility.parse(rsqlParam, DistributionSetFields.class), new PageRequest(0, 100), false);
final long countAll = find.getTotalElements(); final long countAll = find.getTotalElements();
assertThat(find).isNotNull(); assertThat(find).as("Founded entity is should not be null").isNotNull();
assertThat(countAll).isEqualTo(excpectedEntity); assertThat(countAll).as("Founded entity size is wrong").isEqualTo(excpectedEntity);
} }
} }

View File

@@ -63,7 +63,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, SoftwareModuleFields.class).toPredicate(baseSoftwareModuleRootMock, RSQLUtility.parse(wrongRSQL, SoftwareModuleFields.class).toPredicate(baseSoftwareModuleRootMock,
criteriaQueryMock, criteriaBuilderMock); criteriaQueryMock, criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterSyntaxException e) { } catch (final RSQLParameterSyntaxException e) {
} }
} }
@@ -75,7 +75,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, SoftwareModuleFields.class).toPredicate(baseSoftwareModuleRootMock, RSQLUtility.parse(wrongRSQL, SoftwareModuleFields.class).toPredicate(baseSoftwareModuleRootMock,
criteriaQueryMock, criteriaBuilderMock); criteriaQueryMock, criteriaBuilderMock);
fail(); fail("Missing an expected RSQLParameterUnsupportedFieldException because of unknown RSQL field");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
@@ -87,7 +87,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock,
criteriaBuilderMock); criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
@@ -95,7 +95,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock,
criteriaBuilderMock); criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
@@ -103,7 +103,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, DistributionSetFields.class).toPredicate(baseSoftwareModuleRootMock, RSQLUtility.parse(wrongRSQL, DistributionSetFields.class).toPredicate(baseSoftwareModuleRootMock,
criteriaQueryMock, criteriaBuilderMock); criteriaQueryMock, criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
@@ -115,7 +115,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock,
criteriaBuilderMock); criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
@@ -123,7 +123,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock,
criteriaBuilderMock); criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
@@ -131,7 +131,7 @@ public class RSQLUtilityTest {
try { try {
RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, RSQLUtility.parse(wrongRSQL, TargetFields.class).toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock,
criteriaBuilderMock); criteriaBuilderMock);
fail(); fail("Missing expected RSQLParameterSyntaxException because of wrong RSQL syntax");
} catch (final RSQLParameterUnsupportedFieldException e) { } catch (final RSQLParameterUnsupportedFieldException e) {
} }
} }

View File

@@ -88,7 +88,7 @@ final class DistributionSetTypeMapper {
} }
static List<DistributionSetTypeRest> toListResponse(final List<DistributionSetType> types) { static List<DistributionSetTypeRest> toListResponse(final List<DistributionSetType> types) {
final List<DistributionSetTypeRest> response = new ArrayList<DistributionSetTypeRest>(); final List<DistributionSetTypeRest> response = new ArrayList<>();
for (final DistributionSetType dsType : types) { for (final DistributionSetType dsType : types) {
response.add(toResponse(dsType)); response.add(toResponse(dsType));
} }

View File

@@ -99,52 +99,6 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI {
return new ResponseEntity<>(SoftwareModuleMapper.artifactsToResponse(module.getArtifacts()), HttpStatus.OK); 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<Void> 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 @Override
public ResponseEntity<ArtifactRest> getArtifact(@PathVariable final Long softwareModuleId, public ResponseEntity<ArtifactRest> getArtifact(@PathVariable final Long softwareModuleId,
@PathVariable final Long artifactId) { @PathVariable final Long artifactId) {

View File

@@ -59,7 +59,7 @@ final class SoftwareModuleTypeMapper {
} }
static List<SoftwareModuleTypeRest> toListResponse(final Collection<SoftwareModuleType> types) { static List<SoftwareModuleTypeRest> toListResponse(final Collection<SoftwareModuleType> types) {
final List<SoftwareModuleTypeRest> response = new ArrayList<SoftwareModuleTypeRest>(); final List<SoftwareModuleTypeRest> response = new ArrayList<>();
for (final SoftwareModuleType softwareModule : types) { for (final SoftwareModuleType softwareModule : types) {
response.add(toResponse(softwareModule)); response.add(toResponse(softwareModule));
} }

View File

@@ -25,6 +25,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -49,6 +50,7 @@ import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartFile;
@@ -69,6 +71,13 @@ import ru.yandex.qatools.allure.annotations.Stories;
@Stories("Software Module Resource") @Stories("Software Module Resource")
public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongoDB { 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 @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).") @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) @WithUser(principal = "smUpdateTester", allSpPermissions = true)
@@ -81,18 +90,14 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
final String updateVendor = "newVendor1"; final String updateVendor = "newVendor1";
final String updateDescription = "newDescription1"; final String updateDescription = "newDescription1";
final SoftwareModule ah = softwareManagement softwareManagement.createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, ""));
.createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); softwareManagement.createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, ""));
final SoftwareModule jvm = softwareManagement softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, ""));
.createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, ""));
final SoftwareModule os = softwareManagement
.createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, ""));
SoftwareModule sm = new SoftwareModule(osType, knownSWName, knownSWVersion, knownSWDescription, knownSWVendor); SoftwareModule sm = new SoftwareModule(osType, knownSWName, knownSWVersion, knownSWDescription, knownSWVendor);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
assertThat(sm.getName()).isEqualTo(knownSWName); assertThat(sm.getName()).as("Wrong name of the software module").isEqualTo(knownSWName);
assertThat(sm.getName()).isEqualTo(knownSWName);
final String body = new JSONObject().put("vendor", updateVendor).put("description", updateDescription) final String body = new JSONObject().put("vendor", updateVendor).put("description", updateDescription)
.put("name", "nameShouldNotBeChanged").toString(); .put("name", "nameShouldNotBeChanged").toString();
@@ -115,9 +120,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
@Test @Test
@Description("Tests the uppload of an artifact binary. The upload is executed and the content checked in the repository for completenes.") @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 { 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); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
assertThat(artifactRepository.findAll()).hasSize(0); assertThat(artifactRepository.findAll()).hasSize(0);
@@ -144,36 +146,41 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.convertArtifactResponse(mvcResult.getResponse().getContentAsString()); .convertArtifactResponse(mvcResult.getResponse().getContentAsString());
final Long artId = ((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts() final Long artId = ((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts()
.get(0)).getId(); .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()) 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); .isEqualTo("http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artId);
assertThat( assertThat(
JsonPath.compile("$_links.download.href").read(mvcResult.getResponse().getContentAsString()).toString()) JsonPath.compile("$_links.download.href").read(mvcResult.getResponse().getContentAsString()).toString())
.isEqualTo("http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artId .as("response contains no download url ").isEqualTo("http://localhost/rest/v1/softwaremodules/"
+ "/download"); + sm.getId() + "/artifacts/" + artId + "/download");
assertArtifact(sm, random);
}
private void assertArtifact(final SoftwareModule sm, final byte[] random) throws IOException {
// check result in db... // check result in db...
// repo // repo
assertThat(artifactRepository.findAll()).hasSize(1); assertThat(artifactRepository.findAll()).as("Wrong artifact size").hasSize(1);
// binary // binary
assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(random), assertTrue("Wrong artifact content",
artifactManagement IOUtils.contentEquals(new ByteArrayInputStream(random),
.loadLocalArtifactBinary((LocalArtifact) softwareManagement artifactManagement
.findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) .loadLocalArtifactBinary((LocalArtifact) softwareManagement
.getFileInputStream())); .findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0))
.getFileInputStream()));
// hashes // hashes
assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getSha1Hash()) 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()) assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getMd5Hash())
.isEqualTo(HashGeneratorUtils.generateMD5(random)); .as("Wrong md5 hash").isEqualTo(HashGeneratorUtils.generateMD5(random));
// metadata // metadata
assertThat(((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) assertThat(((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0))
.getFilename()).isEqualTo("origFilename"); .getFilename()).as("wrong metadata of the filename").isEqualTo("origFilename");
} }
@Test @Test
@@ -195,9 +202,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
@Test @Test
@Description("Verfies that the system does not accept identical artifacts uploads for the same software module. Expected response: CONFLICT") @Description("Verfies that the system does not accept identical artifacts uploads for the same software module. Expected response: CONFLICT")
public void duplicateUploadArtifact() throws Exception { 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); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
@@ -220,9 +224,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
@Test @Test
@Description("verfies that option to upload artifacts with a custom defined by metadata, i.e. not the file name of the binary itself.") @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 { 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); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
assertThat(artifactRepository.findAll()).hasSize(0); assertThat(artifactRepository.findAll()).hasSize(0);
@@ -237,22 +238,19 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated()) .andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
.andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$providedFilename", equalTo("customFilename"))).andExpect(status().isCreated()); .andExpect(jsonPath("$providedFilename", equalTo("customFilename"))).andExpect(status().isCreated());
;
// check result in db... // check result in db...
// repo // repo
assertThat(artifactRepository.findAll()).hasSize(1); assertThat(artifactRepository.findAll()).as("Artifact size is wring").hasSize(1);
// hashes // hashes
assertThat(artifactManagement.findLocalArtifactByFilename("customFilename")).hasSize(1); assertThat(artifactManagement.findLocalArtifactByFilename("customFilename")).as("Local artifact is wrong")
.hasSize(1);
} }
@Test @Test
@Description("Verfies that the system refuses upload of an artifact where the provided hash sums do not match. Expected result: BAD REQUEST") @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 { 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); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
assertThat(artifactRepository.findAll()).hasSize(0); assertThat(artifactRepository.findAll()).hasSize(0);
@@ -272,7 +270,8 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
// check error result // check error result
ExceptionInfo exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString()); 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 // wrong md5
mvcResult = mvc mvcResult = mvc
@@ -282,42 +281,20 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
// check error result // check error result
exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString()); 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) mvc.perform(fileUpload("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
.param("md5sum", md5sum).param("sha1sum", sha1sum)).andDo(MockMvcResultPrinter.print()) .param("md5sum", md5sum).param("sha1sum", sha1sum)).andDo(MockMvcResultPrinter.print())
.andExpect(status().isCreated()); .andExpect(status().isCreated());
// check result... assertArtifact(sm, random);
// 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");
} }
@Test @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.") @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 { 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); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
@@ -342,19 +319,16 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andExpect(header().string("ETag", artifact2.getSha1Hash())) .andExpect(header().string("ETag", artifact2.getSha1Hash()))
.andExpect(content().contentType(MediaType.APPLICATION_OCTET_STREAM)).andReturn(); .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(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremodule size is wrong").hasSize(1);
assertThat(artifactRepository.findAll()).hasSize(2); assertThat(artifactRepository.findAll()).as("Wrong artifact repostiory").hasSize(2);
} }
@Test @Test
@Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and download links.") @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 { public void getArtifact() throws Exception {
// check baseline
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
assertThat(artifactRepository.findAll()).hasSize(0);
// prepare data for test // prepare data for test
SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
@@ -540,8 +514,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
@WithUser(principal = "uploadTester", allSpPermissions = true) @WithUser(principal = "uploadTester", allSpPermissions = true)
@Description("Test retrieval of all software modules the user has access to.") @Description("Test retrieval of all software modules the user has access to.")
public void getSoftwareModules() throws Exception { public void getSoftwareModules() throws Exception {
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1");
os = softwareManagement.createSoftwareModule(os); os = softwareManagement.createSoftwareModule(os);
@@ -604,14 +576,12 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andExpect(jsonPath("$content.[?(@.id==" + ah.getId() + ")][0]._links.self.href", .andExpect(jsonPath("$content.[?(@.id==" + ah.getId() + ")][0]._links.self.href",
equalTo("http://localhost/rest/v1/softwaremodules/" + ah.getId()))); 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 @Test
@Description("Test the various filter parameters, e.g. filter by name or type of the module.") @Description("Test the various filter parameters, e.g. filter by name or type of the module.")
public void getSoftwareModulesWithFilterParameters() throws Exception { public void getSoftwareModulesWithFilterParameters() throws Exception {
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
SoftwareModule os1 = new SoftwareModule(osType, "osName1", "1.0.0", "description1", "vendor1"); SoftwareModule os1 = new SoftwareModule(osType, "osName1", "1.0.0", "description1", "vendor1");
os1 = softwareManagement.createSoftwareModule(os1); os1 = softwareManagement.createSoftwareModule(os1);
@@ -704,8 +674,6 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
@WithUser(principal = "uploadTester", allSpPermissions = true) @WithUser(principal = "uploadTester", allSpPermissions = true)
@Description("Tests GET request on /rest/v1/softwaremodules/{smId}.") @Description("Tests GET request on /rest/v1/softwaremodules/{smId}.")
public void getSoftareModule() throws Exception { public void getSoftareModule() throws Exception {
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1");
os = softwareManagement.createSoftwareModule(os); os = softwareManagement.createSoftwareModule(os);
@@ -763,15 +731,13 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andExpect(jsonPath("$_links.artifacts.href", .andExpect(jsonPath("$_links.artifacts.href",
equalTo("http://localhost/rest/v1/softwaremodules/" + ah.getId() + "/artifacts"))); 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 @Test
@WithUser(principal = "uploadTester", allSpPermissions = true) @WithUser(principal = "uploadTester", allSpPermissions = true)
@Description("Verfies that the create request actually results in the creation of the modules in the repository.") @Description("Verfies that the create request actually results in the creation of the modules in the repository.")
public void createSoftwareModules() throws JSONException, Exception { public void createSoftwareModules() throws JSONException, Exception {
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0);
final SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); final SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1");
final SoftwareModule jvm = new SoftwareModule(runtimeType, "name2", "version1", "description1", "vendor1"); final SoftwareModule jvm = new SoftwareModule(runtimeType, "name2", "version1", "description1", "vendor1");
final SoftwareModule ah = new SoftwareModule(appType, "name3", "version1", "description1", "vendor1"); final SoftwareModule ah = new SoftwareModule(appType, "name3", "version1", "description1", "vendor1");
@@ -816,74 +782,75 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
assertThat( assertThat(
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) 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()); .isEqualTo("http://localhost/rest/v1/softwaremodules/" + osCreated.getId());
assertThat(JsonPath.compile("[0]_links.artifacts.href").read(mvcResult.getResponse().getContentAsString()) 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( assertThat(
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) 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()); .isEqualTo("http://localhost/rest/v1/softwaremodules/" + jvmCreated.getId());
assertThat(JsonPath.compile("[1]_links.artifacts.href").read(mvcResult.getResponse().getContentAsString()) 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( assertThat(
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) 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()); .isEqualTo("http://localhost/rest/v1/softwaremodules/" + ahCreated.getId());
assertThat(JsonPath.compile("[2]_links.artifacts.href").read(mvcResult.getResponse().getContentAsString()) 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()) 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()) 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()) 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()) 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()) assertThat(softwareManagement.findSoftwareModulesByType(pageReq, appType).getContent().get(0).getName())
.isEqualTo(ah.getName()); .as("Softwaremoudle name is wrong").isEqualTo(ah.getName());
} }
@Test @Test
@Description("Verifies successfull deletion of software modules that are not in use, i.e. assigned to a DS.") @Description("Verifies successfull deletion of software modules that are not in use, i.e. assigned to a DS.")
public void deleteUnassignedSoftwareModule() throws Exception { 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); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes();
final Artifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false);
"file1", false);
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremoudle size is wrong").hasSize(1);
assertThat(artifactRepository.findAll()).hasSize(1); assertThat(artifactRepository.findAll()).as("artifact site is wrong").hasSize(1);
assertThat(softwareModuleRepository.findAll()).hasSize(1); assertThat(softwareModuleRepository.findAll()).as("Softwaremoudle size is wrong").hasSize(1);
mvc.perform(delete("/rest/v1/softwaremodules/{smId}", sm.getId())).andDo(MockMvcResultPrinter.print()) mvc.perform(delete("/rest/v1/softwaremodules/{smId}", sm.getId())).andDo(MockMvcResultPrinter.print())
.andExpect(status().isOk()); .andExpect(status().isOk());
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty(); assertThat(softwareManagement.findSoftwareModulesAll(pageReq))
assertThat(softwareModuleRepository.findAll()).isEmpty(); .as("After delete no softwarmodule should be available").isEmpty();
assertThat(artifactRepository.findAll()).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 @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.") @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 { public void deleteAssignedSoftwareModule() throws Exception {
// check baseline
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty();
assertThat(artifactRepository.findAll()).isEmpty();
final DistributionSet ds1 = TestDataUtil.generateDistributionSet("a", softwareManagement, final DistributionSet ds1 = TestDataUtil.generateDistributionSet("a", softwareManagement,
distributionSetManagement); distributionSetManagement);
final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); 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); ds1.findFirstModuleByType(appType).getId(), "file1", false);
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3);
@@ -898,17 +865,17 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
// all 3 are now marked as deleted // all 3 are now marked as deleted
assertThat(softwareManagement.findSoftwareModulesAll(pageReq).getNumber()).isEqualTo(0); assertThat(softwareManagement.findSoftwareModulesAll(pageReq).getNumber())
assertThat(softwareModuleRepository.findAll()).hasSize(3); .as("After delete no softwarmodule should be available").isEqualTo(0);
assertThat(artifactRepository.findAll()).hasSize(1); 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 @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.") @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 { public void deleteArtifact() throws Exception {
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).isEmpty();
assertThat(artifactRepository.findAll()).isEmpty();
// Create 1 SM // Create 1 SM
SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null);
sm = softwareManagement.createSoftwareModule(sm); sm = softwareManagement.createSoftwareModule(sm);
@@ -918,8 +885,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
// Create 2 artifacts // Create 2 artifacts
final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random),
sm.getId(), "file1", false); sm.getId(), "file1", false);
final LocalArtifact artifact2 = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file2", false);
sm.getId(), "file2", false);
// check repo before delete // check repo before delete
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1);
@@ -932,9 +898,12 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
// check that only one artifact is still alive and still assigned // check that only one artifact is still alive and still assigned
assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("After the sm should be marked as deleted")
assertThat(artifactRepository.findAll()).hasSize(1); .hasSize(1);
assertThat(softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts()).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 metaKey1 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey1));
final SoftwareModuleMetadata metaKey2 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey2)); final SoftwareModuleMetadata metaKey2 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey2));
assertThat(metaKey1.getValue()).isEqualTo(knownValue1); assertThat(metaKey1.getValue()).as("Metadata key is wrong").isEqualTo(knownValue1);
assertThat(metaKey2.getValue()).isEqualTo(knownValue2); assertThat(metaKey2.getValue()).as("Metadata key is wrong").isEqualTo(knownValue2);
} }
@Test @Test
@@ -989,7 +958,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo
.andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue))); .andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue)));
final SoftwareModuleMetadata assertDS = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey)); final SoftwareModuleMetadata assertDS = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey));
assertThat(assertDS.getValue()).isEqualTo(updateValue); assertThat(assertDS.getValue()).as("Metadata is wrong").isEqualTo(updateValue);
} }
@Test @Test

View File

@@ -39,10 +39,15 @@ public class ExceptionInfoTest {
underTest.setMessage(knownMessage); underTest.setMessage(knownMessage);
underTest.setParameters(knownParameters); underTest.setParameters(knownParameters);
assertThat(underTest.getErrorCode()).isEqualTo(knownErrorCode); assertThat(underTest.getErrorCode()).as("The error code should match with the known error code in the test")
assertThat(underTest.getExceptionClass()).isEqualTo(knownExceptionClass); .isEqualTo(knownErrorCode);
assertThat(underTest.getMessage()).isEqualTo(knownMessage); assertThat(underTest.getExceptionClass())
assertThat(underTest.getParameters()).isEqualTo(knownParameters); .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);
} }
} }

View File

@@ -37,10 +37,13 @@ public class PagedListTest {
knownContentList.add("content1"); knownContentList.add("content1");
knownContentList.add("content2"); knownContentList.add("content2");
final PagedList<String> pagedList = new PagedList<>(knownContentList, knownTotal); assertListSize(knownTotal, knownContentList);
}
assertThat(pagedList.getTotal()).isEqualTo(knownTotal); private void assertListSize(final long knownTotal, final List<String> knownContentList) {
assertThat(pagedList.getSize()).isEqualTo(knownContentList.size()); final PagedList<String> 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 @Test
@@ -51,9 +54,7 @@ public class PagedListTest {
knownContentList.add("content1"); knownContentList.add("content1");
knownContentList.add("content2"); knownContentList.add("content2");
final PagedList<String> pagedList = new PagedList<>(knownContentList, knownTotal); assertListSize(knownTotal, knownContentList);
assertThat(pagedList.getTotal()).isEqualTo(knownTotal);
assertThat(pagedList.getSize()).isEqualTo(knownContentList.size());
} }
} }

View File

@@ -15,7 +15,6 @@ import java.util.concurrent.Callable;
import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions;
import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.hawkbit.tenancy.TenantAware;
import org.eclipse.hawkbit.tenancy.TenantAware.TenantRunner;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -30,8 +29,7 @@ import org.springframework.stereotype.Service;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
/** /**
* @author Michael Hirsch *
*
*/ */
@Service @Service
public class SystemSecurityContext { public class SystemSecurityContext {
@@ -45,15 +43,12 @@ public class SystemSecurityContext {
final SecurityContext oldContext = SecurityContextHolder.getContext(); final SecurityContext oldContext = SecurityContextHolder.getContext();
try { try {
logger.debug("entering system code execution"); logger.debug("entering system code execution");
return tenantAware.runAsTenant(tenantAware.getCurrentTenant(), new TenantRunner<T>() { return tenantAware.runAsTenant(tenantAware.getCurrentTenant(), () -> {
@Override try {
public T run() { setSystemContext();
try { return callable.call();
setSystemContext(); } catch (final Exception e) {
return callable.call(); throw Throwables.propagate(e);
} catch (final Exception e) {
throw Throwables.propagate(e);
}
} }
}); });
@@ -106,7 +101,8 @@ public class SystemSecurityContext {
} }
@Override @Override
public void setAuthenticated(final boolean isAuthenticated) throws IllegalArgumentException { public void setAuthenticated(final boolean isAuthenticated) {
// not needed
} }
} }
} }

View File

@@ -20,9 +20,6 @@ import com.google.common.net.HttpHeaders;
/** /**
* A utility which determines the correct IP of a connected {@link Target}. E.g * A utility which determines the correct IP of a connected {@link Target}. E.g
* from a {@link HttpServletRequest}. * from a {@link HttpServletRequest}.
*
*
*
* *
*/ */
public final class IpUtil { public final class IpUtil {
@@ -95,7 +92,6 @@ public final class IpUtil {
if (isIpV6) { if (isIpV6) {
return URI.create(scheme + SCHEME_SEPERATOR + "[" + host + "]"); return URI.create(scheme + SCHEME_SEPERATOR + "[" + host + "]");
} }
return URI.create(scheme + SCHEME_SEPERATOR + host); return URI.create(scheme + SCHEME_SEPERATOR + host);
} }
@@ -104,12 +100,14 @@ public final class IpUtil {
* *
* @param host * @param host
* the host * the host
* @param exchange
* the exchange will store in the path
* @return the {@link URI} * @return the {@link URI}
* @throws IllegalArgumentException * @throws IllegalArgumentException
* If the given string not parsable * If the given string not parsable
*/ */
public static URI createAmqpUri(final String host) { public static URI createAmqpUri(final String host, final String exchange) {
return createUri(AMPQP_SCHEME, host); return createUri(AMPQP_SCHEME, host).resolve("/" + exchange);
} }
/** /**

View File

@@ -61,7 +61,8 @@ public class ExcludePathAwareShallowETagFilterTest {
filterUnderTest.doFilterInternal(servletRequestMock, servletResponseMock, filterChainMock); filterUnderTest.doFilterInternal(servletRequestMock, servletResponseMock, filterChainMock);
// verify no eTag header is set and response has not been changed // 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! // the servlet response must be the same mock!
verify(filterChainMock, times(1)).doFilter(servletRequestMock, servletResponseMock); verify(filterChainMock, times(1)).doFilter(servletRequestMock, servletResponseMock);
} }

View File

@@ -53,7 +53,8 @@ public class IpUtilTest {
final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux"); final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux");
// verify // 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)).getHeader("bumlux");
verify(requestMock, times(1)).getRemoteAddr(); verify(requestMock, times(1)).getRemoteAddr();
} }
@@ -71,7 +72,8 @@ public class IpUtilTest {
final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For"); final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For");
// verify // 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(1)).getHeader(HttpHeaders.X_FORWARDED_FOR);
verify(requestMock, times(0)).getRemoteAddr(); verify(requestMock, times(0)).getRemoteAddr();
} }
@@ -94,45 +96,50 @@ public class IpUtilTest {
} }
private void assertHttpUri(final String host, final URI httpUri) { private void assertHttpUri(final String host, final URI httpUri) {
assertTrue(IpUtil.isHttpUri(httpUri)); assertTrue("The given URI has an http scheme", IpUtil.isHttpUri(httpUri));
assertFalse(IpUtil.isAmqpUri(httpUri)); assertFalse("The given URI is not an AMQP scheme", IpUtil.isAmqpUri(httpUri));
assertEquals(host, httpUri.getHost()); assertEquals("The URI hosts matches the given host", host, httpUri.getHost());
assertEquals("http", httpUri.getScheme()); assertEquals("The given URI scheme is http", "http", httpUri.getScheme());
} }
@Test @Test
@Description("Tests create amqp uri ipv4 and ipv6") @Description("Tests create amqp uri ipv4 and ipv6")
public void testCreateAmqpUri() { public void testCreateAmqpUri() {
final String ipv4 = "10.99.99.1"; final String ipv4 = "10.99.99.1";
URI amqpUri = IpUtil.createAmqpUri(ipv4); URI amqpUri = IpUtil.createAmqpUri(ipv4, "path");
assertAmqpUri(ipv4, amqpUri); assertAmqpUri(ipv4, amqpUri);
final String host = "myhost"; final String host = "myhost";
amqpUri = IpUtil.createAmqpUri(host); amqpUri = IpUtil.createAmqpUri(host, "path");
assertAmqpUri(host, amqpUri); assertAmqpUri(host, amqpUri);
final String ipv6 = "0:0:0:0:0:0:0:1"; final String ipv6 = "0:0:0:0:0:0:0:1";
amqpUri = IpUtil.createAmqpUri(ipv6); amqpUri = IpUtil.createAmqpUri(ipv6, "path");
assertAmqpUri("[" + ipv6 + "]", amqpUri); assertAmqpUri("[" + ipv6 + "]", amqpUri);
} }
private void assertAmqpUri(final String host, final URI httpUri) { private void assertAmqpUri(final String host, final URI amqpUri) {
assertTrue(IpUtil.isAmqpUri(httpUri)); assertTrue("The given URI is an AMQP scheme", IpUtil.isAmqpUri(amqpUri));
assertFalse(IpUtil.isHttpUri(httpUri)); assertFalse("The given URI is not an HTTP scheme", IpUtil.isHttpUri(amqpUri));
assertEquals(host, httpUri.getHost()); assertEquals("The given host matches the URI host", host, amqpUri.getHost());
assertEquals("amqp", httpUri.getScheme()); 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") @Description("Tests create invalid uri")
public void testCreateInvalidUri() { public void testCreateInvalidUri() {
final String host = "10.99.99.1"; final String host = "10.99.99.1";
final URI testUri = IpUtil.createUri("test", host); final URI testUri = IpUtil.createUri("test", host);
assertFalse(IpUtil.isAmqpUri(testUri)); assertFalse("The given URI is not an AMQP address", IpUtil.isAmqpUri(testUri));
assertFalse(IpUtil.isHttpUri(testUri)); assertFalse("The given URI is not an HTTP address", IpUtil.isHttpUri(testUri));
assertEquals(host, testUri.getHost()); assertEquals("The given host matches the URI host", host, testUri.getHost());
IpUtil.createUri(":/", host); try {
fail(); IpUtil.createUri(":/", host);
fail("Missing expected IllegalArgumentException due invalid URI");
} catch (final IllegalArgumentException e) {
// expected
}
} }
} }

View File

@@ -14,12 +14,11 @@ import java.util.Set;
import javax.servlet.http.Cookie; 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.components.SPUIErrorHandler;
import org.eclipse.hawkbit.ui.menu.DashboardEvent.PostViewChangeEvent; import org.eclipse.hawkbit.ui.menu.DashboardEvent.PostViewChangeEvent;
import org.eclipse.hawkbit.ui.menu.DashboardMenu; import org.eclipse.hawkbit.ui.menu.DashboardMenu;
import org.eclipse.hawkbit.ui.menu.DashboardMenuItem; 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.I18N;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.SpringContextHelper; 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.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.core.io.Resource; 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;
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.annotations.Title;
import com.vaadin.navigator.Navigator; import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.View; import com.vaadin.navigator.View;
@@ -45,9 +38,6 @@ import com.vaadin.server.ClientConnector.DetachListener;
import com.vaadin.server.Responsive; import com.vaadin.server.Responsive;
import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinService; 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.spring.navigator.SpringViewProvider;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout; import com.vaadin.ui.CssLayout;
@@ -71,6 +61,8 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener {
private static final String EMPTY_VIEW = ""; private static final String EMPTY_VIEW = "";
private EventPushStrategy pushStrategy;
@Autowired @Autowired
private SpringViewProvider viewProvider; private SpringViewProvider viewProvider;
@@ -92,69 +84,37 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener {
protected transient EventBus.SessionEventBus eventBus; protected transient EventBus.SessionEventBus eventBus;
/** /**
* An {@link com.google.common.eventbus.EventBus} subscriber which * Default constructor.
* 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 public HawkbitUI() {
@AllowConcurrentEvents // is empty, is ok.
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);
}
} }
protected boolean eventSecurityCheck(final SecurityContext userContext, /**
final org.eclipse.hawkbit.eventbus.event.Event event) { * Constructor taking the push strategy.
if (userContext != null && userContext.getAuthentication() != null) { *
final Object tenantAuthenticationDetails = userContext.getAuthentication().getDetails(); * @param pushStrategy
if (tenantAuthenticationDetails instanceof TenantAwareAuthenticationDetails) { * the strategy to push events from the backend to the UI
return ((TenantAwareAuthenticationDetails) tenantAuthenticationDetails).getTenant() */
.equalsIgnoreCase(event.getTenant()); public HawkbitUI(final EventPushStrategy pushStrategy) {
} this.pushStrategy = pushStrategy;
}
return false;
} }
/*
* (non-Javadoc)
*
* @see
* com.vaadin.server.ClientConnector.DetachListener#detach(com.vaadin.server
* .ClientConnector. DetachEvent)
*/
@Override @Override
public void detach(final DetachEvent event) { public void detach(final DetachEvent event) {
LOG.info("ManagementUI is detached uiid - {}", getUIId()); LOG.info("ManagementUI is detached uiid - {}", getUIId());
eventBus.unsubscribe(this);
if (pushStrategy != null) {
pushStrategy.clean();
}
} }
@Override @Override
protected void init(final VaadinRequest vaadinRequest) { protected void init(final VaadinRequest vaadinRequest) {
LOG.info("ManagementUI init starts uiid - {}", getUI().getUIId()); LOG.info("ManagementUI init starts uiid - {}", getUI().getUIId());
if (pushStrategy != null) {
pushStrategy.init(getUI());
}
addDetachListener(this); addDetachListener(this);
SpringContextHelper.setContext(context); SpringContextHelper.setContext(context);

View File

@@ -208,14 +208,13 @@ public class ArtifactDetailsLayout extends VerticalLayout {
} }
private Container createArtifactLazyQueryContainer() { private Container createArtifactLazyQueryContainer() {
final Map<String, Object> queryConfiguration = new HashMap<String, Object>(); final Map<String, Object> queryConfiguration = new HashMap<>();
return getArtifactLazyQueryContainer(queryConfiguration); return getArtifactLazyQueryContainer(queryConfiguration);
} }
private LazyQueryContainer getArtifactLazyQueryContainer(final Map<String, Object> queryConfig) { private LazyQueryContainer getArtifactLazyQueryContainer(final Map<String, Object> queryConfig) {
final BeanQueryFactory<ArtifactBeanQuery> artifactQF = new BeanQueryFactory<ArtifactBeanQuery>( final BeanQueryFactory<ArtifactBeanQuery> artifactQF = new BeanQueryFactory<>(ArtifactBeanQuery.class);
ArtifactBeanQuery.class);
artifactQF.setQueryConfiguration(queryConfig); artifactQF.setQueryConfiguration(queryConfig);
final LazyQueryContainer artifactCont = new LazyQueryContainer(new LazyQueryDefinition(true, 10, "id"), final LazyQueryContainer artifactCont = new LazyQueryContainer(new LazyQueryDefinition(true, 10, "id"),
artifactQF); artifactQF);
@@ -431,7 +430,7 @@ public class ArtifactDetailsLayout extends VerticalLayout {
titleOfArtifactDetails.setContentMode(ContentMode.HTML); titleOfArtifactDetails.setContentMode(ContentMode.HTML);
} }
} }
final Map<String, Object> queryConfiguration = new HashMap<String, Object>(); final Map<String, Object> queryConfiguration = new HashMap<>();
if (baseSwModuleId != null) { if (baseSwModuleId != null) {
queryConfiguration.put(SPUIDefinitions.BY_BASE_SOFTWARE_MODULE, baseSwModuleId); queryConfiguration.put(SPUIDefinitions.BY_BASE_SOFTWARE_MODULE, baseSwModuleId);
} }

View File

@@ -47,12 +47,6 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria {
@Autowired @Autowired
private transient EventBus.SessionEventBus eventBus; private transient EventBus.SessionEventBus eventBus;
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.AbstractAcceptCriteria#analyseDragComponent
* (com.vaadin.event .dd.DragAndDropEvent, com.vaadin.ui.Component)
*/
@Override @Override
protected void analyseDragComponent(final Component compsource) { protected void analyseDragComponent(final Component compsource) {
final String sourceID = getComponentId(compsource); final String sourceID = getComponentId(compsource);
@@ -60,24 +54,11 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria {
eventBus.publish(this, event); eventBus.publish(this, event);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#hideDropHints
* ()
*/
@Override @Override
protected void hideDropHints() { protected void hideDropHints() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#invalidDrop()
*/
@Override @Override
protected void invalidDrop() { protected void invalidDrop() {
uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED);
@@ -92,41 +73,23 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria {
return id; return id;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* getDropHintConfigurations()
*/
@Override @Override
protected Map<String, Object> getDropHintConfigurations() { protected Map<String, Object> getDropHintConfigurations() {
return DROP_HINTS_CONFIGS; return DROP_HINTS_CONFIGS;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* publishDragStartEvent(java.lang.Object)
*/
@Override @Override
protected void publishDragStartEvent(final Object event) { protected void publishDragStartEvent(final Object event) {
eventBus.publish(this, event); eventBus.publish(this, event);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* getDropConfigurations()
*/
@Override @Override
protected Map<String, List<String>> getDropConfigurations() { protected Map<String, List<String>> getDropConfigurations() {
return DROP_CONFIGS; return DROP_CONFIGS;
} }
private static Map<String, List<String>> createDropConfigurations() { private static Map<String, List<String>> createDropConfigurations() {
final Map<String, List<String>> config = new HashMap<String, List<String>>(); final Map<String, List<String>> config = new HashMap<>();
// Delete drop area droppable components // Delete drop area droppable components
config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, Arrays.asList( config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, Arrays.asList(
SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)); SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX));
@@ -135,7 +98,7 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria {
} }
private static Map<String, Object> createDropHintConfigurations() { private static Map<String, Object> createDropHintConfigurations() {
final Map<String, Object> config = new HashMap<String, Object>(); final Map<String, Object> config = new HashMap<>();
config.put(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, UploadArtifactUIEvent.SOFTWARE_TYPE_DRAG_START); config.put(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, UploadArtifactUIEvent.SOFTWARE_TYPE_DRAG_START);
config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, UploadArtifactUIEvent.SOFTWARE_DRAG_START); config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, UploadArtifactUIEvent.SOFTWARE_DRAG_START);
return config; return config;

View File

@@ -37,8 +37,8 @@ import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.Table; import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.Table.TableTransferable; import com.vaadin.ui.Table.TableTransferable;
import com.vaadin.ui.UI;
/** /**
* Upload view footer layout implementation. * Upload view footer layout implementation.
@@ -71,12 +71,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
@Autowired @Autowired
private UploadViewAcceptCriteria uploadViewAcceptCriteria; private UploadViewAcceptCriteria uploadViewAcceptCriteria;
/* @Override
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#init()
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.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 @Override
protected boolean hasDeletePermission() { protected boolean hasDeletePermission() {
return permChecker.hasDeleteDistributionPermission(); return permChecker.hasDeleteDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#
* hasUpdatePermission()
*/
@Override @Override
protected boolean hasUpdatePermission() { protected boolean hasUpdatePermission() {
/** /**
@@ -161,12 +144,6 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#
* getDeleteAreaLabel()
*/
@Override @Override
protected String getDeleteAreaLabel() { protected String getDeleteAreaLabel() {
return i18n.get("label.software.module.drop.area"); return i18n.get("label.software.module.drop.area");
@@ -177,29 +154,17 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#
* getDeleteLayoutAcceptCriteria()
*/
@Override @Override
protected AcceptCriterion getDeleteLayoutAcceptCriteria() { protected AcceptCriterion getDeleteLayoutAcceptCriteria() {
return uploadViewAcceptCriteria; return uploadViewAcceptCriteria;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#
* processDroppedComponent(com.vaadin .event.dd.DragAndDropEvent)
*/
@Override @Override
protected void processDroppedComponent(final DragAndDropEvent event) { protected void processDroppedComponent(final DragAndDropEvent event) {
final Component sourceComponent = event.getTransferable().getSourceComponent(); final Component sourceComponent = event.getTransferable().getSourceComponent();
if (sourceComponent instanceof Table) { if (sourceComponent instanceof Table) {
final Table sourceTable = (Table) event.getTransferable().getSourceComponent(); final Table sourceTable = (Table) event.getTransferable().getSourceComponent();
addToDeleteList(sourceTable,(TableTransferable) event.getTransferable()); addToDeleteList(sourceTable, (TableTransferable) event.getTransferable());
updateSWActionCount(); updateSWActionCount();
} }
if (sourceComponent.getId().startsWith(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { if (sourceComponent.getId().startsWith(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) {
@@ -223,11 +188,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
private void deleteSWModuleType(final String swModuleTypeName) { private void deleteSWModuleType(final String swModuleTypeName) {
artifactUploadState.getSelectedDeleteSWModuleTypes().add(swModuleTypeName); artifactUploadState.getSelectedDeleteSWModuleTypes().add(swModuleTypeName);
} }
private void addToDeleteList(final Table sourceTable, final TableTransferable transferable) { private void addToDeleteList(final Table sourceTable, final TableTransferable transferable) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final Set<Long> swModuleSelected = (Set<Long>) sourceTable.getValue(); final Set<Long> swModuleSelected = (Set<Long>) sourceTable.getValue();
final Set<Long> swModuleIdNameSet = new HashSet<Long>(); final Set<Long> swModuleIdNameSet = new HashSet<>();
if (!swModuleSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { if (!swModuleSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) {
swModuleIdNameSet.add((Long) transferable.getData(SPUIDefinitions.ITEMID)); swModuleIdNameSet.add((Long) transferable.getData(SPUIDefinitions.ITEMID));
} else { } else {
@@ -239,33 +204,18 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
artifactUploadState.getDeleteSofwareModules().put(id, swModuleName); artifactUploadState.getDeleteSofwareModules().put(id, swModuleName);
}); });
} }
/**
* Update the software module delete count.
*/
private void updateSWActionCount() { private void updateSWActionCount() {
final int count = artifactUploadState.getDeleteSofwareModules().size() final int count = artifactUploadState.getDeleteSofwareModules().size()
+ artifactUploadState.getSelectedDeleteSWModuleTypes().size(); + artifactUploadState.getSelectedDeleteSWModuleTypes().size();
updateActionsCount(count); updateActionsCount(count);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#
* getNoActionsButtonLabel()
*/
@Override @Override
protected String getNoActionsButtonLabel() { protected String getNoActionsButtonLabel() {
return i18n.get("button.no.actions"); return i18n.get("button.no.actions");
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#
* getActionsButtonLabel()
*/
@Override @Override
protected String getActionsButtonLabel() { protected String getActionsButtonLabel() {
return i18n.get("button.actions"); return i18n.get("button.actions");
@@ -276,25 +226,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
updateSWActionCount(); updateSWActionCount();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getUnsavedActionsWindowCaption ()
*/
@Override @Override
protected String getUnsavedActionsWindowCaption() { protected String getUnsavedActionsWindowCaption() {
return i18n.get("caption.save.window"); return i18n.get("caption.save.window");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* unsavedActionsWindowClosed()
*/
@Override @Override
protected void unsavedActionsWindowClosed() { protected void unsavedActionsWindowClosed() {
final String message = uploadViewConfirmationWindowLayout.getConsolidatedMessage(); 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 @Override
protected Component getUnsavedActionsWindowContent() { protected Component getUnsavedActionsWindowContent() {
uploadViewConfirmationWindowLayout.init(); uploadViewConfirmationWindowLayout.init();
return uploadViewConfirmationWindowLayout; return uploadViewConfirmationWindowLayout;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* hasUnsavedActions()
*/
@Override @Override
protected boolean hasUnsavedActions() { protected boolean hasUnsavedActions() {
return !artifactUploadState.getDeleteSofwareModules().isEmpty() return !artifactUploadState.getDeleteSofwareModules().isEmpty()
@@ -339,23 +261,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout#
* isBulkUploadAllowed()
*/
@Override @Override
protected boolean hasBulkUploadPermission() { protected boolean hasBulkUploadPermission() {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout#
* showBulkUploadWindow()
*/
@Override @Override
protected void showBulkUploadWindow() { protected void showBulkUploadWindow() {
/** /**
@@ -363,12 +273,6 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout {
*/ */
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout#
* restoreBulkUploadStatusCount()
*/
@Override @Override
protected void restoreBulkUploadStatusCount() { protected void restoreBulkUploadStatusCount() {
/** /**

View File

@@ -32,10 +32,6 @@ import com.google.common.base.Strings;
* Simple implementation of generics bean query which dynamically loads a batch * Simple implementation of generics bean query which dynamically loads a batch
* of beans. * of beans.
* *
*
*
*
*
*/ */
public class BaseSwModuleBeanQuery extends AbstractBeanQuery<ProxyBaseSoftwareModuleItem> { public class BaseSwModuleBeanQuery extends AbstractBeanQuery<ProxyBaseSoftwareModuleItem> {
private static final long serialVersionUID = 4362142538539335466L; private static final long serialVersionUID = 4362142538539335466L;
@@ -76,7 +72,7 @@ public class BaseSwModuleBeanQuery extends AbstractBeanQuery<ProxyBaseSoftwareMo
@Override @Override
protected List<ProxyBaseSoftwareModuleItem> loadBeans(final int startIndex, final int count) { protected List<ProxyBaseSoftwareModuleItem> loadBeans(final int startIndex, final int count) {
final Slice<SoftwareModule> swModuleBeans; final Slice<SoftwareModule> swModuleBeans;
final List<ProxyBaseSoftwareModuleItem> proxyBeans = new ArrayList<ProxyBaseSoftwareModuleItem>(); final List<ProxyBaseSoftwareModuleItem> proxyBeans = new ArrayList<>();
if (type == null && Strings.isNullOrEmpty(searchText)) { if (type == null && Strings.isNullOrEmpty(searchText)) {
swModuleBeans = getSoftwareManagementService() swModuleBeans = getSoftwareManagementService()

View File

@@ -70,6 +70,7 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout {
/** /**
* Initialize the component. * Initialize the component.
*/ */
@Override
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();

View File

@@ -55,8 +55,6 @@ import com.vaadin.ui.UI;
/** /**
* Header of Software module table. * Header of Software module table.
* *
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -82,6 +80,7 @@ public class SoftwareModuleTable extends AbstractTable {
/** /**
* Initialize the filter layout. * Initialize the filter layout.
*/ */
@Override
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.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 @Override
protected String getTableId() { protected String getTableId() {
return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE; return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTable#createContainer()
*/
@Override @Override
protected Container createContainer() { protected Container createContainer() {
final Map<String, Object> queryConfiguration = new HashMap<String, Object>(); final Map<String, Object> queryConfiguration = prepareQueryConfigFilters();
artifactUploadState.getSoftwareModuleFilters().getSearchText()
.ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value));
artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType() final BeanQueryFactory<BaseSwModuleBeanQuery> swQF = new BeanQueryFactory<>(BaseSwModuleBeanQuery.class);
.ifPresent(type -> queryConfiguration.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type));
final BeanQueryFactory<BaseSwModuleBeanQuery> swQF = new BeanQueryFactory<BaseSwModuleBeanQuery>(
BaseSwModuleBeanQuery.class);
swQF.setQueryConfiguration(queryConfiguration); swQF.setQueryConfiguration(queryConfiguration);
final LazyQueryContainer container = new LazyQueryContainer( return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF);
new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); }
return container;
private Map<String, Object> prepareQueryConfigFilters() {
final Map<String, Object> 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 @Override
@@ -265,16 +257,9 @@ public class SoftwareModuleTable extends AbstractTable {
select(swModule.getId()); select(swModule.getId());
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTable#getTableVisibleColumns
* ()
*/
@Override @Override
protected List<TableColumn> getTableVisibleColumns() { protected List<TableColumn> getTableVisibleColumns() {
final List<TableColumn> columnList = new ArrayList<TableColumn>(); final List<TableColumn> columnList = new ArrayList<>();
if (isMaximized()) { if (isMaximized()) {
columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); 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)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F));

View File

@@ -62,6 +62,7 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader {
/** /**
* Initialize the components. * Initialize the components.
*/ */
@Override
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -84,55 +85,26 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader {
eventbus.unsubscribe(this); eventbus.unsubscribe(this);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getHeaderCaption
* ()
*/
@Override @Override
protected String getHeaderCaption() { protected String getHeaderCaption() {
return i18n.get("upload.swModuleTable.header"); return i18n.get("upload.swModuleTable.header");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getSearchBoxId()
*/
@Override @Override
protected String getSearchBoxId() { protected String getSearchBoxId() {
return SPUIComponetIdProvider.SW_MODULE_SEARCH_TEXT_FIELD; return SPUIComponetIdProvider.SW_MODULE_SEARCH_TEXT_FIELD;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#getSearchRestIconId()
*/
@Override @Override
protected String getSearchRestIconId() { protected String getSearchRestIconId() {
return SPUIComponetIdProvider.SW_MODULE_SEARCH_RESET_ICON; return SPUIComponetIdProvider.SW_MODULE_SEARCH_RESET_ICON;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getAddIconId()
*/
@Override @Override
protected String getAddIconId() { protected String getAddIconId() {
return SPUIComponetIdProvider.SW_MODULE_ADD_BUTTON; return SPUIComponetIdProvider.SW_MODULE_ADD_BUTTON;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#onLoadSearchBoxValue()
*/
@Override @Override
protected String onLoadSearchBoxValue() { protected String onLoadSearchBoxValue() {
if (artifactUploadState.getSoftwareModuleFilters().getSearchText().isPresent()) { if (artifactUploadState.getSoftwareModuleFilters().getSearchText().isPresent()) {
@@ -141,68 +113,34 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getDropFilterId(
* )
*/
@Override @Override
protected String getDropFilterId() { protected String getDropFilterId() {
/* No dropping on software module table header in Upload View */ /* No dropping on software module table header in Upload View */
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#hasCreatePermission()
*/
@Override @Override
protected boolean hasCreatePermission() { protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission(); return permChecker.hasCreateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#isDropHintRequired()
*/
@Override @Override
protected boolean isDropHintRequired() { protected boolean isDropHintRequired() {
/* No dropping on software module table header in Upload View */ /* No dropping on software module table header in Upload View */
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#isDropFilterRequired()
*/
@Override @Override
protected boolean isDropFilterRequired() { protected boolean isDropFilterRequired() {
/* No dropping on software module table header in Upload View */ /* No dropping on software module table header in Upload View */
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#
* getShowFilterButtonLayoutId()
*/
@Override @Override
protected String getShowFilterButtonLayoutId() { protected String getShowFilterButtonLayoutId() {
return "show.type.icon"; return "show.type.icon";
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#showFilterButtonsLayout
* ()
*/
@Override @Override
protected void showFilterButtonsLayout() { protected void showFilterButtonsLayout() {
artifactUploadState.setSwTypeFilterClosed(false); 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 @Override
protected void resetSearchText() { protected void resetSearchText() {
artifactUploadState.getSoftwareModuleFilters().setSearchText(null); if (artifactUploadState.getSoftwareModuleFilters().getSearchText().isPresent()) {
eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); 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 @Override
protected String getMaxMinIconId() { protected String getMaxMinIconId() {
return SPUIComponetIdProvider.SW_MAX_MIN_TABLE_ICON; return SPUIComponetIdProvider.SW_MAX_MIN_TABLE_ICON;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#maximizeTable()
*/
@Override @Override
public void maximizeTable() { public void maximizeTable() {
artifactUploadState.setSwModuleTableMaximized(Boolean.TRUE); 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 @Override
public void minimizeTable() { public void minimizeTable() {
artifactUploadState.setSwModuleTableMaximized(Boolean.FALSE); artifactUploadState.setSwModuleTableMaximized(Boolean.FALSE);
eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null)); eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null));
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#onLoadIsTableMaximized(
* )
*/
@Override @Override
public Boolean onLoadIsTableMaximized() { public Boolean onLoadIsTableMaximized() {
return artifactUploadState.isSwModuleTableMaximized(); return artifactUploadState.isSwModuleTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#
* onLoadIsShowFilterButtonDisplayed()
*/
@Override @Override
public Boolean onLoadIsShowFilterButtonDisplayed() { public Boolean onLoadIsShowFilterButtonDisplayed() {
return artifactUploadState.isSwTypeFilterClosed(); return artifactUploadState.isSwTypeFilterClosed();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#searchBy(java.lang.
* String)
*/
@Override @Override
protected void searchBy(final String newSearchText) { protected void searchBy(final String newSearchText) {
artifactUploadState.getSoftwareModuleFilters().setSearchText(newSearchText); artifactUploadState.getSoftwareModuleFilters().setSearchText(newSearchText);
eventbus.publish(this, SMFilterEvent.FILTER_BY_TEXT); eventbus.publish(this, SMFilterEvent.FILTER_BY_TEXT);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#addNewItem(com.vaadin.
* ui.Button.ClickEvent)
*/
@Override @Override
protected void addNewItem(final ClickEvent event) { protected void addNewItem(final ClickEvent event) {
final Window addSoftwareModule = softwareModuleAddUpdateWindow.createAddSoftwareModuleWindow(); final Window addSoftwareModule = softwareModuleAddUpdateWindow.createAddSoftwareModuleWindow();
@@ -308,11 +198,6 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader {
addSoftwareModule.setVisible(Boolean.TRUE); addSoftwareModule.setVisible(Boolean.TRUE);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#canAddNewItem()
*/
@Override @Override
protected Boolean isAddNewItemAllowed() { protected Boolean isAddNewItemAllowed() {
return Boolean.TRUE; return Boolean.TRUE;
@@ -333,47 +218,21 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getBulkUploadIconId()
*/
@Override @Override
protected String getBulkUploadIconId() { protected String getBulkUploadIconId() {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com.
* vaadin.ui.Button.ClickEvent )
*/
@Override @Override
protected void bulkUpload(final ClickEvent event) { 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 @Override
protected Boolean isBulkUploadAllowed() { protected Boolean isBulkUploadAllowed() {
return Boolean.FALSE; return Boolean.FALSE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader#
* isBulkUploadInProgress()
*/
@Override @Override
protected boolean isBulkUploadInProgress() { protected boolean isBulkUploadInProgress() {
return false; return false;

View File

@@ -193,7 +193,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C
getPreviewButtonColor(DEFAULT_COLOR); getPreviewButtonColor(DEFAULT_COLOR);
tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE);
selectors = new HashSet<ColorSelector>(); selectors = new HashSet<>();
selectedColor = new Color(44, 151, 32); selectedColor = new Color(44, 151, 32);
selPreview = new SpColorPickerPreview(selectedColor); selPreview = new SpColorPickerPreview(selectedColor);
@@ -741,38 +741,17 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see com.vaadin.ui.components.colorpicker.HasColorChangeListener#
* addColorChangeListener(com.vaadin
* .ui.components.colorpicker.ColorChangeListener)
*/
@Override @Override
public void addColorChangeListener(final ColorChangeListener listener) { public void addColorChangeListener(final ColorChangeListener listener) {
LOG.debug("inside addColorChangeListener"); LOG.debug("inside addColorChangeListener");
} }
/*
* (non-Javadoc)
*
* @see com.vaadin.ui.components.colorpicker.HasColorChangeListener#
* removeColorChangeListener(com.
* vaadin.ui.components.colorpicker.ColorChangeListener)
*/
@Override @Override
public void removeColorChangeListener(final ColorChangeListener listener) { public void removeColorChangeListener(final ColorChangeListener listener) {
LOG.debug("inside removeColorChangeListener"); LOG.debug("inside removeColorChangeListener");
} }
/*
* (non-Javadoc)
*
* @see
* com.vaadin.ui.components.colorpicker.ColorSelector#setColor(com.vaadin.
* shared.ui.colorpicker .Color)
*/
@Override @Override
public void setColor(final Color color) { public void setColor(final Color color) {
if (color == null) { 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 @Override
public Color getColor() { public Color getColor() {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* com.vaadin.ui.components.colorpicker.ColorChangeListener#colorChanged(com
* .vaadin.ui.components .colorpicker.ColorChangeEvent)
*/
@Override @Override
public void colorChanged(final ColorChangeEvent event) { public void colorChanged(final ColorChangeEvent event) {
setColor(event.getColor()); setColor(event.getColor());

View File

@@ -35,8 +35,6 @@ import com.vaadin.spring.annotation.ViewScope;
/** /**
* Software module type filter buttons. * Software module type filter buttons.
* *
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -59,6 +57,7 @@ public class SMTypeFilterButtons extends AbstractFilterButtons {
* @param filterButtonClickBehaviour * @param filterButtonClickBehaviour
* the clickable behaviour. * the clickable behaviour.
*/ */
@Override
public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) {
super.init(filterButtonClickBehaviour); super.init(filterButtonClickBehaviour);
eventBus.subscribe(this); eventBus.subscribe(this);
@@ -86,58 +85,28 @@ public class SMTypeFilterButtons extends AbstractFilterButtons {
} }
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.layouts.SPFilterButtons#getButtonsTableId()
*/
@Override @Override
protected String getButtonsTableId() { protected String getButtonsTableId() {
return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID; return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.layouts.SPFilterButtons#
* createButtonsLazyQueryContainer()
*/
@Override @Override
protected LazyQueryContainer createButtonsLazyQueryContainer() { protected LazyQueryContainer createButtonsLazyQueryContainer() {
return HawkbitCommonUtil.createLazyQueryContainer( return HawkbitCommonUtil.createLazyQueryContainer(
new BeanQueryFactory<SoftwareModuleTypeBeanQuery>(SoftwareModuleTypeBeanQuery.class)); new BeanQueryFactory<SoftwareModuleTypeBeanQuery>(SoftwareModuleTypeBeanQuery.class));
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.layouts.SPFilterButtons#isClickedByDefault(java.
* lang.Long)
*/
@Override @Override
protected boolean isClickedByDefault(final Long buttonId) { protected boolean isClickedByDefault(final Long buttonId) {
return artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() && artifactUploadState return artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() && artifactUploadState
.getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId); .getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.layouts.SPFilterButtons#createButtonId(java.lang.
* String)
*/
@Override @Override
protected String createButtonId(final String name) { protected String createButtonId(final String name) {
return SPUIComponetIdProvider.SM_TYPE_FILTER_BTN_ID + name; return SPUIComponetIdProvider.SM_TYPE_FILTER_BTN_ID + name;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.filterlayout.SPFilterButtons#
* getFilterButtonDropHandler()
*/
@Override @Override
protected DropHandler getFilterButtonDropHandler() { protected DropHandler getFilterButtonDropHandler() {
return new DropHandler() { 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 @Override
protected String getButttonWrapperIdPrefix() { protected String getButttonWrapperIdPrefix() {
return SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX; return SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX;

View File

@@ -28,9 +28,6 @@ import com.vaadin.ui.Window;
/** /**
* Software module type filter buttons header. * Software module type filter buttons header.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -53,6 +50,7 @@ public class SMTypeFilterHeader extends AbstractFilterHeader {
/** /**
* Initialize the components. * Initialize the components.
*/ */
@Override
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -61,32 +59,16 @@ public class SMTypeFilterHeader extends AbstractFilterHeader {
} }
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.layouts.SPFilterHeader#hasCreateUpdatePermission()
*/
@Override @Override
protected boolean hasCreateUpdatePermission() { protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.layouts.SPFilterHeader#getTitle()
*/
@Override @Override
protected String getTitle() { protected String getTitle() {
return SPUILabelDefinitions.TYPE; return SPUILabelDefinitions.TYPE;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.layouts.SPFilterHeader#settingsIconClicked(com.
* vaadin.ui.Button.ClickEvent )
*/
@Override @Override
protected void settingsIconClicked(final ClickEvent event) { protected void settingsIconClicked(final ClickEvent event) {
final Window addUpdateWindow = createUpdateSWTypeLayout.getWindow(); final Window addUpdateWindow = createUpdateSWTypeLayout.getWindow();
@@ -94,58 +76,27 @@ public class SMTypeFilterHeader extends AbstractFilterHeader {
addUpdateWindow.setVisible(Boolean.TRUE); addUpdateWindow.setVisible(Boolean.TRUE);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.layouts.SPFilterHeader#dropHitsRequired()
*/
@Override @Override
protected boolean dropHitsRequired() { protected boolean dropHitsRequired() {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.filterlayout.SPFilterHeader#
* hideFilterButtonLayout()
*/
@Override @Override
protected void hideFilterButtonLayout() { protected void hideFilterButtonLayout() {
artifactUploadState.setSwTypeFilterClosed(true); artifactUploadState.setSwTypeFilterClosed(true);
eventbus.publish(this, UploadArtifactUIEvent.HIDE_FILTER_BY_TYPE); eventbus.publish(this, UploadArtifactUIEvent.HIDE_FILTER_BY_TYPE);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.filterlayout.SPFilterHeader#
* getConfigureFilterButtonId()
*/
@Override @Override
protected String getConfigureFilterButtonId() { protected String getConfigureFilterButtonId() {
return SPUIDefinitions.ADD_SOFTWARE_MODULE_TYPE; return SPUIDefinitions.ADD_SOFTWARE_MODULE_TYPE;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* getHideButtonId()
*/
@Override @Override
protected String getHideButtonId() { protected String getHideButtonId() {
return SPUIComponetIdProvider.SM_SHOW_FILTER_BUTTON_ID; return SPUIComponetIdProvider.SM_SHOW_FILTER_BUTTON_ID;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader#
* isAddTagRequired()
*/
@Override @Override
protected boolean isAddTagRequired() { protected boolean isAddTagRequired() {
return true; return true;

View File

@@ -56,11 +56,7 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Artifact upload confirmation popup. * Artifact upload confirmation popup.
* *
*
*
*
*
*/ */
public class UploadConfirmationwindow implements Button.ClickListener { public class UploadConfirmationwindow implements Button.ClickListener {
@@ -106,7 +102,7 @@ public class UploadConfirmationwindow implements Button.ClickListener {
private IndexedContainer tabelContainer; private IndexedContainer tabelContainer;
private final List<UploadStatus> uploadResultList = new ArrayList<UploadStatus>(); private final List<UploadStatus> uploadResultList = new ArrayList<>();
private VerticalLayout uploadArtifactDetails; private VerticalLayout uploadArtifactDetails;

View File

@@ -108,8 +108,10 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene
public OutputStream receiveUpload(final String fileName, final String mimeType) { public OutputStream receiveUpload(final String fileName, final String mimeType) {
this.fileName = fileName; this.fileName = fileName;
this.mimeType = mimeType; this.mimeType = mimeType;
//reset has directory flag before upload
view.setHasDirectory(false);
try { try {
if (view.validate()) { if (view.checkIfSoftwareModuleIsSelected()) {
if (view.checkForDuplicate(fileName)) { if (view.checkForDuplicate(fileName)) {
view.showDuplicateMessage(); view.showDuplicateMessage();
} else { } else {
@@ -167,7 +169,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene
view.updateActionCount(); view.updateActionCount();
// display the duplicate message after streaming all files // 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()) { if (view.enableProcessBtn()) {
infoWindow.uploadSessionFinished(); infoWindow.uploadSessionFinished();
} }
view.displayDuplicateMessageAfterStreamingAll(); view.displayDuplicateValidationMessage();
LOG.info("Streaming failed due to :{}", event.getException()); LOG.info("Streaming failed due to :{}", event.getException());
} }
@@ -316,7 +318,6 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene
} }
view.updateActionCount(); view.updateActionCount();
infoWindow.uploadFailed(event.getFilename(), failureReason); infoWindow.uploadFailed(event.getFilename(), failureReason);
LOG.info("Upload failed for file :{}", event.getReason()); LOG.info("Upload failed for file :{}", event.getReason());
} }

View File

@@ -46,6 +46,7 @@ import org.vaadin.spring.events.EventBus;
import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.EventScope;
import org.vaadin.spring.events.annotation.EventBusListenerMethod; import org.vaadin.spring.events.annotation.EventBusListenerMethod;
import com.google.common.base.Strings;
import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptAll; import com.vaadin.event.dd.acceptcriteria.AcceptAll;
@@ -69,8 +70,6 @@ import com.vaadin.ui.VerticalLayout;
/** /**
* Upload files layout. * Upload files layout.
*
*
*/ */
@ViewScope @ViewScope
@SpringComponent @SpringComponent
@@ -102,7 +101,7 @@ public class UploadLayout extends VerticalLayout {
private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger(); private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger();
private final List<String> duplicateFileNamesList = new ArrayList<String>(); private final List<String> duplicateFileNamesList = new ArrayList<>();
private Button processBtn; private Button processBtn;
@@ -118,6 +117,8 @@ public class UploadLayout extends VerticalLayout {
private DragAndDropWrapper dropAreaWrapper; private DragAndDropWrapper dropAreaWrapper;
private Boolean hasDirectory = Boolean.FALSE;
/** /**
* Initialize the upload layout. * Initialize the upload layout.
*/ */
@@ -184,27 +185,60 @@ public class UploadLayout extends VerticalLayout {
@Override @Override
public void drop(final DragAndDropEvent event) { public void drop(final DragAndDropEvent event) {
if (validate()) { if (validate(event)) {
final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles();
if (files != null) { // reset the flag
for (final Html5File file : files) { hasDirectory = Boolean.FALSE;
if (!checkForDuplicate(file.getFileName())) { for (final Html5File file : files) {
numberOfFileUploadsExpected.incrementAndGet(); processFile(file);
file.setStreamVariable(createStreamVariable(file)); }
} if (numberOfFileUploadsExpected.get() > 0) {
} processBtn.setEnabled(false);
if (numberOfFileUploadsExpected.get() > 0) { // reset before we start
processBtn.setEnabled(false); uploadInfoWindow.uploadSessionStarted();
// reset before we start } else {
uploadInfoWindow.uploadSessionStarted(); // If the upload is not started, it signifies all
} // dropped files as either duplicate or directory.So
// in case if all selected files are duplicate ,then display // display message accordingly
// message displayCompositeMessage();
displayDuplicateMessageAfterStreamingAll();
} }
} }
} }
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("<br>");
}
compositeMessage.append(i18n.get("message.no.directory.upload"));
}
if (!compositeMessage.toString().isEmpty()) {
uiNotification.displayValidationError(compositeMessage.toString());
}
} }
private VerticalLayout createDropAreaLayout() { 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()) { if (!isSoftwareModuleSelected()) {
uiNotification.displayValidationError(i18n.get("message.error.noSwModuleSelected")); uiNotification.displayValidationError(i18n.get("message.error.noSwModuleSelected"));
return false; return false;
} }
return true; return true;
@@ -383,27 +440,30 @@ public class UploadLayout extends VerticalLayout {
} }
} }
void displayDuplicateMessageAfterStreamingAll() { void displayDuplicateValidationMessage() {
// check if streaming of all dropped files are completed // check if streaming of all dropped files are completed
if (numberOfFilesActuallyUpload.intValue() == numberOfFileUploadsExpected.intValue()) { if (numberOfFilesActuallyUpload.intValue() == numberOfFileUploadsExpected.intValue()) {
showDuplicateMessage(); displayCompositeMessage();
} }
} }
/** private String getDuplicateFileValidationMessage() {
* Show duplicate file selected message. StringBuilder message = new StringBuilder();
*/
public void showDuplicateMessage() {
if (!duplicateFileNamesList.isEmpty()) { if (!duplicateFileNamesList.isEmpty()) {
final String fileNames = StringUtils.collectionToCommaDelimitedString(duplicateFileNamesList); final String fileNames = StringUtils.collectionToCommaDelimitedString(duplicateFileNamesList);
if (duplicateFileNamesList.size() == 1) { 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) { } else if (duplicateFileNamesList.size() > 1) {
uiNotification.displayValidationError(i18n.get("message.no.duplicateFiles")); message.append(i18n.get("message.no.duplicateFiles"));
} }
duplicateFileNamesList.clear(); duplicateFileNamesList.clear();
} }
return message.toString();
}
public void showDuplicateMessage() {
uiNotification.displayValidationError(getDuplicateFileValidationMessage());
} }
void increaseNumberOfFileUploadsExpected() { void increaseNumberOfFileUploadsExpected() {
@@ -595,4 +655,8 @@ public class UploadLayout extends VerticalLayout {
return uiNotification; return uiNotification;
} }
public void setHasDirectory(Boolean hasDirectory) {
this.hasDirectory = hasDirectory;
}
} }

View File

@@ -44,7 +44,7 @@ public class UploadResultWindow implements Button.ClickListener {
private static final long serialVersionUID = 5205927189362269027L; private static final long serialVersionUID = 5205927189362269027L;
private List<UploadStatus> uploadResultList = new ArrayList<UploadStatus>(); private List<UploadStatus> uploadResultList = new ArrayList<>();
private Button closeBtn; private Button closeBtn;

View File

@@ -29,9 +29,6 @@ import com.vaadin.ui.themes.ValoTheme;
* *
* module. * module.
* *
*
*
*
*/ */
public class ConfirmationDialog implements Button.ClickListener { public class ConfirmationDialog implements Button.ClickListener {
/** Serial version UID. */ /** Serial version UID. */
@@ -127,6 +124,7 @@ public class ConfirmationDialog implements Button.ClickListener {
* @param event * @param event
* the click event. * the click event.
*/ */
@Override
public void buttonClick(final ClickEvent event) { public void buttonClick(final ClickEvent event) {
if (window.getParent() != null) { if (window.getParent() != null) {
UI.getCurrent().removeWindow(window); UI.getCurrent().removeWindow(window);
@@ -146,6 +144,7 @@ public class ConfirmationDialog implements Button.ClickListener {
/** /**
* Interface for confirmation dialog callbacks. * Interface for confirmation dialog callbacks.
*/ */
@FunctionalInterface
public interface ConfirmationDialogCallback { public interface ConfirmationDialogCallback {
/** /**
* The user response. * The user response.

View File

@@ -83,7 +83,7 @@ public class DistributionSetTypeBeanQuery extends AbstractBeanQuery<Distribution
@Override @Override
protected List<DistributionSetType> loadBeans(final int startIndex, final int count) { protected List<DistributionSetType> loadBeans(final int startIndex, final int count) {
Page<DistributionSetType> typeBeans; Page<DistributionSetType> typeBeans;
final List<DistributionSetType> distSetTypeList = new ArrayList<DistributionSetType>(); final List<DistributionSetType> distSetTypeList = new ArrayList<>();
if (startIndex == 0 && firstPageDistSetType != null) { if (startIndex == 0 && firstPageDistSetType != null) {
typeBeans = firstPageDistSetType; typeBeans = firstPageDistSetType;
} else { } else {

View File

@@ -45,8 +45,6 @@ import com.vaadin.ui.UI;
/** /**
* Implementation of target/ds tag token layout. * Implementation of target/ds tag token layout.
*
*
* *
*/ */
@SpringComponent @SpringComponent
@@ -80,6 +78,7 @@ public class DistributionTagToken extends AbstractTagToken {
// To Be Done : have to set this value based on view??? // To Be Done : have to set this value based on view???
private static final Boolean NOTAGS_SELECTED = Boolean.FALSE; private static final Boolean NOTAGS_SELECTED = Boolean.FALSE;
@Override
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -88,34 +87,16 @@ public class DistributionTagToken extends AbstractTagToken {
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.tagDetails.AbstractTagToken#getTagStyleName
* ()
*/
@Override @Override
protected String getTagStyleName() { protected String getTagStyleName() {
return "distribution-tag-"; return "distribution-tag-";
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken#
* getTokenInputPrompt()
*/
@Override @Override
protected String getTokenInputPrompt() { protected String getTokenInputPrompt() {
return i18n.get("combo.type.tag.name"); return i18n.get("combo.type.tag.name");
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.tagDetails.AbstractTagToken#assignTag(java.
* lang.String)
*/
@Override @Override
protected void assignTag(final String tagNameSelected) { protected void assignTag(final String tagNameSelected) {
if (tagNameSelected != null) { if (tagNameSelected != null) {
@@ -129,7 +110,7 @@ public class DistributionTagToken extends AbstractTagToken {
} }
private DistributionSetTagAssigmentResult toggleAssignment(final String tagNameSelected) { private DistributionSetTagAssigmentResult toggleAssignment(final String tagNameSelected) {
final Set<Long> distributionList = new HashSet<Long>(); final Set<Long> distributionList = new HashSet<>();
distributionList.add(selectedDS.getId()); distributionList.add(selectedDS.getId());
final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList,
tagNameSelected); tagNameSelected);
@@ -137,12 +118,6 @@ public class DistributionTagToken extends AbstractTagToken {
return result; return result;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.tagDetails.AbstractTagToken#unassignTag(
* java.lang.String)
*/
@Override @Override
protected void unassignTag(final String tagName) { protected void unassignTag(final String tagName) {
final DistributionSetTagAssigmentResult result = toggleAssignment(tagName); final DistributionSetTagAssigmentResult result = toggleAssignment(tagName);
@@ -160,26 +135,14 @@ public class DistributionTagToken extends AbstractTagToken {
/* To Be Done : this implementation will vary in views */ /* To Be Done : this implementation will vary in views */
private List<String> getClickedTagList() { private List<String> getClickedTagList() {
return new ArrayList<String>(); return new ArrayList<>();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken#
* hasUpdatePermission()
*/
@Override @Override
protected Boolean isToggleTagAssignmentAllowed() { protected Boolean isToggleTagAssignmentAllowed() {
return spChecker.hasUpdateDistributionPermission(); return spChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken#
* displayAlreadyAssignedTags()
*/
@Override @Override
public void displayAlreadyAssignedTags() { public void displayAlreadyAssignedTags() {
removePreviouslyAddedTokens(); removePreviouslyAddedTokens();
@@ -190,12 +153,6 @@ public class DistributionTagToken extends AbstractTagToken {
} }
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.tagDetails.AbstractTagToken#
* populateContainer()
*/
@Override @Override
protected void populateContainer() { protected void populateContainer() {
container.removeAllItems(); container.removeAllItems();

View File

@@ -78,7 +78,7 @@ public class TargetTagToken extends AbstractTargetTagToken {
} }
private TargetTagAssigmentResult toggleAssignment(final String tagNameSelected) { private TargetTagAssigmentResult toggleAssignment(final String tagNameSelected) {
final Set<String> targetList = new HashSet<String>(); final Set<String> targetList = new HashSet<>();
targetList.add(selectedTarget.getControllerId()); targetList.add(selectedTarget.getControllerId());
final TargetTagAssigmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected); final TargetTagAssigmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected);
uinotification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(tagNameSelected, result, i18n)); 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 */ /* To Be Done : this implementation will vary in views */
private List<String> getClickedTagList() { private List<String> getClickedTagList() {
return new ArrayList<String>(); return new ArrayList<>();
} }
@Override @Override

View File

@@ -14,29 +14,11 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Style for button: Primary. * Style for button: Primary.
*
*
*
*
*
*
*/ */
public class SPUIButtonStylePrimarySmall implements SPUIButtonDecorator { public class SPUIButtonStylePrimarySmall implements SPUIButtonDecorator {
/** @Override
* Decorate Button and return. public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) {
*
* @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) {
button.addStyleName(ValoTheme.BUTTON_PRIMARY + " " + ValoTheme.BUTTON_SMALL); button.addStyleName(ValoTheme.BUTTON_PRIMARY + " " + ValoTheme.BUTTON_SMALL);
// Set Style // Set Style
if (null != style) { if (null != style) {

View File

@@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Style for button: Small. * Style for button: Small.
*
*
*
*
*
* *
*/ */
public class SPUIButtonStyleSmall implements SPUIButtonDecorator { public class SPUIButtonStyleSmall implements SPUIButtonDecorator {
/** @Override
* Decorate Button and return. public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) {
*
* @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) {
button.addStyleName(ValoTheme.BUTTON_SMALL); button.addStyleName(ValoTheme.BUTTON_SMALL);
// Set Style // Set Style
if (null != style) { if (null != style) {

View File

@@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Style for button: Small NoBorder Height UnDefined. * Style for button: Small NoBorder Height UnDefined.
*
*
*
*
*
* *
*/ */
public class SPUIButtonStyleSmallNoBorderUH implements SPUIButtonDecorator { public class SPUIButtonStyleSmallNoBorderUH implements SPUIButtonDecorator {
/** @Override
* Decorate Button and return. public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) {
*
* @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) {
button.addStyleName(ValoTheme.BUTTON_SMALL); button.addStyleName(ValoTheme.BUTTON_SMALL);
button.addStyleName(ValoTheme.BUTTON_BORDERLESS_COLORED); button.addStyleName(ValoTheme.BUTTON_BORDERLESS_COLORED);
button.setHeightUndefined(); button.setHeightUndefined();

View File

@@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Style for button: Small NoBorder Height and size UnDefined. * Style for button: Small NoBorder Height and size UnDefined.
*
*
*
*
*
* *
*/ */
public class SPUIButtonStyleSmallNoBorderUHS implements SPUIButtonDecorator { public class SPUIButtonStyleSmallNoBorderUHS implements SPUIButtonDecorator {
/** @Override
* Decorate Button and return. public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) {
*
* @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) {
button.addStyleName(ValoTheme.BUTTON_SMALL); button.addStyleName(ValoTheme.BUTTON_SMALL);
button.addStyleName(ValoTheme.BUTTON_BORDERLESS); button.addStyleName(ValoTheme.BUTTON_BORDERLESS);
button.setHeightUndefined(); button.setHeightUndefined();

View File

@@ -14,29 +14,12 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Style for button: Small. * Style for button: Small.
*
*
*
*
*
* *
*/ */
public class SPUIButtonStyleTiny implements SPUIButtonDecorator { public class SPUIButtonStyleTiny implements SPUIButtonDecorator {
/** @Override
* Decorate Button and return. public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) {
*
* @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) {
button.addStyleName(ValoTheme.BUTTON_TINY); button.addStyleName(ValoTheme.BUTTON_TINY);
// Set Style // Set Style
if (null != style) { if (null != style) {

View File

@@ -16,27 +16,10 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Style for button: Tag. * Style for button: Tag.
*
*
*
*
*
*
*/ */
public class SPUITagButtonStyle implements SPUIButtonDecorator { public class SPUITagButtonStyle implements SPUIButtonDecorator {
/**
* Decorate Button and return. @Override
*
* @param button
* as Button
* @param style
* as String
* @param setStyle
* as String
* @param icon
* as resource
* @return Button
*/
public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) {
/** /**

View File

@@ -79,8 +79,6 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Window for create update Distribution Set Type. * Window for create update Distribution Set Type.
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -221,7 +219,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co
getPreviewButtonColor(DEFAULT_COLOR); getPreviewButtonColor(DEFAULT_COLOR);
selectors = new HashSet<ColorSelector>(); selectors = new HashSet<>();
selectedColor = new Color(44, 151, 32); selectedColor = new Color(44, 151, 32);
selPreview = new SpColorPickerPreview(selectedColor); selPreview = new SpColorPickerPreview(selectedColor);
@@ -457,6 +455,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co
sourceTable.setItemDescriptionGenerator(new ItemDescriptionGenerator() { sourceTable.setItemDescriptionGenerator(new ItemDescriptionGenerator() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override
public String generateDescription(final Component source, final Object itemId, final Object propertyId) { public String generateDescription(final Component source, final Object itemId, final Object propertyId) {
final Item item = sourceTable.getItem(itemId); final Item item = sourceTable.getItem(itemId);
final String description = (String) item.getItemProperty(DIST_TYPE_DESCRIPTION).getValue(); final String description = (String) item.getItemProperty(DIST_TYPE_DESCRIPTION).getValue();
@@ -475,7 +474,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void getSelectedTableItemData(final Long id) { private void getSelectedTableItemData(final Long id) {
Item saveTblitem = null; Item saveTblitem;
if (null != selectedTablecontainer) { if (null != selectedTablecontainer) {
saveTblitem = selectedTablecontainer.addItem(id); saveTblitem = selectedTablecontainer.addItem(id);
saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue( saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(
@@ -657,10 +656,10 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co
DistributionSetType newDistType = new DistributionSetType(typeKeyValue, typeNameValue, typeDescValue); DistributionSetType newDistType = new DistributionSetType(typeKeyValue, typeNameValue, typeDescValue);
for (final Long id : itemIds) { for (final Long id : itemIds) {
final Item item = selectedTable.getItem(id); 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 CheckBox mandatoryCheckBox = (CheckBox) item.getItemProperty(DIST_TYPE_MANDATORY).getValue();
final Boolean isMandatory = mandatoryCheckBox.getValue(); final Boolean isMandatory = mandatoryCheckBox.getValue();
final SoftwareModuleType swModuleType = softwareManagement.findSoftwareModuleTypeByName(dist_type_name); final SoftwareModuleType swModuleType = softwareManagement.findSoftwareModuleTypeByName(distTypeName);
if (isMandatory) { if (isMandatory) {
newDistType.addMandatoryModuleType(swModuleType); newDistType.addMandatoryModuleType(swModuleType);
@@ -1032,7 +1031,6 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co
* as the selected tag from combo * as the selected tag from combo
*/ */
private void setTypeTagCombo(final String distSetTypeSelected) { private void setTypeTagCombo(final String distSetTypeSelected) {
boolean mandatory = false;
typeName.setValue(distSetTypeSelected); typeName.setValue(distSetTypeSelected);
getSourceTableData(); getSourceTableData();
selectedTable.getContainerDataSource().removeAllItems(); selectedTable.getContainerDataSource().removeAllItems();
@@ -1053,13 +1051,11 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co
saveDistSetType.setEnabled(false); saveDistSetType.setEnabled(false);
} }
for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) { for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) {
mandatory = false; addTargetTableforUpdate(swModuleType, false);
addTargetTableforUpdate(swModuleType, mandatory);
} }
for (final SoftwareModuleType swModuleType : selectedTypeTag.getMandatoryModuleTypes()) { for (final SoftwareModuleType swModuleType : selectedTypeTag.getMandatoryModuleTypes()) {
mandatory = true; addTargetTableforUpdate(swModuleType, true);
addTargetTableforUpdate(swModuleType, mandatory);
} }
if (null == selectedTypeTag.getColour()) { if (null == selectedTypeTag.getColour()) {

View File

@@ -60,44 +60,24 @@ public class DSTypeFilterButtons extends AbstractFilterButtons {
* @param filterButtonClickBehaviour * @param filterButtonClickBehaviour
* the clickable behaviour. * the clickable behaviour.
*/ */
@Override
public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) {
super.init(filterButtonClickBehaviour); super.init(filterButtonClickBehaviour);
eventBus.subscribe(this); eventBus.subscribe(this);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getButtonsTableId()
*/
@Override @Override
protected String getButtonsTableId() { protected String getButtonsTableId() {
return SPUIComponetIdProvider.DISTRIBUTION_SET_TYPE_TABLE_ID; return SPUIComponetIdProvider.DISTRIBUTION_SET_TYPE_TABLE_ID;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* createButtonsLazyQueryContainer ()
*/
@Override @Override
protected LazyQueryContainer createButtonsLazyQueryContainer() { protected LazyQueryContainer createButtonsLazyQueryContainer() {
return HawkbitCommonUtil.createLazyQueryContainer( return HawkbitCommonUtil.createLazyQueryContainer(
new BeanQueryFactory<DistributionSetTypeBeanQuery>(DistributionSetTypeBeanQuery.class)); new BeanQueryFactory<DistributionSetTypeBeanQuery>(DistributionSetTypeBeanQuery.class));
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* isClickedByDefault(java.lang .Long)
*/
@Override @Override
protected boolean isClickedByDefault(final Long buttonId) { protected boolean isClickedByDefault(final Long buttonId) {
@@ -105,26 +85,12 @@ public class DSTypeFilterButtons extends AbstractFilterButtons {
&& manageDistUIState.getManageDistFilters().getClickedDistSetType().getId().equals(buttonId); && manageDistUIState.getManageDistFilters().getClickedDistSetType().getId().equals(buttonId);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* createButtonId(java.lang. String)
*/
@Override @Override
protected String createButtonId(final String name) { protected String createButtonId(final String name) {
return SPUIComponetIdProvider.DS_TYPE_FILTER_BTN_ID + name; return SPUIComponetIdProvider.DS_TYPE_FILTER_BTN_ID + name;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getFilterButtonDropHandler()
*/
@Override @Override
protected DropHandler getFilterButtonDropHandler() { protected DropHandler getFilterButtonDropHandler() {
@@ -148,13 +114,6 @@ public class DSTypeFilterButtons extends AbstractFilterButtons {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getButttonWrapperId()
*/
@Override @Override
protected String getButttonWrapperIdPrefix() { protected String getButttonWrapperIdPrefix() {

View File

@@ -27,9 +27,6 @@ import com.vaadin.ui.Window;
/** /**
* Distribution Set Type filter buttons header. * Distribution Set Type filter buttons header.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -49,9 +46,7 @@ public class DSTypeFilterHeader extends AbstractFilterHeader {
@Autowired @Autowired
private CreateUpdateDistSetTypeLayout createUpdateDistSetTypeLayout; private CreateUpdateDistSetTypeLayout createUpdateDistSetTypeLayout;
/** @Override
* Initialize the components.
*/
@PostConstruct @PostConstruct
public void init() { public void init() {
super.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 @Override
protected boolean hasCreateUpdatePermission() { protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle(
* )
*/
@Override @Override
protected String getTitle() { protected String getTitle() {
return SPUILabelDefinitions.TYPE; return SPUILabelDefinitions.TYPE;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* settingsIconClicked(com.vaadin .ui.Button.ClickEvent)
*/
@Override @Override
protected void settingsIconClicked(final ClickEvent event) { protected void settingsIconClicked(final ClickEvent event) {
final Window addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); 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 @Override
protected boolean dropHitsRequired() { protected boolean dropHitsRequired() {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* hideFilterButtonLayout()
*/
@Override @Override
protected void hideFilterButtonLayout() { protected void hideFilterButtonLayout() {
manageDistUIState.setDistTypeFilterClosed(true); 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 @Override
protected String getConfigureFilterButtonId() { protected String getConfigureFilterButtonId() {
return SPUIDefinitions.ADD_DISTRIBUTION_TYPE_TAG; return SPUIDefinitions.ADD_DISTRIBUTION_TYPE_TAG;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* getHideButtonId()
*/
@Override @Override
protected String getHideButtonId() { protected String getHideButtonId() {
return SPUIDefinitions.HIDE_FILTER_DIST_TYPE; return SPUIDefinitions.HIDE_FILTER_DIST_TYPE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader#
* isAddTagRequired()
*/
@Override @Override
protected boolean isAddTagRequired() { protected boolean isAddTagRequired() {
return true; return true;

View File

@@ -74,8 +74,6 @@ import com.vaadin.ui.UI;
/** /**
* Distribution set table. * Distribution set table.
* *
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -136,49 +134,36 @@ public class DistributionSetTable extends AbstractTable {
} }
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.AbstractTable#getTableId()
*/
@Override @Override
protected String getTableId() { protected String getTableId() {
return SPUIComponetIdProvider.DIST_TABLE_ID; return SPUIComponetIdProvider.DIST_TABLE_ID;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.AbstractTable#createContainer(
* )
*/
@Override @Override
protected Container createContainer() { protected Container createContainer() {
final Map<String, Object> queryConfiguration = new HashMap<>(); final Map<String, Object> queryConfiguration = prepareQueryConfigFilters();
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 BeanQueryFactory<ManageDistBeanQuery> distributionQF = new BeanQueryFactory<>(ManageDistBeanQuery.class); final BeanQueryFactory<ManageDistBeanQuery> distributionQF = new BeanQueryFactory<>(ManageDistBeanQuery.class);
distributionQF.setQueryConfiguration(queryConfiguration); distributionQF.setQueryConfiguration(queryConfiguration);
return new LazyQueryContainer( return new LazyQueryContainer(
new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME),
distributionQF); distributionQF);
} }
/* private Map<String, Object> prepareQueryConfigFilters() {
* (non-Javadoc) final Map<String, Object> queryConfig = new HashMap<>();
* manageDistUIState.getManageDistFilters().getSearchText()
* @see hawkbit.server.ui.common.table.AbstractTable#addContainerProperties .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value));
* (com.vaadin.data.Container )
*/ if (null != manageDistUIState.getManageDistFilters().getClickedDistSetType()) {
queryConfig.put(SPUIDefinitions.FILTER_BY_DISTRIBUTION_SET_TYPE,
manageDistUIState.getManageDistFilters().getClickedDistSetType());
}
return queryConfig;
}
@Override @Override
protected void addContainerProperties(final Container container) { protected void addContainerProperties(final Container container) {
HawkbitCommonUtil.getDsTableColumnProperties(container); HawkbitCommonUtil.getDsTableColumnProperties(container);
@@ -186,12 +171,6 @@ public class DistributionSetTable extends AbstractTable {
Boolean.class, null, false, true); Boolean.class, null, false, true);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable#
* addCustomGeneratedColumns ()
*/
@Override @Override
protected void addCustomGeneratedColumns() { 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 @Override
protected boolean isFirstRowSelectedOnLoad() { protected boolean isFirstRowSelectedOnLoad() {
return !manageDistUIState.getSelectedDistributions().isPresent() return !manageDistUIState.getSelectedDistributions().isPresent()
|| manageDistUIState.getSelectedDistributions().get().isEmpty(); || manageDistUIState.getSelectedDistributions().get().isEmpty();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#getItemIdToSelect()
*/
@Override @Override
protected Object getItemIdToSelect() { protected Object getItemIdToSelect() {
if (manageDistUIState.getSelectedDistributions().isPresent()) { if (manageDistUIState.getSelectedDistributions().isPresent()) {
@@ -224,12 +192,6 @@ public class DistributionSetTable extends AbstractTable {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.AbstractTable#onValueChange()
*/
@Override @Override
protected void onValueChange() { protected void onValueChange() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); 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 @Override
protected boolean isMaximized() { protected boolean isMaximized() {
return manageDistUIState.isDsTableMaximized(); return manageDistUIState.isDsTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#getTableVisibleColumns
* ()
*/
@Override @Override
protected List<TableColumn> getTableVisibleColumns() { protected List<TableColumn> getTableVisibleColumns() {
return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), false, i18n); return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), false, i18n);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#getTableDropHandler()
*/
@Override @Override
protected DropHandler getTableDropHandler() { protected DropHandler getTableDropHandler() {
return new DropHandler() { return new DropHandler() {

View File

@@ -36,8 +36,6 @@ import com.vaadin.ui.Window;
/** /**
* Distribution table header. * Distribution table header.
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -60,9 +58,7 @@ public class DistributionSetTableHeader extends AbstractTableHeader {
@Autowired @Autowired
private DistributionAddUpdateWindowLayout addUpdateWindowLayout; private DistributionAddUpdateWindowLayout addUpdateWindowLayout;
/** @Override
* Initialize the component.
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -76,54 +72,26 @@ public class DistributionSetTableHeader extends AbstractTableHeader {
} }
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getHeaderCaption(
* )
*/
@Override @Override
protected String getHeaderCaption() { protected String getHeaderCaption() {
return i18n.get("header.dist.table"); return i18n.get("header.dist.table");
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getSearchBoxId()
*/
@Override @Override
protected String getSearchBoxId() { protected String getSearchBoxId() {
return SPUIComponetIdProvider.DIST_SEARCH_TEXTFIELD; return SPUIComponetIdProvider.DIST_SEARCH_TEXTFIELD;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getSearchRestIconId()
*/
@Override @Override
protected String getSearchRestIconId() { protected String getSearchRestIconId() {
return SPUIComponetIdProvider.DIST_SEARCH_ICON; return SPUIComponetIdProvider.DIST_SEARCH_ICON;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getAddIconId()
*/
@Override @Override
protected String getAddIconId() { protected String getAddIconId() {
return SPUIComponetIdProvider.DIST_ADD_ICON; return SPUIComponetIdProvider.DIST_ADD_ICON;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* onLoadSearchBoxValue()
*/
@Override @Override
protected String onLoadSearchBoxValue() { protected String onLoadSearchBoxValue() {
if (manageDistUIstate.getManageDistFilters().getSearchText().isPresent()) { if (manageDistUIstate.getManageDistFilters().getSearchText().isPresent()) {
@@ -132,11 +100,6 @@ public class DistributionSetTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getDropFilterId()
*/
@Override @Override
protected String getDropFilterId() { protected String getDropFilterId() {
return null; return null;
@@ -170,9 +133,10 @@ public class DistributionSetTableHeader extends AbstractTableHeader {
@Override @Override
protected void resetSearchText() { protected void resetSearchText() {
manageDistUIstate.getManageDistFilters().setSearchText(null); if (manageDistUIstate.getManageDistFilters().getSearchText().isPresent()) {
eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); manageDistUIstate.getManageDistFilters().setSearchText(null);
eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT);
}
} }
@Override @Override
@@ -222,11 +186,6 @@ public class DistributionSetTableHeader extends AbstractTableHeader {
eventbus.unsubscribe(this); eventbus.unsubscribe(this);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#canAddNewItem()
*/
@Override @Override
protected Boolean isAddNewItemAllowed() { protected Boolean isAddNewItemAllowed() {
return Boolean.TRUE; return Boolean.TRUE;
@@ -247,47 +206,21 @@ public class DistributionSetTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getBulkUploadIconId()
*/
@Override @Override
protected String getBulkUploadIconId() { protected String getBulkUploadIconId() {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com.
* vaadin.ui.Button.ClickEvent )
*/
@Override @Override
protected void bulkUpload(final ClickEvent event) { 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 @Override
protected Boolean isBulkUploadAllowed() { protected Boolean isBulkUploadAllowed() {
return Boolean.FALSE; return Boolean.FALSE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader#
* isBulkUploadInProgress()
*/
@Override @Override
protected boolean isBulkUploadInProgress() { protected boolean isBulkUploadInProgress() {
return false; return false;

View File

@@ -37,8 +37,6 @@ import com.google.common.base.Strings;
/** /**
* Manage Distributions table bean query. * Manage Distributions table bean query.
* *
*
*
*/ */
public class ManageDistBeanQuery extends AbstractBeanQuery<ProxyDistribution> { public class ManageDistBeanQuery extends AbstractBeanQuery<ProxyDistribution> {
@@ -83,28 +81,15 @@ public class ManageDistBeanQuery extends AbstractBeanQuery<ProxyDistribution> {
} }
} }
/*
* (non-Javadoc)
*
* @see
* org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#constructBean()
*/
@Override @Override
protected ProxyDistribution constructBean() { protected ProxyDistribution constructBean() {
return new ProxyDistribution(); return new ProxyDistribution();
} }
/*
* (non-Javadoc)
*
* @see
* org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int,
* int)
*/
@Override @Override
protected List<ProxyDistribution> loadBeans(final int startIndex, final int count) { protected List<ProxyDistribution> loadBeans(final int startIndex, final int count) {
Page<DistributionSet> distBeans; Page<DistributionSet> distBeans;
final List<ProxyDistribution> proxyDistributions = new ArrayList<ProxyDistribution>(); final List<ProxyDistribution> proxyDistributions = new ArrayList<>();
if (startIndex == 0 && firstPageDistributionSets != null) { if (startIndex == 0 && firstPageDistributionSets != null) {
distBeans = firstPageDistributionSets; distBeans = firstPageDistributionSets;
} else if (Strings.isNullOrEmpty(searchText)) { } else if (Strings.isNullOrEmpty(searchText)) {
@@ -136,24 +121,12 @@ public class ManageDistBeanQuery extends AbstractBeanQuery<ProxyDistribution> {
return proxyDistributions; return proxyDistributions;
} }
/*
* (non-Javadoc)
*
* @see
* org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#saveBeans(java.
* util.List, java.util.List, java.util.List)
*/
@Override @Override
protected void saveBeans(final List<ProxyDistribution> arg0, final List<ProxyDistribution> arg1, protected void saveBeans(final List<ProxyDistribution> arg0, final List<ProxyDistribution> arg1,
final List<ProxyDistribution> arg2) { final List<ProxyDistribution> arg2) {
// Add,Delete and Update are performed through repository methods // Add,Delete and Update are performed through repository methods
} }
/*
* (non-Javadoc)
*
* @see org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#size()
*/
@Override @Override
public int size() { public int size() {
if (Strings.isNullOrEmpty(searchText) && null == distributionSetType) { if (Strings.isNullOrEmpty(searchText) && null == distributionSetType) {

View File

@@ -28,8 +28,6 @@ import com.vaadin.ui.Component;
/** /**
* Distributions View for Accept criteria. * Distributions View for Accept criteria.
* *
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -47,12 +45,6 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria {
@Autowired @Autowired
private transient EventBus.SessionEventBus eventBus; private transient EventBus.SessionEventBus eventBus;
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.AbstractAcceptCriteria#analyseDragComponent
* (com.vaadin.event .dd.DragAndDropEvent, com.vaadin.ui.Component)
*/
@Override @Override
protected void analyseDragComponent(final Component compsource) { protected void analyseDragComponent(final Component compsource) {
final String sourceID = getComponentId(compsource); final String sourceID = getComponentId(compsource);
@@ -60,24 +52,11 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria {
eventBus.publish(this, event); eventBus.publish(this, event);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#hideDropHints
* ()
*/
@Override @Override
protected void hideDropHints() { protected void hideDropHints() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#invalidDrop()
*/
@Override @Override
protected void invalidDrop() { protected void invalidDrop() {
uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED);
@@ -94,34 +73,16 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria {
return id; return id;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* getDropHintConfigurations()
*/
@Override @Override
protected Map<String, Object> getDropHintConfigurations() { protected Map<String, Object> getDropHintConfigurations() {
return DROP_HINTS_CONFIGS; return DROP_HINTS_CONFIGS;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* publishDragStartEvent(java.lang.Object)
*/
@Override @Override
protected void publishDragStartEvent(final Object event) { protected void publishDragStartEvent(final Object event) {
eventBus.publish(this, event); eventBus.publish(this, event);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* getDropConfigurations()
*/
@Override @Override
protected Map<String, List<String>> getDropConfigurations() { protected Map<String, List<String>> getDropConfigurations() {
return DROP_CONFIGS; return DROP_CONFIGS;
@@ -137,7 +98,7 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria {
} }
private static Map<String, List<String>> createDropConfigurations() { private static Map<String, List<String>> createDropConfigurations() {
final Map<String, List<String>> config = new HashMap<String, List<String>>(); final Map<String, List<String>> config = new HashMap<>();
// Delete drop area droppable components // Delete drop area droppable components
config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID,
@@ -153,7 +114,7 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria {
} }
private static Map<String, Object> createDropHintConfigurations() { private static Map<String, Object> createDropHintConfigurations() {
final Map<String, Object> config = new HashMap<String, Object>(); final Map<String, Object> config = new HashMap<>();
config.put(SPUIDefinitions.DISTRIBUTION_TYPE_ID_PREFIXS, DragEvent.DISTRIBUTION_TYPE_DRAG); config.put(SPUIDefinitions.DISTRIBUTION_TYPE_ID_PREFIXS, DragEvent.DISTRIBUTION_TYPE_DRAG);
config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG);
config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, DragEvent.SOFTWAREMODULE_DRAG); config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, DragEvent.SOFTWAREMODULE_DRAG);

View File

@@ -32,9 +32,6 @@ import com.google.common.base.Strings;
/** /**
* Simple implementation of generics bean query which dynamically loads a batch * Simple implementation of generics bean query which dynamically loads a batch
* of beans. * of beans.
*
*
*
* *
*/ */
public class SwModuleBeanQuery extends AbstractBeanQuery<ProxyBaseSwModuleItem> { public class SwModuleBeanQuery extends AbstractBeanQuery<ProxyBaseSwModuleItem> {
@@ -77,17 +74,10 @@ public class SwModuleBeanQuery extends AbstractBeanQuery<ProxyBaseSwModuleItem>
return new ProxyBaseSwModuleItem(); return new ProxyBaseSwModuleItem();
} }
/*
* (non-Javadoc)
*
* @see
* org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int,
* int)
*/
@Override @Override
protected List<ProxyBaseSwModuleItem> loadBeans(final int startIndex, final int count) { protected List<ProxyBaseSwModuleItem> loadBeans(final int startIndex, final int count) {
final Slice<CustomSoftwareModule> swModuleBeans; final Slice<CustomSoftwareModule> swModuleBeans;
final List<ProxyBaseSwModuleItem> proxyBeans = new ArrayList<ProxyBaseSwModuleItem>(); final List<ProxyBaseSwModuleItem> proxyBeans = new ArrayList<>();
swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderByDistribution( swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderByDistribution(
new OffsetBasedPageRequest(startIndex, count, new Sort(Direction.ASC, "name", "version")), new OffsetBasedPageRequest(startIndex, count, new Sort(Direction.ASC, "name", "version")),

View File

@@ -39,9 +39,6 @@ import com.vaadin.ui.Window;
/** /**
* Implementation of software module details block using generic abstract * Implementation of software module details block using generic abstract
* details style . * details style .
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -70,9 +67,7 @@ public class SwModuleDetails extends AbstractTableDetailsLayout {
private SoftwareModule selectedSwModule; private SoftwareModule selectedSwModule;
/** @Override
* Initialize the component.
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -133,49 +128,21 @@ public class SwModuleDetails extends AbstractTableDetailsLayout {
detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout#
* getDefaultCaption()
*/
@Override @Override
protected String getDefaultCaption() { protected String getDefaultCaption() {
return i18n.get("upload.swModuleTable.header"); return i18n.get("upload.swModuleTable.header");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout#
* onLoadIsSwModuleSelected()
*/
@Override @Override
protected Boolean onLoadIsTableRowSelected() { protected Boolean onLoadIsTableRowSelected() {
return !manageDistUIState.getSelectedSoftwareModules().isEmpty(); return !manageDistUIState.getSelectedSoftwareModules().isEmpty();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout#
* onLoadIsTableMaximized()
*/
@Override @Override
protected Boolean onLoadIsTableMaximized() { protected Boolean onLoadIsTableMaximized() {
return manageDistUIState.isSwModuleTableMaximized(); return manageDistUIState.isSwModuleTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout#
* populateDetailsWidget()
*/
@Override @Override
protected void populateDetailsWidget() { protected void populateDetailsWidget() {
populateDetailsWidget(selectedSwModule); populateDetailsWidget(selectedSwModule);
@@ -191,12 +158,6 @@ public class SwModuleDetails extends AbstractTableDetailsLayout {
return permissionChecker.hasUpdateDistributionPermission(); return permissionChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* getTabSheetId()
*/
@Override @Override
protected String getTabSheetId() { protected String getTabSheetId() {
return null; return null;

View File

@@ -67,8 +67,6 @@ import com.vaadin.ui.Window;
/** /**
* Implementation of software module table using generic abstract table styles . * Implementation of software module table using generic abstract table styles .
*
*
* *
*/ */
@SpringComponent @SpringComponent
@@ -98,6 +96,7 @@ public class SwModuleTable extends AbstractTable {
/** /**
* Initialize the filter layout. * Initialize the filter layout.
*/ */
@Override
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.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 @Override
protected String getTableId() { protected String getTableId() {
return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE; return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTable#createContainer()
*/
@Override @Override
protected Container createContainer() { protected Container createContainer() {
final Map<String, Object> queryConfiguration = new HashMap<String, Object>(); final Map<String, Object> queryConfiguration = prepareQueryConfigFilters();
manageDistUIState.getSoftwareModuleFilters().getSearchText()
.ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value));
manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType() final BeanQueryFactory<SwModuleBeanQuery> swQF = new BeanQueryFactory<>(SwModuleBeanQuery.class);
.ifPresent(type -> queryConfiguration.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type));
manageDistUIState.getLastSelectedDistribution().ifPresent(
distIdName -> queryConfiguration.put(SPUIDefinitions.ORDER_BY_DISTRIBUTION, distIdName.getId()));
final BeanQueryFactory<SwModuleBeanQuery> swQF = new BeanQueryFactory<SwModuleBeanQuery>(
SwModuleBeanQuery.class);
swQF.setQueryConfiguration(queryConfiguration); swQF.setQueryConfiguration(queryConfiguration);
final LazyQueryContainer container = new LazyQueryContainer( return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF);
new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); }
return container;
private Map<String, Object> prepareQueryConfigFilters() {
final Map<String, Object> 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 @Override
protected void addContainerProperties(final Container container) { protected void addContainerProperties(final Container container) {
final LazyQueryContainer lazyContainer = (LazyQueryContainer) 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); lazyContainer.addContainerProperty(SPUILabelDefinitions.VAR_SOFT_TYPE_ID, Long.class, null, false, true);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTable#addCustomGeneratedColumns()
*/
@Override @Override
protected void addCustomGeneratedColumns() { protected void addCustomGeneratedColumns() {
@@ -243,32 +222,16 @@ public class SwModuleTable extends AbstractTable {
}); });
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTable#isFirstRowSelectedOnLoad()
*/
@Override @Override
protected boolean isFirstRowSelectedOnLoad() { protected boolean isFirstRowSelectedOnLoad() {
return manageDistUIState.getSelectedSoftwareModules().isEmpty(); return manageDistUIState.getSelectedSoftwareModules().isEmpty();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTable#getItemIdToSelect()
*/
@Override @Override
protected Object getItemIdToSelect() { protected Object getItemIdToSelect() {
return manageDistUIState.getSelectedSoftwareModules(); return manageDistUIState.getSelectedSoftwareModules();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTable#isMaximized()
*/
@Override @Override
protected boolean isMaximized() { protected boolean isMaximized() {
return manageDistUIState.isSwModuleTableMaximized(); 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 @Override
protected List<TableColumn> getTableVisibleColumns() { protected List<TableColumn> getTableVisibleColumns() {
final List<TableColumn> columnList = new ArrayList<TableColumn>(); final List<TableColumn> columnList = new ArrayList<>();
if (isMaximized()) { if (isMaximized()) {
columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); 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)); 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) { private String getTableStyle(final Long typeId, final boolean isAssigned, final String color) {
if (isAssigned) { if (isAssigned) {
addTypeStyle(typeId, color); addTypeStyle(typeId, color);
@@ -385,11 +336,6 @@ public class SwModuleTable extends AbstractTable {
+ "{background-color:" + color + " !important;background-image:none !important }"))); + "{background-color:" + color + " !important;background-image:none !important }")));
} }
/**
* @param itemId
* @param propertyId
* @return
*/
private String createTableStyle(final Object itemId, final Object propertyId) { private String createTableStyle(final Object itemId, final Object propertyId) {
if (null == propertyId) { if (null == propertyId) {
final Item item = getItem(itemId); final Item item = getItem(itemId);
@@ -423,12 +369,6 @@ public class SwModuleTable extends AbstractTable {
return name + "." + version; return name + "." + version;
} }
/**
* Add new software module to table.
*
* @param swModule
* new software module
*/
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void addSoftwareModule(final SoftwareModule swModule) { private void addSoftwareModule(final SoftwareModule swModule) {
final Object addItem = addItem(); final Object addItem = addItem();
@@ -455,11 +395,6 @@ public class SwModuleTable extends AbstractTable {
select(swModule.getId()); select(swModule.getId());
} }
/**
* @param itemId
* @param nameVersionStr
* @return
*/
private void showArtifactDetailsWindow(final Long itemId, final String nameVersionStr) { private void showArtifactDetailsWindow(final Long itemId, final String nameVersionStr) {
final Window atrifactDtlsWindow = new Window(); final Window atrifactDtlsWindow = new Window();
atrifactDtlsWindow.setCaption(HawkbitCommonUtil.getArtifactoryDetailsLabelId(nameVersionStr)); atrifactDtlsWindow.setCaption(HawkbitCommonUtil.getArtifactoryDetailsLabelId(nameVersionStr));

View File

@@ -36,9 +36,6 @@ import com.vaadin.ui.Window;
/** /**
* Implementation of software module Header block using generic abstract details * Implementation of software module Header block using generic abstract details
* style . * style .
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -61,9 +58,7 @@ public class SwModuleTableHeader extends AbstractTableHeader {
@Autowired @Autowired
private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow; private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow;
/** @Override
* Initialize the components.
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.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 @Override
protected String getHeaderCaption() { protected String getHeaderCaption() {
return i18n.get("upload.swModuleTable.header"); return i18n.get("upload.swModuleTable.header");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getSearchBoxId()
*/
@Override @Override
protected String getSearchBoxId() { protected String getSearchBoxId() {
return SPUIComponetIdProvider.SW_MODULE_SEARCH_TEXT_FIELD; return SPUIComponetIdProvider.SW_MODULE_SEARCH_TEXT_FIELD;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#getSearchRestIconId()
*/
@Override @Override
protected String getSearchRestIconId() { protected String getSearchRestIconId() {
return SPUIComponetIdProvider.SW_MODULE_SEARCH_RESET_ICON; return SPUIComponetIdProvider.SW_MODULE_SEARCH_RESET_ICON;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getAddIconId()
*/
@Override @Override
protected String getAddIconId() { protected String getAddIconId() {
return SPUIComponetIdProvider.SW_MODULE_ADD_BUTTON; return SPUIComponetIdProvider.SW_MODULE_ADD_BUTTON;
@@ -134,97 +105,47 @@ public class SwModuleTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#getDropFilterId(
* )
*/
@Override @Override
protected String getDropFilterId() { protected String getDropFilterId() {
/* not required */ /* not required */
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* isDropHintRequired()
*/
@Override @Override
protected boolean isDropHintRequired() { protected boolean isDropHintRequired() {
/* not required */
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#isDropFilterRequired()
*/
@Override @Override
protected boolean isDropFilterRequired() { protected boolean isDropFilterRequired() {
/* Not Yet Implemented */ /* Not Yet Implemented */
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#
* getShowFilterButtonLayoutId()
*/
@Override @Override
protected String getShowFilterButtonLayoutId() { protected String getShowFilterButtonLayoutId() {
return "show.type.icon"; return "show.type.icon";
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#showFilterButtonsLayout
* ()
*/
@Override @Override
protected void showFilterButtonsLayout() { protected void showFilterButtonsLayout() {
manageDistUIState.setSwTypeFilterClosed(false); manageDistUIState.setSwTypeFilterClosed(false);
eventbus.publish(this, DistributionsUIEvent.SHOW_SM_FILTER_BY_TYPE); eventbus.publish(this, DistributionsUIEvent.SHOW_SM_FILTER_BY_TYPE);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#resetSearchText(
* )
*/
@Override @Override
protected void resetSearchText() { protected void resetSearchText() {
manageDistUIState.getSoftwareModuleFilters().setSearchText(null); if (manageDistUIState.getSoftwareModuleFilters().getSearchText().isPresent()) {
eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); 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 @Override
protected String getMaxMinIconId() { protected String getMaxMinIconId() {
return SPUIComponetIdProvider.SW_MAX_MIN_TABLE_ICON; return SPUIComponetIdProvider.SW_MAX_MIN_TABLE_ICON;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#maximizeTable()
*/
@Override @Override
public void maximizeTable() { public void maximizeTable() {
manageDistUIState.setSwModuleTableMaximized(Boolean.TRUE); 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 @Override
public void minimizeTable() { public void minimizeTable() {
manageDistUIState.setSwModuleTableMaximized(Boolean.FALSE); manageDistUIState.setSwModuleTableMaximized(Boolean.FALSE);
eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null)); eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null));
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#onLoadIsTableMaximized(
* )
*/
@Override @Override
public Boolean onLoadIsTableMaximized() { public Boolean onLoadIsTableMaximized() {
return manageDistUIState.isSwModuleTableMaximized(); return manageDistUIState.isSwModuleTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.SPTableHeader#
* onLoadIsShowFilterButtonDisplayed()
*/
@Override @Override
public Boolean onLoadIsShowFilterButtonDisplayed() { public Boolean onLoadIsShowFilterButtonDisplayed() {
return manageDistUIState.isSwTypeFilterClosed(); return manageDistUIState.isSwTypeFilterClosed();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#searchBy(java.lang.
* String)
*/
@Override @Override
protected void searchBy(final String newSearchText) { protected void searchBy(final String newSearchText) {
manageDistUIState.getSoftwareModuleFilters().setSearchText(newSearchText); manageDistUIState.getSoftwareModuleFilters().setSearchText(newSearchText);
eventbus.publish(this, SMFilterEvent.FILTER_BY_TEXT); eventbus.publish(this, SMFilterEvent.FILTER_BY_TEXT);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#addNewItem(com.vaadin.
* ui.Button.ClickEvent)
*/
@Override @Override
protected void addNewItem(final ClickEvent event) { protected void addNewItem(final ClickEvent event) {
final Window addSoftwareModule = softwareModuleAddUpdateWindow.createAddSoftwareModuleWindow(); final Window addSoftwareModule = softwareModuleAddUpdateWindow.createAddSoftwareModuleWindow();
@@ -292,22 +183,11 @@ public class SwModuleTableHeader extends AbstractTableHeader {
addSoftwareModule.setVisible(Boolean.TRUE); addSoftwareModule.setVisible(Boolean.TRUE);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.SPTableHeader#hasCreatePermission()
*/
@Override @Override
protected boolean hasCreatePermission() { protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission(); return permChecker.hasCreateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* isAddNewItemAllowed()
*/
@Override @Override
protected Boolean isAddNewItemAllowed() { protected Boolean isAddNewItemAllowed() {
return true; return true;
@@ -328,47 +208,21 @@ public class SwModuleTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getBulkUploadIconId()
*/
@Override @Override
protected String getBulkUploadIconId() { protected String getBulkUploadIconId() {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com.
* vaadin.ui.Button.ClickEvent )
*/
@Override @Override
protected void bulkUpload(final ClickEvent event) { 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 @Override
protected Boolean isBulkUploadAllowed() { protected Boolean isBulkUploadAllowed() {
return Boolean.FALSE; return Boolean.FALSE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader#
* isBulkUploadInProgress()
*/
@Override @Override
protected boolean isBulkUploadInProgress() { protected boolean isBulkUploadInProgress() {
return false; return false;

View File

@@ -40,8 +40,6 @@ import com.vaadin.spring.annotation.ViewScope;
/** /**
* Software Module Type filter buttons. * Software Module Type filter buttons.
* *
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -58,46 +56,24 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons {
@Autowired @Autowired
private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria; private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria;
/** @Override
* Initialize component.
*
* @param filterButtonClickBehaviour
* the clickable behaviour.
*/
public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) {
super.init(filterButtonClickBehaviour); super.init(filterButtonClickBehaviour);
eventBus.subscribe(this); eventBus.subscribe(this);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getButtonsTableId()
*/
@Override @Override
protected String getButtonsTableId() { protected String getButtonsTableId() {
return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID; return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* createButtonsLazyQueryContainer ()
*/
@Override @Override
protected LazyQueryContainer createButtonsLazyQueryContainer() { protected LazyQueryContainer createButtonsLazyQueryContainer() {
final Map<String, Object> queryConfig = new HashMap<String, Object>(); final Map<String, Object> queryConfig = new HashMap<>();
final BeanQueryFactory<SoftwareModuleTypeBeanQuery> typeQF = new BeanQueryFactory<SoftwareModuleTypeBeanQuery>( final BeanQueryFactory<SoftwareModuleTypeBeanQuery> typeQF = new BeanQueryFactory<>(
SoftwareModuleTypeBeanQuery.class); SoftwareModuleTypeBeanQuery.class);
typeQF.setQueryConfiguration(queryConfig); typeQF.setQueryConfiguration(queryConfig);
final LazyQueryContainer lazyQueryContainer = new LazyQueryContainer( return new LazyQueryContainer(new LazyQueryDefinition(true, 20, SPUILabelDefinitions.VAR_NAME), typeQF);
new LazyQueryDefinition(true, 20, SPUILabelDefinitions.VAR_NAME), typeQF);
return lazyQueryContainer;
} }
@Override @Override
@@ -105,13 +81,6 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* isClickedByDefault(java.lang .Long)
*/
@Override @Override
protected boolean isClickedByDefault(final Long buttonId) { protected boolean isClickedByDefault(final Long buttonId) {
@@ -119,25 +88,11 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons {
&& manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId); && manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* createButtonId(java.lang. String)
*/
@Override @Override
protected String createButtonId(final String name) { protected String createButtonId(final String name) {
return SPUIComponetIdProvider.SM_TYPE_FILTER_BTN_ID + name; return SPUIComponetIdProvider.SM_TYPE_FILTER_BTN_ID + name;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getFilterButtonDropHandler()
*/
@Override @Override
protected DropHandler getFilterButtonDropHandler() { 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 @Override
protected String getButttonWrapperIdPrefix() { protected String getButttonWrapperIdPrefix() {
return SPUIDefinitions.SOFTWARE_MODULE_TAG_ID_PREFIXS; return SPUIDefinitions.SOFTWARE_MODULE_TAG_ID_PREFIXS;
} }

View File

@@ -29,9 +29,6 @@ import com.vaadin.ui.Window;
/** /**
* Software Module Type filter buttons header. * Software Module Type filter buttons header.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -51,9 +48,7 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader {
@Autowired @Autowired
private CreateUpdateSoftwareTypeLayout createUpdateSWTypeLayout; private CreateUpdateSoftwareTypeLayout createUpdateSWTypeLayout;
/** @Override
* Initialize the components.
*/
@PostConstruct @PostConstruct
public void init() { public void init() {
super.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 @Override
protected String getHideButtonId() { protected String getHideButtonId() {
return SPUIComponetIdProvider.SM_SHOW_FILTER_BUTTON_ID; return SPUIComponetIdProvider.SM_SHOW_FILTER_BUTTON_ID;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* hasCreateUpdatePermission()
*/
@Override @Override
protected boolean hasCreateUpdatePermission() { protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle(
* )
*/
@Override @Override
protected String getTitle() { protected String getTitle() {
return SPUILabelDefinitions.TYPE; return SPUILabelDefinitions.TYPE;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* settingsIconClicked(com.vaadin .ui.Button.ClickEvent)
*/
@Override @Override
protected void settingsIconClicked(final ClickEvent event) { protected void settingsIconClicked(final ClickEvent event) {
final Window addUpdateWindow = createUpdateSWTypeLayout.getWindow(); 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 @Override
protected boolean dropHitsRequired() { protected boolean dropHitsRequired() {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* hideFilterButtonLayout()
*/
@Override @Override
protected void hideFilterButtonLayout() { protected void hideFilterButtonLayout() {
manageDistUIState.setSwTypeFilterClosed(true); manageDistUIState.setSwTypeFilterClosed(true);
eventBus.publish(this, DistributionsUIEvent.HIDE_SM_FILTER_BY_TYPE); eventBus.publish(this, DistributionsUIEvent.HIDE_SM_FILTER_BY_TYPE);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* getConfigureFilterButtonId()
*/
@Override @Override
protected String getConfigureFilterButtonId() { protected String getConfigureFilterButtonId() {
return SPUIDefinitions.ADD_SOFTWARE_MODULE_TYPE; return SPUIDefinitions.ADD_SOFTWARE_MODULE_TYPE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader#
* isAddTagRequired()
*/
@Override @Override
protected boolean isAddTagRequired() { protected boolean isAddTagRequired() {
return true; return true;

View File

@@ -20,8 +20,6 @@ import com.vaadin.spring.annotation.VaadinSessionScope;
/** /**
* Distribution table filter state. * Distribution table filter state.
*
*
*/ */
@SpringComponent @SpringComponent
@VaadinSessionScope @VaadinSessionScope
@@ -31,9 +29,9 @@ public class ManageDistFilters implements Serializable {
private String searchText; private String searchText;
private List<String> distSetTags = new ArrayList<String>(); private List<String> distSetTags = new ArrayList<>();
private List<String> clickedDistSetTags = new ArrayList<String>(); private List<String> clickedDistSetTags = new ArrayList<>();
private DistributionSetType clickedDistSetType; private DistributionSetType clickedDistSetType;
@@ -61,17 +59,10 @@ public class ManageDistFilters implements Serializable {
this.clickedDistSetTags = clickedDistSetTags; this.clickedDistSetTags = clickedDistSetTags;
} }
/**
* @return the searchText
*/
public Optional<String> getSearchText() { public Optional<String> getSearchText() {
return searchText == null ? Optional.empty() : Optional.of(searchText); return searchText == null ? Optional.empty() : Optional.of(searchText);
} }
/**
* @param searchText
* the searchText to set
*/
public void setSearchText(final String searchText) { public void setSearchText(final String searchText) {
this.searchText = searchText; this.searchText = searchText;
} }

View File

@@ -34,7 +34,6 @@ import com.google.common.base.Strings;
* *
* *
*/ */
public class TargetFilterBeanQuery extends AbstractBeanQuery<ProxyTargetFilter> { public class TargetFilterBeanQuery extends AbstractBeanQuery<ProxyTargetFilter> {
private static final long serialVersionUID = 1845964596238990987L; private static final long serialVersionUID = 1845964596238990987L;
@@ -76,8 +75,8 @@ public class TargetFilterBeanQuery extends AbstractBeanQuery<ProxyTargetFilter>
@Override @Override
protected List<ProxyTargetFilter> loadBeans(final int startIndex, final int count) { protected List<ProxyTargetFilter> loadBeans(final int startIndex, final int count) {
Slice<TargetFilterQuery> targetFilterQuery = null; Slice<TargetFilterQuery> targetFilterQuery;
final List<ProxyTargetFilter> proxyTargetFilter = new ArrayList<ProxyTargetFilter>(); final List<ProxyTargetFilter> proxyTargetFilter = new ArrayList<>();
if (startIndex == 0 && firstPageTargetFilter != null) { if (startIndex == 0 && firstPageTargetFilter != null) {
targetFilterQuery = firstPageTargetFilter; targetFilterQuery = firstPageTargetFilter;
} else if (Strings.isNullOrEmpty(searchText)) { } else if (Strings.isNullOrEmpty(searchText)) {

View File

@@ -41,7 +41,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod;
import com.vaadin.data.Container; import com.vaadin.data.Container;
import com.vaadin.data.Item; import com.vaadin.data.Item;
import com.vaadin.server.FontAwesome; import com.vaadin.server.FontAwesome;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
@@ -84,20 +83,20 @@ public class TargetFilterTable extends Table {
* Initialize the Action History Table. * Initialize the Action History Table.
*/ */
@PostConstruct @PostConstruct
public void init() { public void init() {
setStyleName("sp-table"); setStyleName("sp-table");
setSizeFull(); setSizeFull();
setImmediate(true); setImmediate(true);
setHeight(100.0f, Unit.PERCENTAGE); setHeight(100.0f, Unit.PERCENTAGE);
addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES);
addStyleName(ValoTheme.TABLE_SMALL); addStyleName(ValoTheme.TABLE_SMALL);
addCustomGeneratedColumns(); addCustomGeneratedColumns();
populateTableData(); populateTableData();
setColumnCollapsingAllowed(true); setColumnCollapsingAllowed(true);
setColumnProperties(); setColumnProperties();
setId(SPUIComponetIdProvider.TAEGET_FILTER_TABLE_ID); setId(SPUIComponetIdProvider.TAEGET_FILTER_TABLE_ID);
eventBus.subscribe(this); eventBus.subscribe(this);
} }
@PreDestroy @PreDestroy
void destroy() { void destroy() {
@@ -114,20 +113,14 @@ public class TargetFilterTable extends Table {
} }
} }
/**
* Create a empty HierarchicalContainer.
*
*
*/
private Container createContainer() { private Container createContainer() {
final Map<String, Object> queryConfig = prepareQueryConfigFilters(); final Map<String, Object> queryConfig = prepareQueryConfigFilters();
final BeanQueryFactory<TargetFilterBeanQuery> targetQF = new BeanQueryFactory<TargetFilterBeanQuery>( final BeanQueryFactory<TargetFilterBeanQuery> targetQF = new BeanQueryFactory<>(TargetFilterBeanQuery.class);
TargetFilterBeanQuery.class);
targetQF.setQueryConfiguration(queryConfig); targetQF.setQueryConfiguration(queryConfig);
// create lazy query container with lazy defination and query // create lazy query container with lazy defination and query
final LazyQueryContainer targetFilterContainer = new LazyQueryContainer(new LazyQueryDefinition(true, final LazyQueryContainer targetFilterContainer = new LazyQueryContainer(
SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), targetQF); new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), targetQF);
targetFilterContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); targetFilterContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT);
return targetFilterContainer; return targetFilterContainer;
@@ -135,15 +128,12 @@ public class TargetFilterTable extends Table {
} }
private Map<String, Object> prepareQueryConfigFilters() { private Map<String, Object> prepareQueryConfigFilters() {
final Map<String, Object> queryConfig = new HashMap<String, Object>(); final Map<String, Object> queryConfig = new HashMap<>();
filterManagementUIState.getCustomFilterSearchText().ifPresent( filterManagementUIState.getCustomFilterSearchText()
value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value));
return queryConfig; return queryConfig;
} }
/**
* Create a empty HierarchicalContainer.
*/
private void addContainerproperties() { private void addContainerproperties() {
/* Create HierarchicalContainer container */ /* Create HierarchicalContainer container */
container.addContainerProperty(SPUILabelDefinitions.NAME, Link.class, null); container.addContainerProperty(SPUILabelDefinitions.NAME, Link.class, null);
@@ -154,7 +144,7 @@ public class TargetFilterTable extends Table {
} }
private List<TableColumn> getVisbleColumns() { private List<TableColumn> getVisbleColumns() {
final List<TableColumn> columnList = new ArrayList<TableColumn>(); final List<TableColumn> columnList = new ArrayList<>();
columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.2F)); 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_USER, i18n.get("header.createdBy"), 0.15F));
columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.2F)); 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() { private void refreshContainer() {
populateTableData(); populateTableData();
@@ -187,10 +176,6 @@ public class TargetFilterTable extends Table {
.toString(); .toString();
} }
/**
* @param event
* @return
*/
private void onDelete(final ClickEvent event) { private void onDelete(final ClickEvent event) {
/* Display the confirmation */ /* Display the confirmation */
final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.filter.delete.confirmbox"), 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. * of the deleted custom filter.
*/ */
notification.displaySuccess(i18n.get("message.delete.filter.success", notification.displaySuccess(
new Object[] { deletedFilterName })); i18n.get("message.delete.filter.success", new Object[] { deletedFilterName }));
refreshContainer(); refreshContainer();
} }
}); });
@@ -236,10 +221,6 @@ public class TargetFilterTable extends Table {
return updateIcon; return updateIcon;
} }
/**
* @param event
* @return
*/
private void onClickOfDetailButton(final ClickEvent event) { private void onClickOfDetailButton(final ClickEvent event) {
final String targetFilterName = (String) ((Button) event.getComponent()).getData(); final String targetFilterName = (String) ((Button) event.getComponent()).getData();
final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement

View File

@@ -202,16 +202,8 @@ public class ActionHistoryTable extends TreeTable implements Handler {
hierarchicalContainer.addContainerProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, String.class, null); 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<Object> getVisbleColumns() { private List<Object> getVisbleColumns() {
final List<Object> visibleColumnIds = new ArrayList<Object>(); final List<Object> visibleColumnIds = new ArrayList<>();
visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE);
visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DIST); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DIST);
visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DATETIME); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DATETIME);

View File

@@ -96,7 +96,7 @@ public class DistributionBeanQuery extends AbstractBeanQuery<ProxyDistribution>
@Override @Override
protected List<ProxyDistribution> loadBeans(final int startIndex, final int count) { protected List<ProxyDistribution> loadBeans(final int startIndex, final int count) {
Page<DistributionSet> distBeans; Page<DistributionSet> distBeans;
final List<ProxyDistribution> proxyDistributions = new ArrayList<ProxyDistribution>(); final List<ProxyDistribution> proxyDistributions = new ArrayList<>();
if (startIndex == 0 && firstPageDistributionSets != null) { if (startIndex == 0 && firstPageDistributionSets != null) {
distBeans = firstPageDistributionSets; distBeans = firstPageDistributionSets;
} else if (pinnedControllerId != null) { } else if (pinnedControllerId != null) {

View File

@@ -39,9 +39,6 @@ import com.vaadin.ui.Window;
/** /**
* Distribution set details layout. * Distribution set details layout.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -75,9 +72,7 @@ public class DistributionDetails extends AbstractTableDetailsLayout {
private UI ui; private UI ui;
/** @Override
* softwareLayout Initialize the component.
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
eventBus.subscribe(this); eventBus.subscribe(this);
@@ -116,23 +111,11 @@ public class DistributionDetails extends AbstractTableDetailsLayout {
} }
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* getDefaultCaption()
*/
@Override @Override
protected String getDefaultCaption() { protected String getDefaultCaption() {
return i18n.get("distribution.details.header"); return i18n.get("distribution.details.header");
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* addTabs(com.vaadin. ui.TabSheet)
*/
@Override @Override
protected void addTabs(final TabSheet detailsTab) { protected void addTabs(final TabSheet detailsTab) {
detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); 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); 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 @Override
protected void onEdit(final ClickEvent event) { protected void onEdit(final ClickEvent event) {
final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow();
@@ -157,79 +134,37 @@ public class DistributionDetails extends AbstractTableDetailsLayout {
newDistWindow.setVisible(Boolean.TRUE); newDistWindow.setVisible(Boolean.TRUE);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* getEditButtonId()
*/
@Override @Override
protected String getEditButtonId() { protected String getEditButtonId() {
return SPUIComponetIdProvider.DS_EDIT_BUTTON; return SPUIComponetIdProvider.DS_EDIT_BUTTON;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* onLoadIsTableRowSelected ()
*/
@Override @Override
protected Boolean onLoadIsTableRowSelected() { protected Boolean onLoadIsTableRowSelected() {
return !(managementUIState.getSelectedDsIdName().isPresent() return !(managementUIState.getSelectedDsIdName().isPresent()
&& managementUIState.getSelectedDsIdName().get().isEmpty()); && managementUIState.getSelectedDsIdName().get().isEmpty());
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* onLoadIsTableMaximized ()
*/
@Override @Override
protected Boolean onLoadIsTableMaximized() { protected Boolean onLoadIsTableMaximized() {
return managementUIState.isDsTableMaximized(); return managementUIState.isDsTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* populateDetailsWidget()
*/
@Override @Override
protected void populateDetailsWidget() { protected void populateDetailsWidget() {
populateDetailsWidget(selectedDsModule); populateDetailsWidget(selectedDsModule);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* clearDetails()
*/
@Override @Override
protected void clearDetails() { protected void clearDetails() {
populateDetailsWidget(null); populateDetailsWidget(null);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* hasEditPermission()
*/
@Override @Override
protected Boolean hasEditPermission() { protected Boolean hasEditPermission() {
return permissionChecker.hasUpdateDistributionPermission(); return permissionChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout#
* getTabSheetId()
*/
@Override @Override
protected String getTabSheetId() { protected String getTabSheetId() {
return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET; return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET;

View File

@@ -73,9 +73,6 @@ import com.vaadin.ui.UI;
/** /**
* Distribution set table. * Distribution set table.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -113,9 +110,7 @@ public class DistributionTable extends AbstractTable {
private Button distributinPinnedBtn; private Button distributinPinnedBtn;
/** @Override
* Initialize the distribution table.
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -219,44 +214,37 @@ public class DistributionTable extends AbstractTable {
*/ */
@Override @Override
protected Container createContainer() { protected Container createContainer() {
final Map<String, Object> queryConfiguration = new HashMap<String, Object>(); final Map<String, Object> queryConfiguration = prepareQueryConfigFilters();
final BeanQueryFactory<DistributionBeanQuery> 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<String, Object> prepareQueryConfigFilters() {
final Map<String, Object> queryConfig = new HashMap<>();
managementUIState.getDistributionTableFilters().getSearchText() managementUIState.getDistributionTableFilters().getSearchText()
.ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value));
managementUIState.getDistributionTableFilters().getPinnedTargetId() managementUIState.getDistributionTableFilters().getPinnedTargetId()
.ifPresent(value -> queryConfiguration.put(SPUIDefinitions.ORDER_BY_PINNED_TARGET, value)); .ifPresent(value -> queryConfig.put(SPUIDefinitions.ORDER_BY_PINNED_TARGET, value));
final List<String> list = new ArrayList<String>(); final List<String> list = new ArrayList<>();
queryConfiguration.put(SPUIDefinitions.FILTER_BY_NO_TAG, queryConfig.put(SPUIDefinitions.FILTER_BY_NO_TAG,
managementUIState.getDistributionTableFilters().isNoTagSelected()); managementUIState.getDistributionTableFilters().isNoTagSelected());
if (!managementUIState.getDistributionTableFilters().getDistSetTags().isEmpty()) { if (!managementUIState.getDistributionTableFilters().getDistSetTags().isEmpty()) {
list.addAll(managementUIState.getDistributionTableFilters().getDistSetTags()); list.addAll(managementUIState.getDistributionTableFilters().getDistSetTags());
} }
queryConfiguration.put(SPUIDefinitions.FILTER_BY_TAG, list); queryConfig.put(SPUIDefinitions.FILTER_BY_TAG, list);
final BeanQueryFactory<DistributionBeanQuery> distributionQF = new BeanQueryFactory<DistributionBeanQuery>( return queryConfig;
DistributionBeanQuery.class);
distributionQF.setQueryConfiguration(queryConfiguration);
final LazyQueryContainer distributionContainer = new LazyQueryContainer(
new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME),
distributionQF);
return distributionContainer;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#addContainerProperties(
* com.vaadin.data.Container )
*/
@Override @Override
protected void addContainerProperties(final Container container) { protected void addContainerProperties(final Container container) {
HawkbitCommonUtil.getDsTableColumnProperties(container); HawkbitCommonUtil.getDsTableColumnProperties(container);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable#
* addCustomGeneratedColumns()
*/
@Override @Override
protected void addCustomGeneratedColumns() { protected void addCustomGeneratedColumns() {
addGeneratedColumn(SPUILabelDefinitions.PIN_COLUMN, new Table.ColumnGenerator() { 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 @Override
protected boolean isFirstRowSelectedOnLoad() { protected boolean isFirstRowSelectedOnLoad() {
return !managementUIState.getSelectedDsIdName().isPresent() return !managementUIState.getSelectedDsIdName().isPresent()
|| managementUIState.getSelectedDsIdName().get().isEmpty(); || managementUIState.getSelectedDsIdName().get().isEmpty();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#getItemIdToSelect()
*/
@Override @Override
protected Object getItemIdToSelect() { protected Object getItemIdToSelect() {
if (managementUIState.getSelectedDsIdName().isPresent()) { if (managementUIState.getSelectedDsIdName().isPresent()) {
@@ -294,16 +271,9 @@ public class DistributionTable extends AbstractTable {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.table.AbstractTable#onValueChange()
*/
@Override @Override
protected void onValueChange() { protected void onValueChange() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
@SuppressWarnings("unchecked")
final Set<DistributionSetIdName> values = HawkbitCommonUtil.getSelectedDSDetails(this); final Set<DistributionSetIdName> values = HawkbitCommonUtil.getSelectedDSDetails(this);
DistributionSetIdName value = null; DistributionSetIdName value = null;
if (values != null && !values.isEmpty()) { if (values != null && !values.isEmpty()) {
@@ -312,10 +282,7 @@ public class DistributionTable extends AbstractTable {
while (iterator.hasNext()) { while (iterator.hasNext()) {
value = iterator.next(); value = iterator.next();
} }
/**
* Adding null check to make to avoid NPE.Its weird that at times
* getValue returns null.
*/
if (null != value) { if (null != value) {
managementUIState.setSelectedDsIdName(values); managementUIState.setSelectedDsIdName(values);
managementUIState.setLastSelectedDsIdName(value); 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 @Override
protected boolean isMaximized() { protected boolean isMaximized() {
return managementUIState.isDsTableMaximized(); return managementUIState.isDsTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#getTableVisibleColumns(
* )
*/
@Override @Override
protected List<TableColumn> getTableVisibleColumns() { protected List<TableColumn> getTableVisibleColumns() {
return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), true, i18n); return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), true, i18n);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTable#getTableDropHandler()
*/
@Override @Override
protected DropHandler getTableDropHandler() { protected DropHandler getTableDropHandler() {
return new DropHandler() { return new DropHandler() {
@@ -396,7 +346,7 @@ public class DistributionTable extends AbstractTable {
final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails();
final Table distTable = (Table) taregtDet.getTarget(); final Table distTable = (Table) taregtDet.getTarget();
final Set<DistributionSetIdName> distsSelected = HawkbitCommonUtil.getSelectedDSDetails(distTable); final Set<DistributionSetIdName> distsSelected = HawkbitCommonUtil.getSelectedDSDetails(distTable);
final Set<Long> distList = new HashSet<Long>(); final Set<Long> distList = new HashSet<>();
final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails();
final Object distItemId = dropData.getItemIdOver(); final Object distItemId = dropData.getItemIdOver();
@@ -428,7 +378,7 @@ public class DistributionTable extends AbstractTable {
// assign dist to those targets // assign dist to those targets
final List<Target> assignedTargets = targetService.findTargetsByTag(targetTagName); final List<Target> assignedTargets = targetService.findTargetsByTag(targetTagName);
if (!assignedTargets.isEmpty()) { if (!assignedTargets.isEmpty()) {
final Set<TargetIdName> targetDetailsList = new HashSet<TargetIdName>(); final Set<TargetIdName> targetDetailsList = new HashSet<>();
assignedTargets.forEach(target -> targetDetailsList assignedTargets.forEach(target -> targetDetailsList
.add(new TargetIdName(target.getId(), target.getControllerId(), target.getName()))); .add(new TargetIdName(target.getId(), target.getControllerId(), target.getName())));
assignTargetToDs(getItem(distItemId), targetDetailsList); assignTargetToDs(getItem(distItemId), targetDetailsList);
@@ -441,7 +391,7 @@ public class DistributionTable extends AbstractTable {
final TableTransferable transferable = (TableTransferable) event.getTransferable(); final TableTransferable transferable = (TableTransferable) event.getTransferable();
final Table source = transferable.getSourceComponent(); final Table source = transferable.getSourceComponent();
final Set<TargetIdName> targetsSelected = HawkbitCommonUtil.getSelectedTargetDetails(source); final Set<TargetIdName> targetsSelected = HawkbitCommonUtil.getSelectedTargetDetails(source);
final Set<TargetIdName> targetDetailsList = new HashSet<TargetIdName>(); final Set<TargetIdName> targetDetailsList = new HashSet<>();
if (!targetsSelected.contains(transferable.getData("itemId"))) { if (!targetsSelected.contains(transferable.getData("itemId"))) {
targetDetailsList.add((TargetIdName) 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) { private Boolean doValidation(final DragAndDropEvent dragEvent) {
final Component compsource = dragEvent.getTransferable().getSourceComponent(); final Component compsource = dragEvent.getTransferable().getSourceComponent();
if (compsource instanceof Table) { if (compsource instanceof Table) {
@@ -521,15 +464,6 @@ public class DistributionTable extends AbstractTable {
return false; return false;
} }
/**
* Validate the assignment.
*
* @param targetDetailsList
* @param source
* @param distId
* @param distName
* @return String as indicator
*/
private String validate(final Set<TargetIdName> targetDetailsList, private String validate(final Set<TargetIdName> targetDetailsList,
final DistributionSetIdName distributionSetIdName) { final DistributionSetIdName distributionSetIdName) {
String pendingActionMessage = null; String pendingActionMessage = null;
@@ -548,17 +482,6 @@ public class DistributionTable extends AbstractTable {
return pendingActionMessage; 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) { private String getPendingActionMessage(final String message, final String targId, final String distNameVersion) {
String pendActionMsg = i18n.get("message.target.assigned.pending"); String pendActionMsg = i18n.get("message.target.assigned.pending");
if (null == message) { if (null == message) {
@@ -567,12 +490,6 @@ public class DistributionTable extends AbstractTable {
return pendActionMsg; return pendActionMsg;
} }
/**
* Show or Hide Popup Notification Message.
*
* @param message
* as msg
*/
private void showOrHidePopupAndNotification(final String message) { private void showOrHidePopupAndNotification(final String message) {
if (null != managementUIState.getAssignedList() && !managementUIState.getAssignedList().isEmpty()) { if (null != managementUIState.getAssignedList() && !managementUIState.getAssignedList().isEmpty()) {
eventBus.publish(this, ManagementUIEvent.UPDATE_COUNT); 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, private String getPinnedDistributionStyle(final Long installedDistItemIds, final Long assignedDistTableItemIds,
final Object itemId) { final Object itemId) {
final Long distId = ((DistributionSetIdName) itemId).getId(); final Long distId = ((DistributionSetIdName) itemId).getId();
@@ -655,10 +559,6 @@ public class DistributionTable extends AbstractTable {
} }
} }
/**
* @param itemId
* @return
*/
private Object getPinButton(final Object itemId) { private Object getPinButton(final Object itemId) {
final DistributionSetIdName dist = (DistributionSetIdName) getContainerDataSource().getItem(itemId) final DistributionSetIdName dist = (DistributionSetIdName) getContainerDataSource().getItem(itemId)
.getItemProperty(SPUILabelDefinitions.VAR_DIST_ID_NAME).getValue(); .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) { private void addPinClickListener(final ClickEvent event) {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
checkifAlreadyPinned(event.getButton()); 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) { private void checkifAlreadyPinned(final Button eventBtn) {
final Long newPinnedDistItemId = ((DistributionSetIdName) eventBtn.getData()).getId(); final Long newPinnedDistItemId = ((DistributionSetIdName) eventBtn.getData()).getId();
Long pinnedDistId = null; Long pinnedDistId = null;
@@ -751,9 +639,6 @@ public class DistributionTable extends AbstractTable {
} }
} }
/**
* set style to distribution set table.
*/
private void styleDistributionSetTable() { private void styleDistributionSetTable() {
setCellStyleGenerator(new Table.CellStyleGenerator() { setCellStyleGenerator(new Table.CellStyleGenerator() {
private static final long serialVersionUID = 1L; 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) { private void applyPinStyle(final Button eventBtn) {
final StringBuilder style = new StringBuilder(SPUIComponentProvider.getPinButtonStyle()); final StringBuilder style = new StringBuilder(SPUIComponentProvider.getPinButtonStyle());
style.append(' ').append(SPUIStyleDefinitions.DIST_PIN).append(' ').append("tablePin").append(' ') style.append(' ').append(SPUIStyleDefinitions.DIST_PIN).append(' ').append("tablePin").append(' ')
@@ -815,14 +694,9 @@ public class DistributionTable extends AbstractTable {
* @param assignedDistTableItemIds * @param assignedDistTableItemIds
* Item ids of assigned distribution set * Item ids of assigned distribution set
*/ */
@SuppressWarnings("serial")
public void styleDistributionSetTable(final Long installedDistItemId, final Long assignedDistTableItemId) { public void styleDistributionSetTable(final Long installedDistItemId, final Long assignedDistTableItemId) {
setCellStyleGenerator(new Table.CellStyleGenerator() { setCellStyleGenerator((source, itemId, propertyId) -> getPinnedDistributionStyle(installedDistItemId,
@Override assignedDistTableItemId, itemId));
public String getStyle(final Table source, final Object itemId, final Object propertyId) {
return getPinnedDistributionStyle(installedDistItemId, assignedDistTableItemId, itemId);
}
});
} }
public void setDistributinPinnedBtn(final Button distributinPinnedBtn) { public void setDistributinPinnedBtn(final Button distributinPinnedBtn) {

View File

@@ -58,9 +58,7 @@ public class DistributionTableHeader extends AbstractTableHeader {
@Autowired @Autowired
private DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout; private DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout;
/** @Override
* Initialize the component.
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.init(); super.init();
@@ -81,54 +79,26 @@ public class DistributionTableHeader extends AbstractTableHeader {
} }
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getHeaderCaption(
* )
*/
@Override @Override
protected String getHeaderCaption() { protected String getHeaderCaption() {
return i18n.get("header.dist.table"); return i18n.get("header.dist.table");
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getSearchBoxId()
*/
@Override @Override
protected String getSearchBoxId() { protected String getSearchBoxId() {
return SPUIComponetIdProvider.DIST_SEARCH_TEXTFIELD; return SPUIComponetIdProvider.DIST_SEARCH_TEXTFIELD;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getSearchRestIconId()
*/
@Override @Override
protected String getSearchRestIconId() { protected String getSearchRestIconId() {
return SPUIComponetIdProvider.DIST_SEARCH_ICON; return SPUIComponetIdProvider.DIST_SEARCH_ICON;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getAddIconId()
*/
@Override @Override
protected String getAddIconId() { protected String getAddIconId() {
return SPUIComponetIdProvider.DIST_ADD_ICON; return SPUIComponetIdProvider.DIST_ADD_ICON;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* onLoadSearchBoxValue()
*/
@Override @Override
protected String onLoadSearchBoxValue() { protected String onLoadSearchBoxValue() {
if (managementUIState.getDistributionTableFilters().getSearchText().isPresent()) { if (managementUIState.getDistributionTableFilters().getSearchText().isPresent()) {
@@ -137,155 +107,78 @@ public class DistributionTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getDropFilterId()
*/
@Override @Override
protected String getDropFilterId() { protected String getDropFilterId() {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* hasCreatePermission()
*/
@Override @Override
protected boolean hasCreatePermission() { protected boolean hasCreatePermission() {
return permChecker.hasCreateDistributionPermission(); return permChecker.hasCreateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* isDropHintRequired()
*/
@Override @Override
protected boolean isDropHintRequired() { protected boolean isDropHintRequired() {
return true; return true;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* isDropFilterRequired()
*/
@Override @Override
protected boolean isDropFilterRequired() { protected boolean isDropFilterRequired() {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getShowFilterButtonLayoutId()
*/
@Override @Override
protected String getShowFilterButtonLayoutId() { protected String getShowFilterButtonLayoutId() {
return "show.dist.tags.icon"; return "show.dist.tags.icon";
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* showFilterButtonsLayout()
*/
@Override @Override
protected void showFilterButtonsLayout() { protected void showFilterButtonsLayout() {
managementUIState.setDistTagFilterClosed(false); managementUIState.setDistTagFilterClosed(false);
eventbus.publish(this, ManagementUIEvent.SHOW_DISTRIBUTION_TAG_LAYOUT); eventbus.publish(this, ManagementUIEvent.SHOW_DISTRIBUTION_TAG_LAYOUT);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#resetSearchText()
*/
@Override @Override
protected void resetSearchText() { protected void resetSearchText() {
managementUIState.getDistributionTableFilters().setSearchText(null); if (managementUIState.getDistributionTableFilters().getSearchText().isPresent()) {
eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); managementUIState.getDistributionTableFilters().setSearchText(null);
eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT);
}
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#getMaxMinIconId()
*/
@Override @Override
protected String getMaxMinIconId() { protected String getMaxMinIconId() {
return SPUIComponetIdProvider.DS_MAX_MIN_TABLE_ICON; return SPUIComponetIdProvider.DS_MAX_MIN_TABLE_ICON;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#maximizeTable()
*/
@Override @Override
public void maximizeTable() { public void maximizeTable() {
managementUIState.setDsTableMaximized(Boolean.TRUE); managementUIState.setDsTableMaximized(Boolean.TRUE);
eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MAXIMIZED, null)); eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MAXIMIZED, null));
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#minimizeTable()
*/
@Override @Override
public void minimizeTable() { public void minimizeTable() {
managementUIState.setDsTableMaximized(Boolean.FALSE); managementUIState.setDsTableMaximized(Boolean.FALSE);
eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MINIMIZED, null)); eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MINIMIZED, null));
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* onLoadIsTableMaximized()
*/
@Override @Override
public Boolean onLoadIsTableMaximized() { public Boolean onLoadIsTableMaximized() {
return managementUIState.isDsTableMaximized(); return managementUIState.isDsTableMaximized();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* onLoadIsShowFilterButtonDisplayed()
*/
@Override @Override
public Boolean onLoadIsShowFilterButtonDisplayed() { public Boolean onLoadIsShowFilterButtonDisplayed() {
return managementUIState.isDistTagFilterClosed(); return managementUIState.isDistTagFilterClosed();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#searchBy(java.
* lang.String)
*/
@Override @Override
protected void searchBy(final String newSearchText) { protected void searchBy(final String newSearchText) {
managementUIState.getDistributionTableFilters().setSearchText(newSearchText); managementUIState.getDistributionTableFilters().setSearchText(newSearchText);
eventbus.publish(this, DistributionTableFilterEvent.FILTER_BY_TEXT); eventbus.publish(this, DistributionTableFilterEvent.FILTER_BY_TEXT);
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#addNewItem(com.
* vaadin.ui.Button.ClickEvent )
*/
@Override @Override
protected void addNewItem(final ClickEvent event) { protected void addNewItem(final ClickEvent event) {
final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow();
@@ -295,12 +188,6 @@ public class DistributionTableHeader extends AbstractTableHeader {
eventbus.publish(this, DragEvent.HIDE_DROP_HINT); eventbus.publish(this, DragEvent.HIDE_DROP_HINT);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* isAddNewItemAllowed()
*/
@Override @Override
protected Boolean isAddNewItemAllowed() { protected Boolean isAddNewItemAllowed() {
return Boolean.FALSE; return Boolean.FALSE;
@@ -321,47 +208,21 @@ public class DistributionTableHeader extends AbstractTableHeader {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableHeader#
* getBulkUploadIconId()
*/
@Override @Override
protected String getBulkUploadIconId() { protected String getBulkUploadIconId() {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.table.AbstractTableHeader#bulkUpload(com.
* vaadin.ui.Button.ClickEvent )
*/
@Override @Override
protected void bulkUpload(final ClickEvent event) { 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 @Override
protected Boolean isBulkUploadAllowed() { protected Boolean isBulkUploadAllowed() {
return Boolean.FALSE; return Boolean.FALSE;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.table.AbstractTableHeader#
* isBulkUploadInProgress()
*/
@Override @Override
protected boolean isBulkUploadInProgress() { protected boolean isBulkUploadInProgress() {
return false; return false;

View File

@@ -75,7 +75,7 @@ public class DistributionTagBeanQuery extends AbstractBeanQuery<ProxyTag> {
@Override @Override
protected List<ProxyTag> loadBeans(final int startIndex, final int count) { protected List<ProxyTag> loadBeans(final int startIndex, final int count) {
Page<DistributionSetTag> dsTagBeans; Page<DistributionSetTag> dsTagBeans;
final List<ProxyTag> tagList = new ArrayList<ProxyTag>(); final List<ProxyTag> tagList = new ArrayList<>();
if (startIndex == 0 && firstPageDsTag != null) { if (startIndex == 0 && firstPageDsTag != null) {
dsTagBeans = firstPageDsTag; dsTagBeans = firstPageDsTag;
} else { } else {

View File

@@ -64,12 +64,7 @@ public class DistributionTagButtons extends AbstractFilterButtons {
@Autowired @Autowired
private ManagementUIState managementUIState; private ManagementUIState managementUIState;
/** @Override
* Initialize component.
*
* @param filterButtonClickBehaviour
* the clickable behaviour.
*/
public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) {
super.init(filterButtonClickBehaviour); super.init(filterButtonClickBehaviour);
addNewTag(new DistributionSetTag("NO TAG")); addNewTag(new DistributionSetTag("NO TAG"));
@@ -98,7 +93,6 @@ public class DistributionTagButtons extends AbstractFilterButtons {
@EventBusListenerMethod(scope = EventScope.SESSION) @EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final DragEvent dragEvent) { void onEvent(final DragEvent dragEvent) {
if (dragEvent == DragEvent.DISTRIBUTION_DRAG) { if (dragEvent == DragEvent.DISTRIBUTION_DRAG) {
UI.getCurrent().access(() -> addStyleName(SPUIStyleDefinitions.SHOW_DROP_HINT_FILTER_BUTTON)); UI.getCurrent().access(() -> addStyleName(SPUIStyleDefinitions.SHOW_DROP_HINT_FILTER_BUTTON));
} else { } else {
@@ -106,34 +100,18 @@ public class DistributionTagButtons extends AbstractFilterButtons {
} }
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getButtonsTableId()
*/
@Override @Override
protected String getButtonsTableId() { protected String getButtonsTableId() {
return SPUIComponetIdProvider.DISTRIBUTION_TAG_TABLE_ID; return SPUIComponetIdProvider.DISTRIBUTION_TAG_TABLE_ID;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* createButtonsLazyQueryContainer ()
*/
@Override @Override
protected LazyQueryContainer createButtonsLazyQueryContainer() { protected LazyQueryContainer createButtonsLazyQueryContainer() {
final Map<String, Object> queryConfig = new HashMap<String, Object>(); final Map<String, Object> queryConfig = new HashMap<>();
final BeanQueryFactory<DistributionTagBeanQuery> tagQF = new BeanQueryFactory<DistributionTagBeanQuery>( final BeanQueryFactory<DistributionTagBeanQuery> tagQF = new BeanQueryFactory<>(DistributionTagBeanQuery.class);
DistributionTagBeanQuery.class);
tagQF.setQueryConfiguration(queryConfig); tagQF.setQueryConfiguration(queryConfig);
final LazyQueryContainer tagContainer = HawkbitCommonUtil.createDSLazyQueryContainer( return HawkbitCommonUtil.createDSLazyQueryContainer(
new BeanQueryFactory<DistributionTagBeanQuery>(DistributionTagBeanQuery.class)); new BeanQueryFactory<DistributionTagBeanQuery>(DistributionTagBeanQuery.class));
return tagContainer;
} }
@@ -142,13 +120,6 @@ public class DistributionTagButtons extends AbstractFilterButtons {
return SPUIDefinitions.DISTRIBUTION_TAG_BUTTON; return SPUIDefinitions.DISTRIBUTION_TAG_BUTTON;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* isClickedByDefault(java.lang .Long)
*/
@Override @Override
protected boolean isClickedByDefault(final Long buttonId) { protected boolean isClickedByDefault(final Long buttonId) {
final DistributionSetTag dsTagObject = tagMgmtService.findDistributionSetTagById(buttonId); final DistributionSetTag dsTagObject = tagMgmtService.findDistributionSetTagById(buttonId);
@@ -161,37 +132,16 @@ public class DistributionTagButtons extends AbstractFilterButtons {
return managementUIState.getDistributionTableFilters().isNoTagSelected(); return managementUIState.getDistributionTableFilters().isNoTagSelected();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* createButtonId(java.lang. String)
*/
@Override @Override
protected String createButtonId(final String name) { protected String createButtonId(final String name) {
return name; return name;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getFilterButtonDropHandler()
*/
@Override @Override
protected DropHandler getFilterButtonDropHandler() { protected DropHandler getFilterButtonDropHandler() {
return spDistTagDropEvent; return spDistTagDropEvent;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterButtons#
* getButttonWrapperId()
*/
@Override @Override
protected String getButttonWrapperIdPrefix() { protected String getButttonWrapperIdPrefix() {
return SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS; return SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS;

View File

@@ -50,9 +50,7 @@ public class DistributionTagHeader extends AbstractFilterHeader {
@Autowired @Autowired
private CreateUpdateDistributionTagLayoutWindow createORUpdateDistributionTagLayout; private CreateUpdateDistributionTagLayoutWindow createORUpdateDistributionTagLayout;
/** @Override
* Initialize the components.
*/
@PostConstruct @PostConstruct
public void init() { public void init() {
super.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 @Override
protected String getHideButtonId() { protected String getHideButtonId() {
return "hide.distribution.tags"; return "hide.distribution.tags";
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* hasCreateUpdatePermission()
*/
@Override @Override
protected boolean hasCreateUpdatePermission() { protected boolean hasCreateUpdatePermission() {
return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission(); return permChecker.hasCreateDistributionPermission() || permChecker.hasUpdateDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#getTitle(
* )
*/
@Override @Override
protected String getTitle() { protected String getTitle() {
return i18n.get("header.filter.tag", new Object[] {}); 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 @Override
protected void settingsIconClicked(final ClickEvent event) { protected void settingsIconClicked(final ClickEvent event) {
final Window addUpdateWindow = createORUpdateDistributionTagLayout.getWindow(); final Window addUpdateWindow = createORUpdateDistributionTagLayout.getWindow();
UI.getCurrent().addWindow(addUpdateWindow); UI.getCurrent().addWindow(addUpdateWindow);
addUpdateWindow.setModal(true); addUpdateWindow.setModal(true);
addUpdateWindow.setVisible(Boolean.TRUE); addUpdateWindow.setVisible(Boolean.TRUE);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* dropHitsRequired()
*/
@Override @Override
protected boolean dropHitsRequired() { protected boolean dropHitsRequired() {
return true; return true;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* hideFilterButtonLayout()
*/
@Override @Override
protected void hideFilterButtonLayout() { protected void hideFilterButtonLayout() {
managementUIState.setDistTagFilterClosed(true); managementUIState.setDistTagFilterClosed(true);
eventbus.publish(this, ManagementUIEvent.HIDE_DISTRIBUTION_TAG_LAYOUT); eventbus.publish(this, ManagementUIEvent.HIDE_DISTRIBUTION_TAG_LAYOUT);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.filterlayout.AbstractFilterHeader#
* getConfigureFilterButtonId()
*/
@Override @Override
protected String getConfigureFilterButtonId() { protected String getConfigureFilterButtonId() {
return SPUIComponetIdProvider.ADD_DISTRIBUTION_TAG; return SPUIComponetIdProvider.ADD_DISTRIBUTION_TAG;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader#
* isAddTagRequired()
*/
@Override @Override
protected boolean isAddTagRequired() { protected boolean isAddTagRequired() {
return true; return true;

View File

@@ -86,20 +86,13 @@ public class DistributionTagDropEvent implements DropHandler {
private Boolean isNoTagAssigned(final DragAndDropEvent event) { private Boolean isNoTagAssigned(final DragAndDropEvent event) {
final String tagName = ((DragAndDropWrapper) (event.getTargetDetails().getTarget())).getData().toString(); final String tagName = ((DragAndDropWrapper) (event.getTargetDetails().getTarget())).getData().toString();
if (tagName.equals(SPUIDefinitions.DISTRIBUTION_TAG_BUTTON)) { if (tagName.equals(SPUIDefinitions.DISTRIBUTION_TAG_BUTTON)) {
notification.displayValidationError(i18n.get("message.tag.cannot.be.assigned", notification.displayValidationError(
new Object[] { i18n.get("label.no.tag.assigned") })); i18n.get("message.tag.cannot.be.assigned", new Object[] { i18n.get("label.no.tag.assigned") }));
return false; return false;
} }
return true; return true;
} }
/**
* Validate the drop.
*
* @param event
* DragAndDropEvent reference
* @return Boolean
*/
private Boolean validate(final DragAndDropEvent event) { private Boolean validate(final DragAndDropEvent event) {
final Component compsource = event.getTransferable().getSourceComponent(); final Component compsource = event.getTransferable().getSourceComponent();
if (!(compsource instanceof Table)) { if (!(compsource instanceof Table)) {
@@ -116,11 +109,6 @@ public class DistributionTagDropEvent implements DropHandler {
return true; return true;
} }
/**
* validate the update permission.
*
* @return boolean
*/
private boolean checkForDSUpdatePermission() { private boolean checkForDSUpdatePermission() {
if (!permChecker.hasUpdateDistributionPermission()) { if (!permChecker.hasUpdateDistributionPermission()) {
@@ -131,13 +119,6 @@ public class DistributionTagDropEvent implements DropHandler {
return true; return true;
} }
/**
* validate the source tables.
*
* @param source
* table
* @return boolean
*/
private boolean validateIfSourceIsDs(final Table source) { private boolean validateIfSourceIsDs(final Table source) {
if (!source.getId().equals(SPUIComponetIdProvider.DIST_TABLE_ID)) { if (!source.getId().equals(SPUIComponetIdProvider.DIST_TABLE_ID)) {
notification.displayValidationError(i18n.get(SPUILabelDefinitions.ACTION_NOT_ALLOWED)); notification.displayValidationError(i18n.get(SPUILabelDefinitions.ACTION_NOT_ALLOWED));
@@ -146,12 +127,6 @@ public class DistributionTagDropEvent implements DropHandler {
return true; return true;
} }
/**
* Process target Drop event.
*
* @param event
* DragAndDropEvent
*/
private void processDistributionDrop(final DragAndDropEvent event) { private void processDistributionDrop(final DragAndDropEvent event) {
final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails();
@@ -161,7 +136,7 @@ public class DistributionTagDropEvent implements DropHandler {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final Set<DistributionSetIdName> distSelected = (Set<DistributionSetIdName>) source.getValue(); final Set<DistributionSetIdName> distSelected = (Set<DistributionSetIdName>) source.getValue();
final Set<Long> distributionList = new HashSet<Long>(); final Set<Long> distributionList = new HashSet<>();
if (!distSelected.contains(transferable.getData(ITEMID))) { if (!distSelected.contains(transferable.getData(ITEMID))) {
distributionList.add(((DistributionSetIdName) transferable.getData(ITEMID)).getId()); distributionList.add(((DistributionSetIdName) transferable.getData(ITEMID)).getId());
} else { } else {
@@ -172,8 +147,8 @@ public class DistributionTagDropEvent implements DropHandler {
SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS);
final List<String> tagsClickedList = distFilterParameters.getDistSetTags(); final List<String> tagsClickedList = distFilterParameters.getDistSetTags();
final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment( final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList,
distributionList, distTagName); distTagName);
notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n)); notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n));
if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty()) { if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty()) {

View File

@@ -47,12 +47,6 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria {
@Autowired @Autowired
private transient EventBus.SessionEventBus eventBus; private transient EventBus.SessionEventBus eventBus;
/*
* (non-Javadoc)
*
* @see hawkbit.server.ui.common.AbstractAcceptCriteria#analyseDragComponent
* (com.vaadin.event .dd.DragAndDropEvent, com.vaadin.ui.Component)
*/
@Override @Override
protected void analyseDragComponent(final Component compsource) { protected void analyseDragComponent(final Component compsource) {
final String sourceID = getComponentId(compsource); final String sourceID = getComponentId(compsource);
@@ -60,24 +54,11 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria {
eventBus.publish(this, event); eventBus.publish(this, event);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#hideDropHints
* ()
*/
@Override @Override
protected void hideDropHints() { protected void hideDropHints() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#invalidDrop()
*/
@Override @Override
protected void invalidDrop() { protected void invalidDrop() {
uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED);
@@ -94,60 +75,31 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria {
return id; return id;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* getDropHintConfigurations()
*/
@Override @Override
protected Map<String, Object> getDropHintConfigurations() { protected Map<String, Object> getDropHintConfigurations() {
return DROP_HINTS_CONFIGS; return DROP_HINTS_CONFIGS;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* publishDragStartEvent(java.lang.Object)
*/
@Override @Override
protected void publishDragStartEvent(final Object event) { protected void publishDragStartEvent(final Object event) {
eventBus.publish(this, event); eventBus.publish(this, event);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.AbstractAcceptCriteria#
* getDropConfigurations()
*/
@Override @Override
protected Map<String, List<String>> getDropConfigurations() { protected Map<String, List<String>> getDropConfigurations() {
return DROP_CONFIGS; return DROP_CONFIGS;
} }
/**
* @param id
* @return
*/
private boolean isDistributionTagId(final String id) { private boolean isDistributionTagId(final String id) {
return id != null && id.startsWith(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); return id != null && id.startsWith(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS);
} }
/**
* @param id
* @return
*/
private boolean isTargetTagId(final String id) { private boolean isTargetTagId(final String id) {
return id != null && id.startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS); return id != null && id.startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS);
} }
/**
* @return
*/
private static Map<String, List<String>> createDropConfigurations() { private static Map<String, List<String>> createDropConfigurations() {
final Map<String, List<String>> config = new HashMap<String, List<String>>(); final Map<String, List<String>> config = new HashMap<>();
// Delete drop area acceptable components // Delete drop area acceptable components
config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID,
@@ -174,7 +126,7 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria {
} }
private static Map<String, Object> createDropHintConfigurations() { private static Map<String, Object> createDropHintConfigurations() {
final Map<String, Object> config = new HashMap<String, Object>(); final Map<String, Object> config = new HashMap<>();
config.put(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, DragEvent.TARGET_TAG_DRAG); config.put(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, DragEvent.TARGET_TAG_DRAG);
config.put(SPUIComponetIdProvider.TARGET_TABLE_ID, DragEvent.TARGET_DRAG); config.put(SPUIComponetIdProvider.TARGET_TABLE_ID, DragEvent.TARGET_DRAG);
config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG);

View File

@@ -19,7 +19,6 @@ import org.eclipse.hawkbit.repository.TagManagement;
import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetIdName;
import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName;
import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; 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.BulkUploadPopupEvent;
import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent;
import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; 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;
import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent;
import org.eclipse.hawkbit.ui.management.state.ManagementUIState; 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.HawkbitCommonUtil;
import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.I18N;
import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider;
@@ -85,12 +83,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
@Autowired @Autowired
private CountMessageLabel countMessageLabel; private CountMessageLabel countMessageLabel;
/* @Override
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#init()
*/
@PostConstruct @PostConstruct
protected void init() { protected void init() {
super.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 @Override
protected boolean hasDeletePermission() { protected boolean hasDeletePermission() {
return permChecker.hasDeleteDistributionPermission() || permChecker.hasDeleteTargetPermission(); return permChecker.hasDeleteDistributionPermission() || permChecker.hasDeleteTargetPermission();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* hasUpdatePermission()
*/
@Override @Override
protected boolean hasUpdatePermission() { protected boolean hasUpdatePermission() {
return permChecker.hasUpdateTargetPermission() && permChecker.hasReadDistributionPermission(); return permChecker.hasUpdateTargetPermission() && permChecker.hasReadDistributionPermission();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getDeleteAreaLabel()
*/
@Override @Override
protected String getDeleteAreaLabel() { protected String getDeleteAreaLabel() {
return i18n.get("label.components.drop.area"); return i18n.get("label.components.drop.area");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getDeleteAreaId()
*/
@Override @Override
protected String getDeleteAreaId() { protected String getDeleteAreaId() {
return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getDeleteLayoutAcceptCriteria ()
*/
@Override @Override
protected AcceptCriterion getDeleteLayoutAcceptCriteria() { protected AcceptCriterion getDeleteLayoutAcceptCriteria() {
return managementViewAcceptCriteria; return managementViewAcceptCriteria;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* processDroppedComponent(com .vaadin.event.dd.DragAndDropEvent)
*/
@Override @Override
protected void processDroppedComponent(final DragAndDropEvent event) { protected void processDroppedComponent(final DragAndDropEvent event) {
final Component source = event.getTransferable().getSourceComponent(); final Component source = event.getTransferable().getSourceComponent();
@@ -275,61 +226,26 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
return true; return true;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getNoActionsButtonLabel()
*/
@Override @Override
protected String getNoActionsButtonLabel() { protected String getNoActionsButtonLabel() {
return i18n.get("button.no.actions"); return i18n.get("button.no.actions");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getActionsButtonLabel()
*/
@Override @Override
protected String getActionsButtonLabel() { protected String getActionsButtonLabel() {
return i18n.get("button.actions"); return i18n.get("button.actions");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* reloadActionCount()
*/
@Override @Override
protected void restoreActionCount() { protected void restoreActionCount() {
updateActionCount(); updateActionCount();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getUnsavedActionsWindowCaption ()
*/
@Override @Override
protected String getUnsavedActionsWindowCaption() { protected String getUnsavedActionsWindowCaption() {
return i18n.get("caption.save.window"); return i18n.get("caption.save.window");
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* unsavedActionsWindowClosed()
*/
@Override @Override
protected void unsavedActionsWindowClosed() { protected void unsavedActionsWindowClosed() {
final String message = manangementConfirmationWindowLayout.getConsolidatedMessage(); 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 @Override
protected Component getUnsavedActionsWindowContent() { protected Component getUnsavedActionsWindowContent() {
manangementConfirmationWindowLayout.init(); manangementConfirmationWindowLayout.init();
return manangementConfirmationWindowLayout; return manangementConfirmationWindowLayout;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* hasUnsavedActions()
*/
@Override @Override
protected boolean hasUnsavedActions() { protected boolean hasUnsavedActions() {
if (!managementUIState.getDeletedDistributionList().isEmpty() if (!managementUIState.getDeletedDistributionList().isEmpty()
@@ -368,25 +270,11 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
return false; return false;
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* hasCountMessage()
*/
@Override @Override
protected boolean hasCountMessage() { protected boolean hasCountMessage() {
return permChecker.hasTargetReadPermission(); return permChecker.hasTargetReadPermission();
} }
/*
* (non-Javadoc)
*
* @see
* org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout#
* getCountMessageLabel()
*/
@Override @Override
protected Label getCountMessageLabel() { protected Label getCountMessageLabel() {
return countMessageLabel; 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) { private void addInDeleteDistributionList(final Table sourceTable, final TableTransferable transferable) {
final Set<DistributionSetIdName> distSelected = HawkbitCommonUtil.getSelectedDSDetails(sourceTable); final Set<DistributionSetIdName> distSelected = HawkbitCommonUtil.getSelectedDSDetails(sourceTable);
final Set<DistributionSetIdName> distributionIdNameSet = new HashSet<DistributionSetIdName>(); final Set<DistributionSetIdName> distributionIdNameSet = new HashSet<>();
if (!distSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { if (!distSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) {
distributionIdNameSet.add((DistributionSetIdName) transferable.getData(SPUIDefinitions.ITEMID)); distributionIdNameSet.add((DistributionSetIdName) transferable.getData(SPUIDefinitions.ITEMID));
@@ -477,15 +355,6 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
return false; return false;
} }
/**
* Prepare deleted target list.
*
* @param sourceTable
* {@link TargetTable}
* @param transferable
* {@link TableTransferable}
*
*/
private void addInDeleteTargetList(final Table sourceTable, final TableTransferable transferable) { private void addInDeleteTargetList(final Table sourceTable, final TableTransferable transferable) {
final Set<TargetIdName> targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(sourceTable); final Set<TargetIdName> targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(sourceTable);
@@ -521,9 +390,6 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
} }
} }
/**
* Update the software module delete count.
*/
private void updateActionCount() { private void updateActionCount() {
final int count = managementUIState.getDeletedTargetList().size() final int count = managementUIState.getDeletedTargetList().size()
+ managementUIState.getDeletedDistributionList().size() + managementUIState.getAssignedList().size(); + managementUIState.getDeletedDistributionList().size() + managementUIState.getAssignedList().size();
@@ -546,34 +412,16 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout {
return true; return true;
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout#
* hasBulkUploadPermission()
*/
@Override @Override
protected boolean hasBulkUploadPermission() { protected boolean hasBulkUploadPermission() {
return permChecker.hasCreateTargetPermission(); return permChecker.hasCreateTargetPermission();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout#
* showBulkUploadWindow()
*/
@Override @Override
protected void showBulkUploadWindow() { protected void showBulkUploadWindow() {
eventBus.publish(this, BulkUploadPopupEvent.MAXIMIMIZED); eventBus.publish(this, BulkUploadPopupEvent.MAXIMIMIZED);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout#
* restoreBulkUploadStatusCount()
*/
@Override @Override
protected void restoreBulkUploadStatusCount() { protected void restoreBulkUploadStatusCount() {
final Long failedCount = managementUIState.getTargetTableFilters().getBulkUpload().getFailedUploadCount(); final Long failedCount = managementUIState.getTargetTableFilters().getBulkUpload().getFailedUploadCount();

View File

@@ -107,32 +107,15 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin
super.inittialize(); super.inittialize();
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.confirmwindow.layout.
* AbstractConfirmationWindowLayout# getConfimrationTabs()
*/
@Override @Override
protected Map<String, ConfirmationTab> getConfimrationTabs() { protected Map<String, ConfirmationTab> getConfimrationTabs() {
final Map<String, ConfirmationTab> tabs = new HashMap<String, ConfirmationTab>(); final Map<String, ConfirmationTab> tabs = new HashMap<>();
/**
* create tab for deleted distribution.
*/
/* Create tab for SW Module Type delete */
if (!managementUIState.getDeletedDistributionList().isEmpty()) { if (!managementUIState.getDeletedDistributionList().isEmpty()) {
tabs.put(i18n.get("caption.delete.dist.accordion.tab"), createDeletedDistributionTab()); tabs.put(i18n.get("caption.delete.dist.accordion.tab"), createDeletedDistributionTab());
} }
/**
* create tab for deleted target.
*/
if (!managementUIState.getDeletedTargetList().isEmpty()) { if (!managementUIState.getDeletedTargetList().isEmpty()) {
tabs.put(i18n.get("caption.delete.target.accordion.tab"), createDeletedTargetTab()); tabs.put(i18n.get("caption.delete.target.accordion.tab"), createDeletedTargetTab());
} }
/**
* create tab for assignment.
*/
if (!managementUIState.getAssignedList().isEmpty()) { if (!managementUIState.getAssignedList().isEmpty()) {
tabs.put(i18n.get("caption.assign.dist.accordion.tab"), createAssignmentTab()); 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) { private void saveAllAssignments(final ConfirmationTab tab) {
final Set<TargetIdName> itemIds = managementUIState.getAssignedList().keySet(); final Set<TargetIdName> itemIds = managementUIState.getAssignedList().keySet();
Long distId; Long distId;
List<TargetIdName> targetIdSetList = null; List<TargetIdName> targetIdSetList;
List<TargetIdName> tempIdList = null; List<TargetIdName> tempIdList;
final ActionType actionType = ((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout final ActionType actionType = ((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout
.getActionTypeOptionGroup().getValue()).getActionType(); .getActionTypeOptionGroup().getValue()).getActionType();
final long forcedTimeStamp = (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout final long forcedTimeStamp = (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout
@@ -205,7 +188,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin
? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime()
: Action.NO_FORCE_TIME; : Action.NO_FORCE_TIME;
final Map<Long, ArrayList<TargetIdName>> saveAssignedList = new HashMap<Long, ArrayList<TargetIdName>>(); final Map<Long, ArrayList<TargetIdName>> saveAssignedList = new HashMap<>();
int successAssignmentCount = 0; int successAssignmentCount = 0;
int duplicateAssignmentCount = 0; int duplicateAssignmentCount = 0;
@@ -216,7 +199,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin
if (saveAssignedList.containsKey(distId)) { if (saveAssignedList.containsKey(distId)) {
targetIdSetList = saveAssignedList.get(distId); targetIdSetList = saveAssignedList.get(distId);
} else { } else {
targetIdSetList = new ArrayList<TargetIdName>(); targetIdSetList = new ArrayList<>();
} }
targetIdSetList.add(itemId); targetIdSetList.add(itemId);
saveAssignedList.put(distId, (ArrayList<TargetIdName>) targetIdSetList); saveAssignedList.put(distId, (ArrayList<TargetIdName>) targetIdSetList);
@@ -275,15 +258,13 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin
} }
private String getAssigmentSuccessMessage(final int assignedCount) { 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 }); + i18n.get("message.target.assignment", new Object[] { assignedCount });
return assignment;
} }
private String getDuplicateAssignmentMessage(final int alreadyAssignedCount) { 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 }); + i18n.get("message.target.alreadyAssigned", new Object[] { alreadyAssignedCount });
return alreadyAssigned;
} }
private void discardAllAssignments(final ConfirmationTab tab) { private void discardAllAssignments(final ConfirmationTab tab) {
@@ -456,7 +437,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin
} }
private void deleteAllDistributions(final ConfirmationTab tab) { private void deleteAllDistributions(final ConfirmationTab tab) {
final Set<Long> deletedIds = new HashSet<Long>(); final Set<Long> deletedIds = new HashSet<>();
managementUIState.getDeletedDistributionList().forEach(distIdName -> deletedIds.add(distIdName.getId())); managementUIState.getDeletedDistributionList().forEach(distIdName -> deletedIds.add(distIdName.getId()));
distributionSetManagement.deleteDistributionSet(deletedIds.toArray(new Long[deletedIds.size()])); distributionSetManagement.deleteDistributionSet(deletedIds.toArray(new Long[deletedIds.size()]));
addToConsolitatedMsg(FontAwesome.TRASH_O.getHtml() + SPUILabelDefinitions.HTML_SPACE addToConsolitatedMsg(FontAwesome.TRASH_O.getHtml() + SPUILabelDefinitions.HTML_SPACE
@@ -516,7 +497,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin
final IndexedContainer contactContainer = new IndexedContainer(); final IndexedContainer contactContainer = new IndexedContainer();
contactContainer.addContainerProperty(TARGET_ID, String.class, ""); contactContainer.addContainerProperty(TARGET_ID, String.class, "");
contactContainer.addContainerProperty(TARGET_NAME, String.class, ""); contactContainer.addContainerProperty(TARGET_NAME, String.class, "");
Item item = null; Item item;
for (final TargetIdName targteId : managementUIState.getDeletedTargetList()) { for (final TargetIdName targteId : managementUIState.getDeletedTargetList()) {
item = contactContainer.addItem(targteId); item = contactContainer.addItem(targteId);
item.getItemProperty(TARGET_ID).setValue(targteId.getControllerId()); item.getItemProperty(TARGET_ID).setValue(targteId.getControllerId());

View File

@@ -33,9 +33,9 @@ public class DistributionTableFilters implements Serializable {
private String pinnedTargetId; private String pinnedTargetId;
private final List<String> distSetTags = new ArrayList<String>(); private final List<String> distSetTags = new ArrayList<>();
private List<String> clickedDistSetTags = new ArrayList<String>(); private List<String> clickedDistSetTags = new ArrayList<>();
private Boolean noTagSelected = Boolean.FALSE; private Boolean noTagSelected = Boolean.FALSE;

View File

@@ -30,9 +30,9 @@ public class TargetFilterParameters implements Serializable {
private String searchText; private String searchText;
private final List<TargetUpdateStatus> status = new ArrayList<TargetUpdateStatus>(); private final List<TargetUpdateStatus> status = new ArrayList<>();
private List<String> targetTags = new ArrayList<String>(); private List<String> targetTags = new ArrayList<>();
private Long distributionSetId; private Long distributionSetId;

Some files were not shown because too many files have changed in this diff Show More