diff --git a/3rd-dependencies/listDeps.sh b/3rd-dependencies/listDeps.sh old mode 100644 new mode 100755 diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index 69ed4fd4a..9c4c43ad2 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -118,6 +118,16 @@ public class DeviceSimulatorUpdater { } private static final class DeviceSimulatorUpdateThread implements Runnable { + /** + * + */ + private static final String BUT_GOT_LOG_MESSAGE = " but got: "; + + /** + * + */ + private static final String DOWNLOAD_LOG_MESSAGE = "Download "; + private static final int MINIMUM_TOKENLENGTH_FOR_HINT = 6; private static final Random rndSleep = new SecureRandom(); @@ -187,7 +197,7 @@ public class DeviceSimulatorUpdater { return result; } - private boolean isErrorResponse(final UpdateStatus status) { + private static boolean isErrorResponse(final UpdateStatus status) { if (status == null) { return false; } @@ -212,60 +222,73 @@ public class DeviceSimulatorUpdater { LOGGER.debug("Downloading {} with token {}, expected sha1 hash {} and size {}", url, hideTokenDetails(targetToken), sha1Hash, size); - long overallread = 0; try { - final CloseableHttpClient httpclient = createHttpClientThatAcceptsAllServerCerts(); - final HttpGet request = new HttpGet(url); - request.addHeader(HttpHeaders.AUTHORIZATION, "TargetToken " + targetToken); - - final String sha1HashResult; - try (final CloseableHttpResponse response = httpclient.execute(request)) { - - if (response.getStatusLine().getStatusCode() != HttpStatus.OK.value()) { - final String message = wrongStatusCode(url, response); - return new UpdateStatus(ResponseStatus.ERROR, message); - } - - if (response.getEntity().getContentLength() != size) { - final String message = wrongContentLength(url, size, response); - return new UpdateStatus(ResponseStatus.ERROR, message); - } - - // Exception squid:S2070 - not used for hashing sensitive - // data - @SuppressWarnings("squid:S2070") - final MessageDigest md = MessageDigest.getInstance("SHA-1"); - - try (final BufferedOutputStream bdos = new BufferedOutputStream( - new DigestOutputStream(ByteStreams.nullOutputStream(), md))) { - try (BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent())) { - overallread = ByteStreams.copy(bis, bdos); - } - } - - if (overallread != size) { - final String message = incompleteRead(url, size, overallread); - return new UpdateStatus(ResponseStatus.ERROR, message); - } - - sha1HashResult = BaseEncoding.base16().lowerCase().encode(md.digest()); - } - - if (!sha1Hash.equalsIgnoreCase(sha1HashResult)) { - final String message = wrongHash(url, sha1Hash, overallread, sha1HashResult); - return new UpdateStatus(ResponseStatus.ERROR, message); - } - + return readAndCheckDownloadUrl(url, targetToken, sha1Hash, size); } catch (IOException | KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) { LOGGER.error("Failed to download" + url, e); return new UpdateStatus(ResponseStatus.ERROR, "Failed to download " + url + ": " + e.getMessage()); } + } + + private static UpdateStatus readAndCheckDownloadUrl(final String url, final String targetToken, + final String sha1Hash, final long size) + throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException { + long overallread; + final CloseableHttpClient httpclient = createHttpClientThatAcceptsAllServerCerts(); + final HttpGet request = new HttpGet(url); + request.addHeader(HttpHeaders.AUTHORIZATION, "TargetToken " + targetToken); + + final String sha1HashResult; + try (final CloseableHttpResponse response = httpclient.execute(request)) { + + if (response.getStatusLine().getStatusCode() != HttpStatus.OK.value()) { + final String message = wrongStatusCode(url, response); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + + if (response.getEntity().getContentLength() != size) { + final String message = wrongContentLength(url, size, response); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + + // Exception squid:S2070 - not used for hashing sensitive + // data + @SuppressWarnings("squid:S2070") + final MessageDigest md = MessageDigest.getInstance("SHA-1"); + + overallread = getOverallRead(response, md); + + if (overallread != size) { + final String message = incompleteRead(url, size, overallread); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + + sha1HashResult = BaseEncoding.base16().lowerCase().encode(md.digest()); + } + + if (!sha1Hash.equalsIgnoreCase(sha1HashResult)) { + final String message = wrongHash(url, sha1Hash, overallread, sha1HashResult); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + final String message = "Downloaded " + url + " (" + overallread + " bytes)"; LOGGER.debug(message); return new UpdateStatus(ResponseStatus.SUCCESSFUL, message); } + private static long getOverallRead(final CloseableHttpResponse response, final MessageDigest md) + throws IOException { + long overallread; + try (final BufferedOutputStream bdos = new BufferedOutputStream( + new DigestOutputStream(ByteStreams.nullOutputStream(), md))) { + try (BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent())) { + overallread = ByteStreams.copy(bis, bdos); + } + } + return overallread; + } + private static String hideTokenDetails(final String targetToken) { if (targetToken == null) { return ""; @@ -285,29 +308,30 @@ public class DeviceSimulatorUpdater { private static String wrongHash(final String url, final String sha1Hash, final long overallread, final String sha1HashResult) { - final String message = "Download " + url + " failed with SHA1 hash missmatch (Expected: " + sha1Hash - + " but got: " + sha1HashResult + ") (" + overallread + " bytes)"; + final String message = DOWNLOAD_LOG_MESSAGE + url + " failed with SHA1 hash missmatch (Expected: " + + sha1Hash + BUT_GOT_LOG_MESSAGE + sha1HashResult + ") (" + overallread + " bytes)"; LOGGER.error(message); return message; } private static String incompleteRead(final String url, final long size, final long overallread) { - final String message = "Download " + url + " is incomplete (Expected: " + size + " but got: " + overallread - + ")"; + final String message = DOWNLOAD_LOG_MESSAGE + url + " is incomplete (Expected: " + size + + BUT_GOT_LOG_MESSAGE + overallread + ")"; LOGGER.error(message); return message; } private static String wrongContentLength(final String url, final long size, final CloseableHttpResponse response) { - final String message = "Download " + url + " has wrong content length (Expected: " + size + " but got: " - + response.getEntity().getContentLength() + ")"; + final String message = DOWNLOAD_LOG_MESSAGE + url + " has wrong content length (Expected: " + size + + BUT_GOT_LOG_MESSAGE + response.getEntity().getContentLength() + ")"; LOGGER.error(message); return message; } private static String wrongStatusCode(final String url, final CloseableHttpResponse response) { - final String message = "Download " + url + " failed (" + response.getStatusLine().getStatusCode() + ")"; + final String message = DOWNLOAD_LOG_MESSAGE + url + " failed (" + response.getStatusLine().getStatusCode() + + ")"; LOGGER.error(message); return message; } @@ -339,4 +363,5 @@ public class DeviceSimulatorUpdater { */ void updateFinished(AbstractSimulatedDevice device, final Long actionId); } + } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java index f2c0e7fcb..d7f81be4e 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.simulator.amqp; +import java.nio.charset.StandardCharsets; import java.util.UUID; import org.slf4j.Logger; @@ -58,7 +59,7 @@ public abstract class SenderService extends MessageService { } message.getMessageProperties().getHeaders().remove(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME); final String correlationId = UUID.randomUUID().toString(); - message.getMessageProperties().setCorrelationId(correlationId.getBytes()); + message.getMessageProperties().setCorrelationId(correlationId.getBytes(StandardCharsets.UTF_8)); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Sending message {} to exchange {} with correlationId {}", message, address, correlationId); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java index 4f2981be1..7d55fb375 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java @@ -67,8 +67,6 @@ public class SpReceiverService extends ReceiverService { * the incoming message * @param type * the action type - * @param contentType - * the content type in message header * @param thingId * the thing id in message header */ @@ -82,14 +80,11 @@ public class SpReceiverService extends ReceiverService { private void delegateMessage(final Message message, final String type, final String thingId) { final MessageType messageType = MessageType.valueOf(type); - switch (messageType) { - case EVENT: + if (MessageType.EVENT.equals(messageType)) { handleEventMessage(message, thingId); - break; - default: - LOGGER.info("No valid message type property."); - break; + return; } + LOGGER.info("No valid message type property."); } private void handleEventMessage(final Message message, final String thingId) { diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java index 272531407..b50098829 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java @@ -33,9 +33,10 @@ import com.vaadin.ui.Window; * Popup dialog window for setting the values of generating the simulated * devices, e.g. the amount. * - * @author Michael Hirsch * */ +// Vaadin Inheritance +@SuppressWarnings("squid:MaximumInheritanceDepth") public class GenerateDialog extends Window { private static final long serialVersionUID = 1L; @@ -49,8 +50,8 @@ public class GenerateDialog extends Window { private final TextField pollDelayTextField; private final TextField pollUrlTextField; private final TextField gatewayTokenTextField; - private final OptionGroup protocolGroup; - private final Button buttonOk; + private OptionGroup protocolGroup; + private Button buttonOk; /** * Creates a new pop window for setting the configuration of simulating @@ -87,8 +88,8 @@ public class GenerateDialog extends Window { gatewayTokenTextField.setColumns(50); gatewayTokenTextField.setVisible(false); - protocolGroup = createProtocolGroup(); - buttonOk = createOkButton(callback); + createProtocolGroup(); + createOkButton(callback); namePrefixTextField.addValueChangeListener(event -> checkValid()); amountTextField.addValueChangeListener(event -> checkValid()); @@ -181,9 +182,9 @@ public class GenerateDialog extends Window { final URL basePollURL, final String gatewayToken, final Protocol protocol); } - private OptionGroup createProtocolGroup() { + private void createProtocolGroup() { - final OptionGroup protocolGroup = new OptionGroup("Simulated Device Protocol"); + this.protocolGroup = new OptionGroup("Simulated Device Protocol"); protocolGroup.addItem(Protocol.DMF_AMQP); protocolGroup.addItem(Protocol.DDI_HTTP); protocolGroup.setItemCaption(Protocol.DMF_AMQP, "Device Management Federation API (AMQP push)"); @@ -195,12 +196,11 @@ public class GenerateDialog extends Window { pollUrlTextField.setVisible(directDeviceOptionSelected); gatewayTokenTextField.setVisible(directDeviceOptionSelected); }); - return protocolGroup; } - private Button createOkButton(final GenerateDialogCallback callback) { + private void createOkButton(final GenerateDialogCallback callback) { - final Button buttonOk = new Button("generate"); + this.buttonOk = new Button("generate"); buttonOk.setImmediate(true); buttonOk.setIcon(FontAwesome.GEARS); buttonOk.addClickListener(event -> { @@ -210,14 +210,11 @@ public class GenerateDialog extends Window { Integer.valueOf(pollDelayTextField.getValue().replace(".", "")), new URL(pollUrlTextField.getValue()), gatewayTokenTextField.getValue(), (Protocol) protocolGroup.getValue()); - } catch (final NumberFormatException e) { - LOGGER.info(e.getMessage(), e); - } catch (final MalformedURLException e) { + } catch (final NumberFormatException | MalformedURLException e) { LOGGER.info(e.getMessage(), e); } GenerateDialog.this.close(); }); - return buttonOk; } private TextField createRequiredTextfield(final String caption, final String value, final Resource icon, @@ -226,7 +223,7 @@ public class GenerateDialog extends Window { return addTextFieldValues(textField, icon, validator); } - private TextField createRequiredTextfield(final String caption, final Property dataSource, final Resource icon, + private TextField createRequiredTextfield(final String caption, final Property dataSource, final Resource icon, final Validator validator) { final TextField textField = new TextField(caption, dataSource); return addTextFieldValues(textField, icon, validator); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java index 9405edd2b..686945407 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java @@ -57,6 +57,11 @@ import com.vaadin.ui.renderers.ProgressBarRenderer; @SuppressWarnings("squid:MaximumInheritanceDepth") public class SimulatorView extends VerticalLayout implements View { + /** + * + */ + private static final String HTML_SPAN = ";"; + private static final String NEXT_POLL_COUNTER_SEC_COL = "nextPollCounterSec"; private static final String RESPONSE_STATUS_COL = "updateStatus"; @@ -266,89 +271,90 @@ public class SimulatorView extends VerticalLayout implements View { })); } - private Converter createProtocolConverter() { - - return new Converter() { - - private static final long serialVersionUID = 1L; - - @Override - public Protocol convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final Protocol value, final Class targetType, - final Locale locale) { - switch (value) { - case DDI_HTTP: - return "DDI API (http)"; - case DMF_AMQP: - return "DMF API (amqp)"; - default: - return "unknown"; - } - } - - @Override - public Class getModelType() { - return Protocol.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - }; - + private ProtocolConverter createProtocolConverter() { + return new ProtocolConverter(); } - private Converter createStatusConverter() { - return new Converter() { - private static final long serialVersionUID = 1L; + private StatusConverter createStatusConverter() { + return new StatusConverter(); + } - @Override - public Status convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } + public static final class ProtocolConverter implements Converter { + private static final long serialVersionUID = 1L; - @Override - public String convertToPresentation(final Status value, final Class targetType, - final Locale locale) { - switch (value) { - case UNKNWON: - return "&#x" - + Integer.toHexString(FontAwesome.QUESTION_CIRCLE.getCodepoint()) + ";"; - case PEDNING: - return "&#x" + Integer.toHexString(FontAwesome.REFRESH.getCodepoint()) - + ";"; - case FINISH: - return "&#x" - + Integer.toHexString(FontAwesome.CHECK_CIRCLE.getCodepoint()) + ";"; - case ERROR: - return "&#x" - + Integer.toHexString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()) + ";"; - default: - throw new IllegalStateException("unknown value"); - } - } + @Override + public Protocol convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } - @Override - public Class getModelType() { - return Status.class; + @Override + public String convertToPresentation(final Protocol value, final Class targetType, + final Locale locale) { + switch (value) { + case DDI_HTTP: + return "DDI API (http)"; + case DMF_AMQP: + return "DMF API (amqp)"; + default: + return "unknown"; } + } - @Override - public Class getPresentationType() { - return String.class; + @Override + public Class getModelType() { + return Protocol.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + private static final class StatusConverter implements Converter { + private static final long serialVersionUID = 1L; + + @Override + public Status convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final Status value, final Class targetType, + final Locale locale) { + switch (value) { + case UNKNWON: + return "&#x" + Integer.toHexString(FontAwesome.QUESTION_CIRCLE.getCodepoint()) + + HTML_SPAN; + case PEDNING: + return "&#x" + Integer.toHexString(FontAwesome.REFRESH.getCodepoint()) + + HTML_SPAN; + case FINISH: + return "&#x" + Integer.toHexString(FontAwesome.CHECK_CIRCLE.getCodepoint()) + + HTML_SPAN; + case ERROR: + return "&#x" + + Integer.toHexString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()) + HTML_SPAN; + default: + throw new IllegalStateException("unknown value"); } - }; + } + + @Override + public Class getModelType() { + return Status.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } } } diff --git a/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/FreePortFileWriter.java b/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/FreePortFileWriter.java index 257c85076..b0bcc5b6e 100644 --- a/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/FreePortFileWriter.java +++ b/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/FreePortFileWriter.java @@ -12,9 +12,11 @@ import java.io.File; import java.net.InetSocketAddress; import java.net.ServerSocket; +import org.apache.commons.io.IOUtils; + /** * - * + * Look for a free port. */ public class FreePortFileWriter { @@ -24,7 +26,9 @@ public class FreePortFileWriter { /** * @param from + * port range from (start point) * @param to + * port range to (end point) */ public FreePortFileWriter(final int from, final int to, final String filePortPath) { this.from = from; @@ -46,29 +50,28 @@ public class FreePortFileWriter { } boolean isFree(final int port) { + ServerSocket sock = null; try { final File portFile = new File(filePortPath + File.separator + port + ".port"); portFile.getParentFile().mkdirs(); if (portFile.exists()) { return false; - } else { - boolean isFree = false; - final ServerSocket sock = new ServerSocket(); - sock.setReuseAddress(true); - sock.bind(new InetSocketAddress(port)); - if (portFile.createNewFile()) { - portFile.deleteOnExit(); - isFree = true; - } - sock.close(); - // is free: - return isFree; - // We rely on an exception thrown to determine availability or - // not availability. } - } catch (final Exception e) { - // not free. + boolean isFree = false; + sock = new ServerSocket(); + sock.setReuseAddress(true); + sock.bind(new InetSocketAddress(port)); + if (portFile.createNewFile()) { + portFile.deleteOnExit(); + isFree = true; + } + return isFree; + // We rely on an exception thrown to determine availability or + // not availability and don't want to log the exception. + } catch (@SuppressWarnings({ "squid:S2221", "squid:S1166" }) final Exception e) { return false; + } finally { + IOUtils.closeQuietly(sock); } } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java index d4cc32825..c0cbabb08 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java @@ -23,7 +23,7 @@ import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.EventBus; /** - * + * Auto configuration for the event bus. * */ @Configuration diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java index 7e2b780b4..eebfac6b0 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java @@ -21,7 +21,7 @@ import org.springframework.scheduling.annotation.EnableAsync; /** * - * + * Auto config fot the exception handler. */ @Configuration @EnableAsync diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 30ce9d808..66beeec5a 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -120,6 +120,8 @@ public class SecurityManagedConfiguration { */ @Bean @ConditionalOnMissingBean + // Exception squid:S00112 - Is aspectJ proxy + @SuppressWarnings({ "squid:S00112" }) public UserAuthenticationFilter userAuthenticationFilter() throws Exception { return new UserAuthenticationFilterBasicAuth(configuration.getAuthenticationManager()); } diff --git a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java index fc3364d81..d9f759da3 100644 --- a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java +++ b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/RedisConfiguration.java @@ -56,6 +56,10 @@ public class RedisConfiguration { return new TenantAwareCacheManager(directCacheManager(), tenantAware); } + /** + * + * @return bean for the direct cache manager. + */ @Bean(name = "directCacheManager") public CacheManager directCacheManager() { return new RedisCacheManager(redisTemplate()); diff --git a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java index 8749340f0..973dcb6d6 100644 --- a/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java +++ b/hawkbit-cache-redis/src/main/java/org/eclipse/hawkbit/cache/eventbus/EventDistributor.java @@ -28,7 +28,7 @@ import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; /** - * + * The distributor for events. * */ @EventSubscriber @@ -100,11 +100,11 @@ public class EventDistributor { return topics; } - private void logDistributingEvent(final Event event, final String channel) { + private static void logDistributingEvent(final Event event, final String channel) { LOGGER.trace("distributing event {} from node {} to topic {}", event, NODE_ID, channel); } - private void logNotDistributingEvent(final Event event, final String channel) { + private static void logNotDistributingEvent(final Event event, final String channel) { LOGGER.debug("no redis template configured, event {} will not be distributed to channel {} from node {}", event, channel, NODE_ID); } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java index c589e40e0..490b2d102 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java @@ -16,9 +16,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties; */ @ConfigurationProperties("hawkbit.artifact.url") public class ArtifactUrlHandlerProperties { - private static final String DEFAULT_IP_LOCALHOST = "127.0.0.1"; - private static final String DEFAULT_PORT = "8080"; - private static final String LOCALHOST = "localhost"; private final Http http = new Http(); private final Https https = new Https(); @@ -55,227 +52,45 @@ public class ArtifactUrlHandlerProperties { } } - /** - * Interface for declaring common properties through all supported protocols - * pattern. - */ - public interface ProtocolProperties { - /** - * @return the hostname value to resolve in the pattern. - */ - String getHostname(); - - /** - * @return the IP address value to resolve in the pattern. - */ - String getIp(); - - /** - * @return the port value to resolve in the pattern. - */ - String getPort(); - - /** - * @return the pattern to build the URL. - */ - String getPattern(); - - /** - * @return true if the {@link ProtocolProperties} is - * enabled. - */ - boolean isEnabled(); - } - /** * Object to hold the properties for the HTTP protocol. */ - public static class Http implements ProtocolProperties { - private String hostname = LOCALHOST; - private String ip = DEFAULT_IP_LOCALHOST; - private String port = DEFAULT_PORT; - /** - * An ant-URL pattern with placeholder to build the URL on. The URL can - * have specific artifact placeholder. - */ - private String pattern = "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"; + public static class Http extends DefaultProtocolProperties { /** - * Enables HTTP URI generation in DDI and DMF. + * Constructor. */ - private boolean enabled = true; - - @Override - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - @Override - public String getHostname() { - return hostname; - } - - public void setHostname(final String hostname) { - this.hostname = hostname; - } - - @Override - public String getIp() { - return ip; - } - - public void setIp(final String ip) { - this.ip = ip; - } - - @Override - public String getPattern() { - return pattern; - } - - public void setPattern(final String urlPattern) { - this.pattern = urlPattern; - } - - @Override - public String getPort() { - return port; - } - - public void setPort(final String port) { - this.port = port; + public Http() { + setPattern( + "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"); } } /** * Object to hold the properties for the HTTP protocol. */ - public static class Https implements ProtocolProperties { - private String hostname = LOCALHOST; - private String ip = DEFAULT_IP_LOCALHOST; - private String port = DEFAULT_PORT; - /** - * An ant-URL pattern with placeholder to build the URL on. The URL can - * have specific artifact placeholder. - */ - private String pattern = "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"; + public static class Https extends DefaultProtocolProperties { /** - * Enables HTTPS URI generation in DDI and DMF. + * Constructor. */ - private boolean enabled = true; - - @Override - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - @Override - public String getHostname() { - return hostname; - } - - public void setHostname(final String hostname) { - this.hostname = hostname; - } - - @Override - public String getIp() { - return ip; - } - - public void setIp(final String ip) { - this.ip = ip; - } - - @Override - public String getPattern() { - return pattern; - } - - public void setPattern(final String urlPattern) { - this.pattern = urlPattern; - } - - @Override - public String getPort() { - return port; - } - - public void setPort(final String port) { - this.port = port; + public Https() { + setPattern( + "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"); } } /** * Object to hold the properties for the HTTP protocol. */ - public static class Coap implements ProtocolProperties { - private String hostname = LOCALHOST; - private String ip = DEFAULT_IP_LOCALHOST; - private String port = "5683"; - /** - * An ant-URL pattern with placeholder to build the URL on. The URL can - * have specific artifact placeholder. - */ - private String pattern = "{protocol}://{ip}:{port}/fw/{tenant}/{targetId}/sha1/{artifactSHA1}"; + public static class Coap extends DefaultProtocolProperties { /** - * Enables CoAP URI generation in DMF. + * Constructor. */ - private boolean enabled = true; - - @Override - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - @Override - public String getHostname() { - return hostname; - } - - public void setHostname(final String hostname) { - this.hostname = hostname; - } - - @Override - public String getIp() { - return ip; - } - - public void setIp(final String ip) { - this.ip = ip; - } - - @Override - public String getPattern() { - return pattern; - } - - public void setPattern(final String urlPattern) { - this.pattern = urlPattern; - } - - @Override - public String getPort() { - return port; - } - - public void setPort(final String port) { - this.port = port; + public Coap() { + setPattern("{protocol}://{ip}:{port}/fw/{tenant}/{targetId}/sha1/{artifactSHA1}"); + setPort("5683"); } } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/DefaultProtocolProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/DefaultProtocolProperties.java new file mode 100644 index 000000000..07eac8db1 --- /dev/null +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/DefaultProtocolProperties.java @@ -0,0 +1,79 @@ +/** + * 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.api; + +/** + * Object to hold the properties for the base protocols. + */ +public class DefaultProtocolProperties implements ProtocolProperties { + // The IP address is not hardcoded. It's the default value, if the IP + // address is not configured. + @SuppressWarnings("squid:S1313") + private static final String DEFAULT_IP_LOCALHOST = "127.0.0.1"; + private static final String LOCALHOST = "localhost"; + + private String hostname = LOCALHOST; + private String ip = DEFAULT_IP_LOCALHOST; + private String port = ""; + /** + * An ant-URL pattern with placeholder to build the URL on. The URL can have + * specific artifact placeholder. + */ + private String pattern; + + /** + * Enables protocol. + */ + private boolean enabled = true; + + @Override + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + + @Override + public String getHostname() { + return hostname; + } + + public void setHostname(final String hostname) { + this.hostname = hostname; + } + + @Override + public String getIp() { + return ip; + } + + public void setIp(final String ip) { + this.ip = ip; + } + + @Override + public String getPattern() { + return pattern; + } + + public void setPattern(final String urlPattern) { + this.pattern = urlPattern; + } + + @Override + public String getPort() { + return port; + } + + public void setPort(final String port) { + this.port = port; + } +} diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java index d43d660ca..53f6492d1 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java @@ -13,7 +13,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import org.eclipse.hawkbit.api.ArtifactUrlHandlerProperties.ProtocolProperties; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ProtocolProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ProtocolProperties.java new file mode 100644 index 000000000..57f376c4e --- /dev/null +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ProtocolProperties.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.api; + +/** + * Interface for declaring common properties through all supported protocols + * pattern. + */ +public interface ProtocolProperties { + /** + * @return the hostname value to resolve in the pattern. + */ + String getHostname(); + + /** + * @return the IP address value to resolve in the pattern. + */ + String getIp(); + + /** + * @return the port value to resolve in the pattern. + */ + String getPort(); + + /** + * @return the pattern to build the URL. + */ + String getPattern(); + + /** + * @return true if the {@link ProtocolProperties} is enabled. + */ + boolean isEnabled(); +} diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenancyCacheManager.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenancyCacheManager.java index 5b58ea53e..9338bcbe7 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenancyCacheManager.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenancyCacheManager.java @@ -13,7 +13,7 @@ import org.springframework.cache.CacheManager; /** * - * + * A cache interface which handles multi tenancy. */ public interface TenancyCacheManager extends CacheManager { diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java index 435f1b2e1..055d9bf6c 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/cache/TenantAwareCacheManager.java @@ -67,7 +67,7 @@ public class TenantAwareCacheManager implements TenancyCacheManager { public Collection getCacheNames() { String currentTenant = tenantAware.getCurrentTenant(); if (currentTenant == null) { - return null; + return Collections.emptyList(); } currentTenant = currentTenant.toUpperCase(); diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/CancelTargetAssignmentEvent.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/CancelTargetAssignmentEvent.java index da93cc1a3..78c718f36 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/CancelTargetAssignmentEvent.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/CancelTargetAssignmentEvent.java @@ -17,7 +17,7 @@ import java.net.URI; * * */ -public class CancelTargetAssignmentEvent extends AbstractEvent { +public class CancelTargetAssignmentEvent extends DefaultEvent { private final String controllerId; private final Long actionId; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEvent.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DefaultEvent.java similarity index 87% rename from hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEvent.java rename to hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DefaultEvent.java index 498418169..1874fc01f 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEvent.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DefaultEvent.java @@ -12,11 +12,10 @@ package org.eclipse.hawkbit.eventbus.event; * Abstract event definition class which holds the necessary revsion and tenant * information which every event needs. * - * @author Michael Hirsch * @see AbstractDistributedEvent for events which should be distributed to other * cluster nodes */ -public class AbstractEvent implements Event { +public class DefaultEvent implements Event { private final long revision; private final String tenant; @@ -27,7 +26,7 @@ public class AbstractEvent implements Event { * @param tenant * the tenant of the event */ - protected AbstractEvent(final long revision, final String tenant) { + protected DefaultEvent(final long revision, final String tenant) { this.revision = revision; this.tenant = tenant; } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetDeletedEvent.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetDeletedEvent.java new file mode 100644 index 000000000..048274abc --- /dev/null +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetDeletedEvent.java @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.eventbus.event; + +/** + * The event when a target is deleted. + */ +public class TargetDeletedEvent extends AbstractDistributedEvent { + + private static final long serialVersionUID = 1L; + private final long targetId; + + /** + * @param tenant + * the tenant for this event + * @param targetId + * the ID of the target which has been deleted + */ + public TargetDeletedEvent(final String tenant, final long targetId) { + super(-1, tenant); + this.targetId = targetId; + } + + /** + * @return the targetId + */ + public long getTargetId() { + return targetId; + } + +} diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerRtException.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/AbstractServerRtException.java similarity index 79% rename from hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerRtException.java rename to hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/AbstractServerRtException.java index ba691bb5f..cb695d2f7 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerRtException.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/AbstractServerRtException.java @@ -15,8 +15,7 @@ package org.eclipse.hawkbit.exception; * Generic Custom Exception to wrap the Runtime and checked exception * */ - -public abstract class SpServerRtException extends RuntimeException { +public abstract class AbstractServerRtException extends RuntimeException { private static final long serialVersionUID = 1L; @@ -28,7 +27,7 @@ public abstract class SpServerRtException extends RuntimeException { * @param error * detail */ - public SpServerRtException(final SpServerError error) { + public AbstractServerRtException(final SpServerError error) { super(error.getMessage()); this.error = error; } @@ -41,7 +40,7 @@ public abstract class SpServerRtException extends RuntimeException { * @param error * detail */ - public SpServerRtException(final String message, final SpServerError error) { + public AbstractServerRtException(final String message, final SpServerError error) { super(message); this.error = error; } @@ -56,7 +55,7 @@ public abstract class SpServerRtException extends RuntimeException { * @param cause * of the exception */ - public SpServerRtException(final String message, final SpServerError error, final Throwable cause) { + public AbstractServerRtException(final String message, final SpServerError error, final Throwable cause) { super(message, cause); this.error = error; } @@ -69,7 +68,7 @@ public abstract class SpServerRtException extends RuntimeException { * @param cause * of the exception */ - public SpServerRtException(final SpServerError error, final Throwable cause) { + public AbstractServerRtException(final SpServerError error, final Throwable cause) { super(error.getMessage(), cause); this.error = error; } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/GenericSpServerException.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/GenericSpServerException.java index f0a3f4d1f..4ac02e081 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/GenericSpServerException.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/GenericSpServerException.java @@ -16,7 +16,7 @@ package org.eclipse.hawkbit.exception; * * */ -public class GenericSpServerException extends SpServerRtException { +public class GenericSpServerException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_REPO_GENERIC_ERROR; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java index c2d8ec49d..237fed978 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java @@ -11,11 +11,8 @@ package org.eclipse.hawkbit.repository; /** * Sort fields for {@link ActionRest}. * - * - * - * */ -public enum ActionFields implements FieldNameProvider,FieldValueConverter { +public enum ActionFields implements FieldNameProvider, FieldValueConverter { /** * The status field. @@ -42,13 +39,10 @@ public enum ActionFields implements FieldNameProvider,FieldValueConverter contains contains not + */ default boolean containsSubEntityAttribute(final String propertyField) { return FieldNameProvider.containsSubEntityAttribute(propertyField, getSubEntityAttributes()); - }; + } + /** + * + * @return all sub entities attributes. + */ default List getSubEntityAttributes() { return Collections.emptyList(); - }; + } /** * the database column for the key @@ -59,11 +70,11 @@ public interface FieldNameProvider { /** * Is the entity field a {@link Map}. * - * @return + * @return is a map is not a map */ default boolean isMap() { return getKeyFieldName() != null; - }; + } /** * Check if a sub attribute exists. diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java index 5968f4420..befd00c5d 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java @@ -27,7 +27,7 @@ public final class DurationHelper { * the defined min/max range. * */ - public static class DurationRangeValidator { + public static final class DurationRangeValidator { final Duration min; final Duration max; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/InvalidTenantConfigurationKeyException.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/InvalidTenantConfigurationKeyException.java index dcc42065c..977b66a6a 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/InvalidTenantConfigurationKeyException.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/InvalidTenantConfigurationKeyException.java @@ -9,14 +9,14 @@ package org.eclipse.hawkbit.tenancy.configuration; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * The {@link #InvalidTenantConfigurationKeyException} is thrown when an invalid * configuration key is used. * */ -public class InvalidTenantConfigurationKeyException extends SpServerRtException { +public class InvalidTenantConfigurationKeyException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_CONFIGURATION_KEY_INVALID; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidator.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidator.java index dccf515e6..bb61f1ec5 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidator.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidator.java @@ -22,7 +22,7 @@ public interface TenantConfigurationValidator { * @throws TenantConfigurationValidatorException * is thrown, when parameter is invalid. */ - default void validate(final Object tenantConfigurationValue) throws TenantConfigurationValidatorException { + default void validate(final Object tenantConfigurationValue) { if (tenantConfigurationValue != null && validateToClass().isAssignableFrom(tenantConfigurationValue.getClass())) { return; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidatorException.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidatorException.java index dffc13dcb..4cc545287 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidatorException.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationValidatorException.java @@ -9,14 +9,14 @@ package org.eclipse.hawkbit.tenancy.configuration.validator; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception which is thrown, when the validation of the configuration value has * not been successful. * */ -public class TenantConfigurationValidatorException extends SpServerRtException { +public class TenantConfigurationValidatorException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_CONFIGURATION_VALUE_INVALID; diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java index 9541055f8..898ee244a 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java @@ -27,6 +27,7 @@ public class DdiArtifactHash { * Default constructor. */ public DdiArtifactHash() { + // needed for json create } /** diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java index 78de8591d..cf146b597 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java @@ -29,7 +29,7 @@ public class DdiChunk { private List artifacts; public DdiChunk() { - + // needed for json create } /** diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java index 5ec1b4dde..0dfed6e79 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java @@ -34,8 +34,11 @@ public class DdiConfig { this.polling = polling; } + /** + * Constructor. + */ public DdiConfig() { - + // needed for json create. } public DdiPolling getPolling() { diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java index 3f160157c..526227601 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java @@ -37,7 +37,7 @@ public class DdiControllerBase extends ResourceSupport { } public DdiControllerBase() { - + // needed for json create } public DdiConfig getConfig() { diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java index f72083d7a..c7e364b36 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java @@ -23,8 +23,11 @@ public class DdiDeployment { private List chunks; + /** + * Constructor. + */ public DdiDeployment() { - + // needed for json create. } /** diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java index 8f1116b1b..a058fd24a 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java @@ -21,10 +21,10 @@ public class DdiDeploymentBase extends ResourceSupport { @JsonProperty("id") @NotNull - private String deplyomentId; + private final String deplyomentId; @NotNull - private DdiDeployment deployment; + private final DdiDeployment deployment; /** * Constructor. @@ -35,14 +35,10 @@ public class DdiDeploymentBase extends ResourceSupport { * details. */ public DdiDeploymentBase(final String id, final DdiDeployment deployment) { - deplyomentId = id; + this.deplyomentId = id; this.deployment = deployment; } - public DdiDeploymentBase() { - - } - public DdiDeployment getDeployment() { return deployment; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java index 489178be8..81427510a 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java @@ -30,11 +30,15 @@ public class DdiPolling { * between polls */ public DdiPolling(final String sleep) { - super(); this.sleep = sleep; } + /** + * Constructor. + * + */ public DdiPolling() { + // needed for json create } public String getSleep() { diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 0ec0d0d7e..584c774d5 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -60,8 +60,8 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Deployment Action Resource") public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoDB { - private static final String HTTP_LOCALHOST = "http://localhost:8080/"; - private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; + private static final String HTTP_LOCALHOST = "http://localhost/"; + private static final String HTTPS_LOCALHOST = "https://localhost/"; @Test() @Description("Ensures that artifacts are not found, when softare module does not exists.") diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java index 91d07de37..788d1d8d8 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java @@ -36,7 +36,7 @@ import org.springframework.stereotype.Component; /** * - * + * A controller which handles the amqp authentfication. */ @Component public class AmqpControllerAuthentfication { diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java index d1bf85103..8906bc96c 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.amqp; import java.net.URI; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; import java.util.UUID; @@ -137,6 +138,13 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return onMessage(message, type, tenant, getRabbitTemplate().getConnectionFactory().getVirtualHost()); } + /** + * Executed on a authentication request. + * + * @param message + * the amqp message + * @return the rpc message back to supplier. + */ @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.authenticationReceiverQueue}", containerFactory = "listenerContainerFactory") public Message onAuthenticationRequest(final Message message) { checkContentTypeJson(message); @@ -152,6 +160,19 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } } + /** + * * Executed if a amqp message arrives. + * + * @param message + * the message + * @param type + * the type + * @param tenant + * the tenant + * @param virtualHost + * the virtual host + * @return the rpc message back to supplier. + */ public Message onMessage(final Message message, final String type, final String tenant, final String virtualHost) { checkContentTypeJson(message); final SecurityContext oldContext = SecurityContextHolder.getContext(); @@ -417,7 +438,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } private static String convertCorrelationId(final Message message) { - return new String(message.getMessageProperties().getCorrelationId()); + return new String(message.getMessageProperties().getCorrelationId(), StandardCharsets.UTF_8); } private Action getUpdateActionStatus(final ActionStatus actionStatus) { diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java index 88c88f264..b11d5a437 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java @@ -39,16 +39,6 @@ public class BaseAmqpService { 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. * @@ -68,7 +58,7 @@ public class BaseAmqpService { return (T) rabbitTemplate.getMessageConverter().fromMessage(message); } - private boolean isMessageBodyEmpty(final Message message) { + private static boolean isMessageBodyEmpty(final Message message) { return message == null || message.getBody() == null || message.getBody().length == 0; } @@ -98,8 +88,7 @@ public class BaseAmqpService { return rabbitTemplate.getMessageConverter(); } - protected final String getStringHeaderKey(final Message message, final String key, - final String errorMessageIfNull) { + protected String getStringHeaderKey(final Message message, final String key, final String errorMessageIfNull) { final Map header = message.getMessageProperties().getHeaders(); final Object value = header.get(key); if (value == null) { @@ -117,4 +106,15 @@ public class BaseAmqpService { protected RabbitTemplate getRabbitTemplate() { return 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); + } + } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java index d951cce5d..1eb6d31f2 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.amqp; import java.net.URI; +import java.nio.charset.StandardCharsets; import java.util.UUID; import org.eclipse.hawkbit.util.IpUtil; @@ -46,7 +47,7 @@ public class DefaultAmqpSenderService implements AmqpSenderService { final String correlationId = UUID.randomUUID().toString(); final String exchange = extractExchange(replyTo); - message.getMessageProperties().setCorrelationId(correlationId.getBytes()); + message.getMessageProperties().setCorrelationId(correlationId.getBytes(StandardCharsets.UTF_8)); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Sending message {} to exchange {} with correlationId {}", message, exchange, correlationId); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java index 4e08e1852..211ac26a2 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java @@ -114,7 +114,7 @@ public class AmqpControllerAuthenticationTest { @Description("Tests authentication manager without principal") public void testAuthenticationeBadCredantialsWithoutPricipal() { final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, - FileResource.sha1("12345")); + FileResource.createFileResourceBySha1("12345")); try { authenticationManager.doAuthenticate(securityToken); fail("BadCredentialsException was excepeted since principal was missing"); @@ -128,7 +128,7 @@ public class AmqpControllerAuthenticationTest { @Description("Tests authentication manager without wrong credential") public void testAuthenticationBadCredantialsWithWrongCredential() { final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, - FileResource.sha1("12345")); + FileResource.createFileResourceBySha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); @@ -146,7 +146,7 @@ public class AmqpControllerAuthenticationTest { @Description("Tests authentication successfull") public void testSuccessfullAuthentication() { final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, - FileResource.sha1("12345")); + FileResource.createFileResourceBySha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); @@ -161,7 +161,7 @@ public class AmqpControllerAuthenticationTest { final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, - FileResource.sha1("12345")); + FileResource.createFileResourceBySha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -179,7 +179,7 @@ public class AmqpControllerAuthenticationTest { public void testAuthenticationMessageBadCredantialsWithWrongCredential() { final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, - FileResource.sha1("12345")); + FileResource.createFileResourceBySha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); @@ -201,7 +201,7 @@ public class AmqpControllerAuthenticationTest { public void testSuccessfullMessageAuthentication() { final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, - FileResource.sha1("12345")); + FileResource.createFileResourceBySha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java index 2627731c6..7a3915e28 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java @@ -279,7 +279,8 @@ public class AmqpMessageHandlerServiceTest { @Description("Tests that an download request is denied for an artifact which does not exists") public void authenticationRequestDeniedForArtifactWhichDoesNotExists() { final MessageProperties messageProperties = createMessageProperties(null); - final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", + FileResource.createFileResourceBySha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -297,7 +298,8 @@ public class AmqpMessageHandlerServiceTest { @Description("Tests that an download request is denied for an artifact which is not assigned to the requested target") public void authenticationRequestDeniedForArtifactWhichIsNotAssignedToTarget() { final MessageProperties messageProperties = createMessageProperties(null); - final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", + FileResource.createFileResourceBySha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -320,7 +322,8 @@ public class AmqpMessageHandlerServiceTest { @Description("Tests that an download request is allowed for an artifact which exists and assigned to the requested target") public void authenticationRequestAllowedForArtifactWhichExistsAndAssignedToTarget() throws MalformedURLException { final MessageProperties messageProperties = createMessageProperties(null); - final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", + FileResource.createFileResourceBySha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index 8cd92d2bd..92e8f390d 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -35,8 +35,8 @@ import ru.yandex.qatools.allure.annotations.Stories; org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { - private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; - private static final String HTTP_LOCALHOST = "http://localhost:8080/"; + private static final String HTTPS_LOCALHOST = "https://localhost/"; + private static final String HTTP_LOCALHOST = "http://localhost/"; @Autowired private ArtifactUrlHandler urlHandlerProperties; diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java index e4f41bc46..19293f3eb 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java @@ -135,7 +135,7 @@ public class TenantSecurityToken { * the SHA1 key of the file to obtain * @return the {@link FileResource} with SHA1 key set */ - public static FileResource sha1(final String sha1) { + public static FileResource createFileResourceBySha1(final String sha1) { final FileResource resource = new FileResource(); resource.sha1 = sha1; return resource; @@ -148,7 +148,7 @@ public class TenantSecurityToken { * the filename of the file to obtain * @return the {@link FileResource} with filename set */ - public static FileResource filename(final String filename) { + public static FileResource createFileResourceByFilename(final String filename) { final FileResource resource = new FileResource(); resource.filename = filename; return resource; diff --git a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java index 0e67489ea..0a4ad0b72 100644 --- a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java +++ b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java @@ -47,7 +47,7 @@ import com.google.common.collect.UnmodifiableIterator; */ public abstract class AbstractHttpControllerAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter { - private static final Logger LOGGER = LoggerFactory.getLogger(AbstractHttpControllerAuthenticationFilter.class); + private static final Logger LOG = LoggerFactory.getLogger(AbstractHttpControllerAuthenticationFilter.class); private static final String TENANT_PLACE_HOLDER = "tenant"; private static final String CONTROLLER_ID_PLACE_HOLDER = "controllerId"; @@ -73,10 +73,12 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac /** * Constructor for sub-classes. * - * @param systemManagement - * the system management service + * @param tenantConfigurationManagement + * the tenant configuration service * @param tenantAware * the tenant aware service + * @param systemSecurityContext + * the system secruity context */ public AbstractHttpControllerAuthenticationFilter(final TenantConfigurationManagement tenantConfigurationManagement, final TenantAware tenantAware, final SystemSecurityContext systemSecurityContext) { @@ -136,28 +138,28 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac final String requestURI = request.getRequestURI(); if (pathExtractor.match(request.getContextPath() + CONTROLLER_REQUEST_ANT_PATTERN, requestURI)) { - LOGGER.debug("retrieving principal from URI request {}", requestURI); + LOG.debug("retrieving principal from URI request {}", requestURI); final Map extractUriTemplateVariables = pathExtractor .extractUriTemplateVariables(request.getContextPath() + CONTROLLER_REQUEST_ANT_PATTERN, requestURI); final String controllerId = extractUriTemplateVariables.get(CONTROLLER_ID_PLACE_HOLDER); final String tenant = extractUriTemplateVariables.get(TENANT_PLACE_HOLDER); - if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Parsed tenant {} and controllerId {} from path request {}", tenant, controllerId, + if (LOG.isTraceEnabled()) { + LOG.trace("Parsed tenant {} and controllerId {} from path request {}", tenant, controllerId, requestURI); } return createTenantSecruityTokenVariables(request, tenant, controllerId); } else if (pathExtractor.match(request.getContextPath() + CONTROLLER_DL_REQUEST_ANT_PATTERN, requestURI)) { - LOGGER.debug("retrieving path variables from URI request {}", requestURI); + LOG.debug("retrieving path variables from URI request {}", requestURI); final Map extractUriTemplateVariables = pathExtractor.extractUriTemplateVariables( request.getContextPath() + CONTROLLER_DL_REQUEST_ANT_PATTERN, requestURI); final String tenant = extractUriTemplateVariables.get(TENANT_PLACE_HOLDER); - if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Parsed tenant {} from path request {}", tenant, requestURI); + if (LOG.isTraceEnabled()) { + LOG.trace("Parsed tenant {} from path request {}", tenant, requestURI); } return createTenantSecruityTokenVariables(request, tenant, "anonymous"); } else { - if (LOGGER.isTraceEnabled()) { - LOGGER.trace("request {} does not match the path pattern {}, request gets ignored", requestURI, + if (LOG.isTraceEnabled()) { + LOG.trace("request {} does not match the path pattern {}, request gets ignored", requestURI, CONTROLLER_REQUEST_ANT_PATTERN); } return null; @@ -166,7 +168,8 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac private TenantSecurityToken createTenantSecruityTokenVariables(final HttpServletRequest request, final String tenant, final String controllerId) { - final TenantSecurityToken secruityToken = new TenantSecurityToken(tenant, controllerId, FileResource.sha1("")); + final TenantSecurityToken secruityToken = new TenantSecurityToken(tenant, controllerId, + FileResource.createFileResourceBySha1("")); final UnmodifiableIterator forEnumeration = Iterators.forEnumeration(request.getHeaderNames()); forEnumeration.forEachRemaining(header -> secruityToken.getHeaders().put(header, request.getHeader(header))); return secruityToken; diff --git a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/ControllerTenantAwareAuthenticationDetailsSource.java b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/ControllerTenantAwareAuthenticationDetailsSource.java index 80d50112f..ae514c07b 100644 --- a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/ControllerTenantAwareAuthenticationDetailsSource.java +++ b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/ControllerTenantAwareAuthenticationDetailsSource.java @@ -22,15 +22,11 @@ import org.springframework.util.AntPathMatcher; * An {@link AuthenticationDetailsSource} implementation which retrieves the * tenant from a request pattern {@link #TENANT_AWARE_CONTROLLER_PATTERN} and * stores the retrieved tenant in the {@link TenantAwareAuthenticationDetails}. - * * */ public class ControllerTenantAwareAuthenticationDetailsSource implements AuthenticationDetailsSource { - /** - * - */ private static final String TENANT_AWARE_CONTROLLER_PATTERN = "/{tenant}/controller/**"; private static final Logger LOGGER = LoggerFactory .getLogger(ControllerTenantAwareAuthenticationDetailsSource.class); @@ -38,19 +34,12 @@ public class ControllerTenantAwareAuthenticationDetailsSource private final AntPathMatcher pathExtractor; /** - * - */ + * Constructor. + */ public ControllerTenantAwareAuthenticationDetailsSource() { pathExtractor = new AntPathMatcher(); } - /* - * (non-Javadoc) - * - * @see - * org.springframework.security.authentication.AuthenticationDetailsSource# - * buildDetails(java. lang.Object) - */ @Override public TenantAwareAuthenticationDetails buildDetails(final HttpServletRequest request) { return new TenantAwareWebAuthenticationDetails(getTenantFromRequestUri(request), request.getRemoteAddr(), true); diff --git a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpDownloadAuthenticationFilter.java b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpDownloadAuthenticationFilter.java index 4a4bf2f5c..4185c9b83 100644 --- a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpDownloadAuthenticationFilter.java +++ b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpDownloadAuthenticationFilter.java @@ -28,7 +28,7 @@ import org.springframework.security.web.authentication.preauth.AbstractPreAuthen public class HttpDownloadAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter { public static final String REQUEST_ID_REGEX_PATTERN = ".*\\/downloadId\\/.*"; - private static final Logger LOGGER = LoggerFactory.getLogger(HttpDownloadAuthenticationFilter.class); + private static final Logger LOG = LoggerFactory.getLogger(HttpDownloadAuthenticationFilter.class); private final Pattern pattern; private final Cache cache; @@ -50,7 +50,7 @@ public class HttpDownloadAuthenticationFilter extends AbstractPreAuthenticatedPr if (!matcher.matches()) { return null; } - LOGGER.debug("retrieving id from URI request {}", requestURI); + LOG.debug("retrieving id from URI request {}", requestURI); final String[] groups = requestURI.split("\\/"); final String id = groups[groups.length - 1]; if (id == null) { diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java index d43ae4339..770c8ffcf 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java @@ -27,6 +27,7 @@ public class MgmtArtifactHash { * Default constructor. */ public MgmtArtifactHash() { + // used for jackson to instantiate } /** diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java index ea6dccc7e..9053af8c8 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.ResponseBody; * */ @RequestMapping(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) +@FunctionalInterface public interface MgmtDownloadArtifactRestApi { /** diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java index 52cd1c991..ea179b830 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.ResponseBody; * */ @RequestMapping(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) +@FunctionalInterface public interface MgmtDownloadRestApi { /** diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java index 87a215183..b6f9f27c8 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java @@ -15,6 +15,7 @@ import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; +import org.eclipse.hawkbit.cache.DownloadType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadRestApi; import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.slf4j.Logger; @@ -73,14 +74,11 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { final DownloadArtifactCache artifactCache = (DownloadArtifactCache) cacheWrapper.get(); DbArtifact artifact = null; - switch (artifactCache.getDownloadType()) { - case BY_SHA1: - artifact = artifactRepository.getArtifactBySha1(artifactCache.getId()); - break; - default: + if (DownloadType.BY_SHA1.equals(artifactCache.getDownloadType())) { + artifact = artifactRepository.getArtifactBySha1(artifactCache.getId()); + } else { LOGGER.warn("Download Type {} not supported", artifactCache.getDownloadType()); - break; } if (artifact == null) { diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java index d3f78fad2..d0c8dfcc5 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java @@ -23,7 +23,7 @@ import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; * A mapper which maps repository model to RESTful model representation and * back. */ -public class MgmtSystemMapper { +public final class MgmtSystemMapper { private MgmtSystemMapper() { // Utility class @@ -51,6 +51,8 @@ public class MgmtSystemMapper { * maps a TenantConfigurationValue from the repository model to a * MgmtSystemTenantConfigurationValue, the RESTful model. * + * @param key + * the key * @param repoConfValue * configuration value as repository model * @return configuration value as RESTful model diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index 0741bf9e6..d8a6f54fe 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -44,9 +44,6 @@ import org.springframework.security.access.prepost.PreAuthorize; */ public interface DistributionSetManagement { - // TODO rename/document the whole with details thing (document what the - // details are and maybe find a better name, e.g. with dependencies?) - /** * Assigns {@link SoftwareModule} to existing {@link DistributionSet}. * @@ -330,7 +327,6 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) List findDistributionSetsAll(Collection dist); - // TODO discuss: use enum instead of the true,false,null switch ? /** * finds all {@link DistributionSet}s. * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java index 2ff739726..05960938f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.eventbus.event; -import org.eclipse.hawkbit.eventbus.event.AbstractEvent; +import org.eclipse.hawkbit.eventbus.event.DefaultEvent; /** * Event declaration for the UI to notify the UI that a rollout has been @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.eventbus.event.AbstractEvent; * @author Michael Hirsch * */ -public class RolloutChangeEvent extends AbstractEvent { +public class RolloutChangeEvent extends DefaultEvent { private final Long rolloutId; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java index 5c36ab61f..686625d03 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.eventbus.event; -import org.eclipse.hawkbit.eventbus.event.AbstractEvent; +import org.eclipse.hawkbit.eventbus.event.DefaultEvent; /** * Event declaration for the UI to notify the UI that a rollout has been @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.eventbus.event.AbstractEvent; * @author Michael Hirsch * */ -public class RolloutGroupChangeEvent extends AbstractEvent { +public class RolloutGroupChangeEvent extends DefaultEvent { private final Long rolloutId; private final Long rolloutGroupId; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java index 077e05462..586a4b9d2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java @@ -11,14 +11,14 @@ package org.eclipse.hawkbit.repository.eventbus.event; import java.net.URI; import java.util.Collection; -import org.eclipse.hawkbit.eventbus.event.AbstractEvent; +import org.eclipse.hawkbit.eventbus.event.DefaultEvent; import org.eclipse.hawkbit.repository.model.SoftwareModule; /** * Event that gets sent when a distribution set gets assigned to a target. * */ -public class TargetAssignDistributionSetEvent extends AbstractEvent { +public class TargetAssignDistributionSetEvent extends DefaultEvent { private final Collection softwareModules; private final String controllerId; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java index 7b7975d78..c7ed8637e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if artifact deletion failed. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public final class ArtifactDeleteFailedException extends SpServerRtException { +public final class ArtifactDeleteFailedException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java index d83f80e64..6f762b56c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java @@ -9,14 +9,14 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * * * */ -public final class ArtifactUploadFailedException extends SpServerRtException { +public final class ArtifactUploadFailedException extends AbstractServerRtException { /** * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java index 0a787e5bb..1afd994cf 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if cancelation of actions is performened where the action is not @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public final class CancelActionNotAllowedException extends SpServerRtException { +public final class CancelActionNotAllowedException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java index c2a3b4456..ec2691e52 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * {@link ConcurrentModificationException} is thrown when a given entity in's @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class ConcurrentModificationException extends SpServerRtException { +public class ConcurrentModificationException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_REPO_CONCURRENT_MODIFICATION; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java index 0dc2f9752..936d3e5d2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if DS creation failed. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public final class DistributionSetCreationFailedMissingMandatoryModuleException extends SpServerRtException { +public final class DistributionSetCreationFailedMissingMandatoryModuleException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java index d3e10b213..8cf3c6162 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -21,7 +21,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; * * */ -public class DistributionSetTypeUndefinedException extends SpServerRtException { +public class DistributionSetTypeUndefinedException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java index a38ec5bb6..73b14c57a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * the {@link EntityAlreadyExistsException} is thrown when a entity is tried to @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class EntityAlreadyExistsException extends SpServerRtException { +public class EntityAlreadyExistsException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_REPO_ENTITY_ALRREADY_EXISTS; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java index 1d55bdc34..23c372410 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * The {@link EntityLockedException} is thrown when an entity has been locked by @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class EntityLockedException extends SpServerRtException { +public class EntityLockedException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_ENTITY_LOCKED; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java index 280436d3b..ce1446f67 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * the {@link EntityNotFoundException} is thrown when a entity is tried find but @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class EntityNotFoundException extends SpServerRtException { +public class EntityNotFoundException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_REPO_ENTITY_NOT_EXISTS; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java index 7908c4db5..f2686abb1 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java @@ -9,13 +9,13 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * the {@link EntityReadOnlyException} is thrown when a entity is in read only * mode and a user tries to change it. */ -public class EntityReadOnlyException extends SpServerRtException { +public class EntityReadOnlyException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_REPO_ENTITY_READ_ONLY; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java index 23b5f7067..83957739a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java @@ -9,14 +9,14 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown when force quitting an actions is not allowed. e.g. the action is not * active or it is not canceled before. * */ -public final class ForceQuitActionNotAllowedException extends SpServerRtException { +public final class ForceQuitActionNotAllowedException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java index d22fe2b6e..3f3c49e03 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java @@ -9,14 +9,14 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * * * */ -public final class GridFSDBFileNotFoundException extends SpServerRtException { +public final class GridFSDBFileNotFoundException extends AbstractServerRtException { /** * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java index 51b95afbd..10bc5bba4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if a distribution set is assigned to a a target that is incomplete @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public final class IncompleteDistributionSetException extends SpServerRtException { +public final class IncompleteDistributionSetException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java index e15ba43ee..d3802300a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception which is thrown in case the current security context object does @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class InsufficientPermissionException extends SpServerRtException { +public class InsufficientPermissionException extends AbstractServerRtException { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java index c08673164..f6083a612 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if MD5 checksum check fails. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class InvalidMD5HashException extends SpServerRtException { +public class InvalidMD5HashException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java index e4136cd82..4cc26c571 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if SHA1 checksum check fails. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class InvalidSHA1HashException extends SpServerRtException { +public class InvalidSHA1HashException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java index 70b890483..160d5c07b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java @@ -9,12 +9,12 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception which is thrown when trying to set an invalid target address. */ -public class InvalidTargetAddressException extends SpServerRtException { +public class InvalidTargetAddressException extends AbstractServerRtException { /** * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java index e37786e19..7b554982e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java @@ -9,13 +9,13 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if a multi part exception occurred. * */ -public final class MultiPartFileUploadException extends SpServerRtException { +public final class MultiPartFileUploadException extends AbstractServerRtException { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java index 268ab02ba..d46f6d827 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception used by the REST API in case of RSQL search filter query. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class RSQLParameterSyntaxException extends SpServerRtException { +public class RSQLParameterSyntaxException extends AbstractServerRtException { /** * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java index df58ecc8b..402a3eee7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception used by the REST API in case of invalid field name in the rsql @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class RSQLParameterUnsupportedFieldException extends SpServerRtException { +public class RSQLParameterUnsupportedFieldException extends AbstractServerRtException { /** * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java index f2920c18d..2f1937008 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * the {@link RolloutIllegalStateException} is thrown when a rollout is changing @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * rollout, or trying to resume a already finished rollout. * */ -public class RolloutIllegalStateException extends SpServerRtException { +public class RolloutIllegalStateException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_ROLLOUT_ILLEGAL_STATE; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java index 95aab39a8..810054e93 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * the {@link TenantNotExistException} is thrown when e.g. a controller tries to @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class TenantNotExistException extends SpServerRtException { +public class TenantNotExistException extends AbstractServerRtException { private static final long serialVersionUID = 1L; private static final SpServerError THIS_ERROR = SpServerError.SP_REPO_TENANT_NOT_EXISTS; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java index 78da0b9f3..6004bc2e7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if too many status entries have been inserted. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public final class ToManyAttributeEntriesException extends SpServerRtException { +public final class ToManyAttributeEntriesException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java index 5d4367924..7b8f4a1b0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if too many status entries have been inserted. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public final class ToManyStatusEntriesException extends SpServerRtException { +public final class ToManyStatusEntriesException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java index 3726e3188..2ed76dfbc 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -23,7 +23,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; * * */ -public class UnsupportedSoftwareModuleForThisDistributionSetException extends SpServerRtException { +public class UnsupportedSoftwareModuleForThisDistributionSetException extends AbstractServerRtException { /** * */ diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityInterceptorListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityInterceptorListener.java index 1e9c39237..75f1411ef 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityInterceptorListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityInterceptorListener.java @@ -27,43 +27,84 @@ import org.eclipse.hawkbit.repository.model.EntityInterceptor; */ public class EntityInterceptorListener { + /** + * Callback for lifecyle event pre persist. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PrePersist - protected void prePersist(final Object entity) { + public void prePersist(final Object entity) { notifyAll(interceptor -> interceptor.prePersist(entity)); } + /** + * Callback for lifecyle event post persist. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PostPersist - protected void postPersist(final Object entity) { + public void postPersist(final Object entity) { notifyAll(interceptor -> interceptor.postPersist(entity)); } + /** + * Callback for lifecyle event post remove. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PostRemove - protected void postRemove(final Object entity) { + public void postRemove(final Object entity) { notifyAll(interceptor -> interceptor.postRemove(entity)); } + /** + * Callback for lifecyle event pre remove. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PreRemove - protected void preRemove(final Object entity) { + public void preRemove(final Object entity) { notifyAll(interceptor -> interceptor.preRemove(entity)); } + /** + * Callback for lifecyle event post load. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PostLoad - protected void postLoad(final Object entity) { + public void postLoad(final Object entity) { notifyAll(interceptor -> interceptor.postLoad(entity)); } + /** + * Callback for lifecyle event pre update. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PreUpdate - protected void preUpdate(final Object entity) { + public void preUpdate(final Object entity) { notifyAll(interceptor -> interceptor.preUpdate(entity)); } + /** + * Callback for lifecyle event post update. + * + * @param entity + * the JPA entity which this listener is associated with + */ @PostUpdate - protected void postUpdate(final Object entity) { + public void postUpdate(final Object entity) { notifyAll(interceptor -> interceptor.postUpdate(entity)); } - private void notifyAll(final Consumer action) { + private static void notifyAll(final Consumer action) { EntityInterceptorHolder.getInstance().getEntityInterceptors().forEach(action); } - } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java index cb3f5476f..c83ae8ad1 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java @@ -17,7 +17,7 @@ import org.hamcrest.Matchers; /** * Matcher for {@link BaseEntity}. */ -public class BaseEntityMatcher { +public final class BaseEntityMatcher { private BaseEntityMatcher() { } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java index c12a3b0b3..fe8e40da0 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java @@ -226,7 +226,7 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { createTestdatabaseAndStart(); } - private static void createTestdatabaseAndStart() { + private static synchronized void createTestdatabaseAndStart() { if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { tesdatabase = new CIMySqlTestDatabase(); tesdatabase.before(); diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java index 149cdf2b5..635cc9d6e 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java @@ -14,7 +14,7 @@ import java.net.ServerSocket; /** * - * + * Look for a free port. */ public class FreePortFileWriter { @@ -24,7 +24,9 @@ public class FreePortFileWriter { /** * @param from + * port range from (start point) * @param to + * port range to (end point) */ public FreePortFileWriter(final int from, final int to, final String filePortPath) { this.from = from; @@ -51,25 +53,21 @@ public class FreePortFileWriter { portFile.getParentFile().mkdirs(); if (portFile.exists()) { return false; - } else { - boolean isFree = false; - final ServerSocket sock = new ServerSocket(); - sock.setReuseAddress(true); - sock.bind(new InetSocketAddress(port)); - if (portFile.createNewFile()) { - portFile.deleteOnExit(); - isFree = true; - } - sock.close(); - // is free: - return isFree; - // We rely on an exception thrown to determine availability or - // not availability. } - } catch (final Exception e) { - // not free. + boolean isFree = false; + final ServerSocket sock = new ServerSocket(); + sock.setReuseAddress(true); + sock.bind(new InetSocketAddress(port)); + if (portFile.createNewFile()) { + portFile.deleteOnExit(); + isFree = true; + } + sock.close(); + return isFree; + // We rely on an exception thrown to determine availability or + // not availability and don't want to log the exception. + } catch (@SuppressWarnings({ "squid:S2221", "squid:S1166" }) final Exception e) { return false; } } - } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java index eae0b9a7d..7d7908d6e 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java @@ -13,11 +13,14 @@ import java.util.List; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.security.SystemSecurityContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; public class JpaTestRepositoryManagement implements TestRepositoryManagement { + private static final Logger LOGGER = LoggerFactory.getLogger(JpaTestRepositoryManagement.class); @Autowired private TenantAwareCacheManager cacheManager; @@ -28,6 +31,7 @@ public class JpaTestRepositoryManagement implements TestRepositoryManagement { private SystemManagement systemManagement; @Override + @Transactional public void clearTestRepository() { deleteAllRepos(); cacheManager.getDirectCacheNames().forEach(name -> cacheManager.getDirectCache(name).clear()); @@ -43,7 +47,7 @@ public class JpaTestRepositoryManagement implements TestRepositoryManagement { return null; }); } catch (final Exception e) { - e.printStackTrace(); + LOGGER.error("Error hile delete tenant", e); } }); } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java index 81e2c1daf..34031639d 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java @@ -10,10 +10,10 @@ package org.eclipse.hawkbit.repository.test.util; import java.io.InputStream; import java.nio.charset.Charset; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Random; import java.util.UUID; import org.apache.commons.io.IOUtils; @@ -191,16 +191,17 @@ public class TestdataFactory { public DistributionSet createDistributionSet(final String prefix, final String version, final boolean isRequiredMigrationStep) { - final SoftwareModule appMod = softwareManagement.createSoftwareModule(entityFactory.generateSoftwareModule( - findOrCreateSoftwareModuleType(SM_TYPE_APP, Integer.MAX_VALUE), prefix + SM_TYPE_APP, - version + "." + new Random().nextInt(100), LOREM.words(20), prefix + " vendor Limited, California")); + final SoftwareModule appMod = softwareManagement.createSoftwareModule( + entityFactory.generateSoftwareModule(findOrCreateSoftwareModuleType(SM_TYPE_APP, Integer.MAX_VALUE), + prefix + SM_TYPE_APP, version + "." + new SecureRandom().nextInt(100), LOREM.words(20), + prefix + " vendor Limited, California")); final SoftwareModule runtimeMod = softwareManagement .createSoftwareModule(entityFactory.generateSoftwareModule(findOrCreateSoftwareModuleType(SM_TYPE_RT), - prefix + "app runtime", version + "." + new Random().nextInt(100), LOREM.words(20), + prefix + "app runtime", version + "." + new SecureRandom().nextInt(100), LOREM.words(20), prefix + " vendor GmbH, Stuttgart, Germany")); final SoftwareModule osMod = softwareManagement .createSoftwareModule(entityFactory.generateSoftwareModule(findOrCreateSoftwareModuleType(SM_TYPE_OS), - prefix + " Firmware", version + "." + new Random().nextInt(100), LOREM.words(20), + prefix + " Firmware", version + "." + new SecureRandom().nextInt(100), LOREM.words(20), prefix + " vendor Limited Inc, California")); return distributionSetManagement diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java index 357ec5f69..ce5c39843 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java @@ -16,7 +16,6 @@ import java.util.List; import java.util.concurrent.Callable; import org.eclipse.hawkbit.im.authentication.SpPermission; -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.jpa.model.helper.SystemManagementHolder; import org.junit.rules.TestRule; @@ -29,16 +28,12 @@ import org.springframework.security.core.context.SecurityContextHolder; public class WithSpringAuthorityRule implements TestRule { - /* - * (non-Javadoc) - * - * @see org.junit.rules.TestRule#apply(org.junit.runners.model.Statement, - * org.junit.runner.Description) - */ @Override public Statement apply(final Statement base, final Description description) { return new Statement() { @Override + // throwable comes from jnuit evaluate signature + @SuppressWarnings("squid:S00112") public void evaluate() throws Throwable { final SecurityContext oldContext = before(description); try { @@ -50,7 +45,7 @@ public class WithSpringAuthorityRule implements TestRule { }; } - private SecurityContext before(final Description description) throws Throwable { + private SecurityContext before(final Description description) { final SecurityContext oldContext = SecurityContextHolder.getContext(); WithUser annotation = description.getAnnotation(WithUser.class); if (annotation == null) { @@ -64,19 +59,14 @@ public class WithSpringAuthorityRule implements TestRule { } return oldContext; } - - /** - * @param annotation - */ + private void setSecurityContext(final WithUser annotation) { SecurityContextHolder.setContext(new SecurityContext() { - /** - * - */ private static final long serialVersionUID = 1L; @Override public void setAuthentication(final Authentication authentication) { + // nothing todo } @Override @@ -114,7 +104,8 @@ public class WithSpringAuthorityRule implements TestRule { if (addPermission) { allPermissions.add(permissionName); } - } catch (IllegalArgumentException | IllegalAccessException e) { + // don't want to log this exceptions. + } catch (@SuppressWarnings("squid:S1166") IllegalArgumentException | IllegalAccessException e) { // nope } } @@ -130,18 +121,17 @@ public class WithSpringAuthorityRule implements TestRule { private void after(final SecurityContext oldContext) { SecurityContextHolder.setContext(oldContext); } - + /** * Clears the current security context. */ - public void clear() - { + public void clear() { SecurityContextHolder.clearContext(); } /** * @param callable - * @return + * @return the callable result * @throws Exception */ public T runAsPrivileged(final Callable callable) throws Exception { @@ -149,10 +139,10 @@ public class WithSpringAuthorityRule implements TestRule { } /** - * + * * @param withUser * @param callable - * @return + * @return callable result * @throws Exception */ public T runAs(final WithUser withUser, final Callable callable) throws Exception { @@ -167,15 +157,13 @@ public class WithSpringAuthorityRule implements TestRule { after(oldContext); } } - - private void createTenant(final String tenantId) throws Exception { + + private void createTenant(final String tenantId) { final SecurityContext oldContext = SecurityContextHolder.getContext(); setSecurityContext(privilegedUser()); - try - { + try { SystemManagementHolder.getInstance().getSystemManagement().getTenantMetadata(tenantId); - }finally - { + } finally { after(oldContext); } } @@ -183,7 +171,7 @@ public class WithSpringAuthorityRule implements TestRule { public static WithUser withUser(final String principal, final String... authorities) { return withUserAndTenant(principal, "default", true, true, authorities); } - + public static WithUser withUser(final String principal, final boolean allSpPermision, final String... authorities) { return withUserAndTenant(principal, "default", true, allSpPermision, authorities); } @@ -198,6 +186,15 @@ public class WithSpringAuthorityRule implements TestRule { public static WithUser withUserAndTenant(final String principal, final String tenant, final boolean autoCreateTenant, final boolean allSpPermission, final String... authorities) { + return createWithUser(principal, tenant, autoCreateTenant, allSpPermission, authorities); + } + + private static WithUser privilegedUser() { + return createWithUser("bumlux", "default", true, true, new String[] { "ROLE_CONTROLLER", "ROLE_SYSTEM_CODE" }); + } + + private static WithUser createWithUser(final String principal, final String tenant, final boolean autoCreateTenant, + final boolean allSpPermission, final String... authorities) { return new WithUser() { @Override @@ -227,7 +224,7 @@ public class WithSpringAuthorityRule implements TestRule { @Override public String[] removeFromAllPermission() { - return null; + return new String[0]; } @Override @@ -235,65 +232,10 @@ public class WithSpringAuthorityRule implements TestRule { return tenant; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.WithUser#autoCreateTenant() - */ @Override public boolean autoCreateTenant() { return autoCreateTenant; } }; } - - private static WithUser privilegedUser() { - return new WithUser() { - - @Override - public Class annotationType() { - return WithUser.class; - } - - @Override - public String principal() { - return "bumlux"; - } - - @Override - public String credentials() { - return null; - } - - @Override - public String[] authorities() { - return new String[] { "ROLE_CONTROLLER", "ROLE_SYSTEM_CODE" }; - } - - @Override - public boolean allSpPermissions() { - return true; - } - - @Override - public String[] removeFromAllPermission() { - return null; - } - - @Override - public String tenantId() { - return "default"; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.WithUser#autoCreateTenant() - */ - @Override - public boolean autoCreateTenant() { - return true; - } - }; - } } diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java index 3c5e0aee3..319ac9a38 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception which is thrown in case an request body is not well formaned and @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class MessageNotReadableException extends SpServerRtException { +public class MessageNotReadableException extends AbstractServerRtException { /** * diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java index 02a48ef78..81d70103b 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java @@ -16,7 +16,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.exception.ExceptionUtils; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; import org.eclipse.hawkbit.repository.exception.MultiPartFileUploadException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.slf4j.Logger; @@ -75,7 +75,7 @@ public class ResponseExceptionHandler { } /** - * method for handling exception of type SpServerRtException. Called by the + * method for handling exception of type AbstractServerRtException. Called by the * Spring-Framework for exception handling. * * @param request @@ -86,14 +86,14 @@ public class ResponseExceptionHandler { * @return the entity to be responded containing the exception information * as entity. */ - @ExceptionHandler(SpServerRtException.class) + @ExceptionHandler(AbstractServerRtException.class) public ResponseEntity handleSpServerRtExceptions(final HttpServletRequest request, final Exception ex) { logRequest(request, ex); final ExceptionInfo response = createExceptionInfo(ex); final HttpStatus responseStatus; - if (ex instanceof SpServerRtException) { - responseStatus = getStatusOrDefault(((SpServerRtException) ex).getError()); + if (ex instanceof AbstractServerRtException) { + responseStatus = getStatusOrDefault(((AbstractServerRtException) ex).getError()); } else { responseStatus = DEFAULT_RESPONSE_STATUS; } @@ -152,8 +152,8 @@ public class ResponseExceptionHandler { final ExceptionInfo response = new ExceptionInfo(); response.setMessage(ex.getMessage()); response.setExceptionClass(ex.getClass().getName()); - if (ex instanceof SpServerRtException) { - response.setErrorCode(((SpServerRtException) ex).getError().getKey()); + if (ex instanceof AbstractServerRtException) { + response.setErrorCode(((AbstractServerRtException) ex).getError().getKey()); } return response; diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java index a8d476ac1..d43cec066 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception used by the REST API in case of invalid sort parameter syntax. @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class SortParameterSyntaxErrorException extends SpServerRtException { +public class SortParameterSyntaxErrorException extends AbstractServerRtException { /** * diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java index b44b94917..6a79e8abe 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception used by the REST API in case of invalid sort parameter direction @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class SortParameterUnsupportedDirectionException extends SpServerRtException { +public class SortParameterUnsupportedDirectionException extends AbstractServerRtException { /** * diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java index c9ce0dcdd..a00d245ab 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Exception used by the REST API in case of invalid field name in the sort @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.exception.SpServerRtException; * * */ -public class SortParameterUnsupportedFieldException extends SpServerRtException { +public class SortParameterUnsupportedFieldException extends AbstractServerRtException { /** * diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java index 667fc197d..0811ac312 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java @@ -69,13 +69,10 @@ public class ByteRange { return total; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override - public int hashCode() { // NOSONAR - as this is generated + // NOSONAR - as this is generated + @SuppressWarnings("squid:S864") + public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (end ^ end >>> 32); @@ -85,11 +82,6 @@ public class ByteRange { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated if (this == obj) { diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java index abf7c0245..472c78c2a 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java @@ -9,12 +9,12 @@ package org.eclipse.hawkbit.rest.util; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.exception.AbstractServerRtException; /** * Thrown if artifact content streaming to client failed. */ -public final class FileSteamingFailedException extends SpServerRtException { +public final class FileSteamingFailedException extends AbstractServerRtException { private static final long serialVersionUID = 1L; diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index 783f27b7e..866ee16bc 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -185,18 +185,22 @@ public final class SpPermission { field.setAccessible(true); try { final String role = (String) field.get(null); - if (!(exclusionRoles.contains(role))) { - allPermissions.add(role); - } + addIfNotExcluded(exclusionRoles, allPermissions, role); } catch (final IllegalAccessException e) { LOGGER.error(e.getMessage(), e); } - } } return allPermissions; } + private static void addIfNotExcluded(final Collection exclusionRoles, final List allPermissions, + final String role) { + if (!(exclusionRoles.contains(role))) { + allPermissions.add(role); + } + } + /** * Contains all the spring security evaluation expressions for the * {@link PreAuthorize} annotation for method security. diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/UserAuthenticationFilter.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/UserAuthenticationFilter.java index ecd980b03..deaff089f 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/UserAuthenticationFilter.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/UserAuthenticationFilter.java @@ -51,7 +51,9 @@ public interface UserAuthenticationFilter { * @throws ServletException * servlet exception */ - + // this declaration of multiple checked exception is necessary so it's + // aligned with the servlet API. + @SuppressWarnings("squid:S1160") void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java index f2cfbbdbf..6e4ac7f8f 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java @@ -28,11 +28,6 @@ import org.springframework.security.core.context.SecurityContextImpl; */ public class SecurityContextTenantAware implements TenantAware { - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.tenancy.TenantAware#getCurrentTenantId() - */ @Override public String getCurrentTenant() { final SecurityContext context = SecurityContextHolder.getContext(); @@ -56,7 +51,7 @@ public class SecurityContextTenantAware implements TenantAware { } } - private SecurityContext buildSecurityContext(final String tenant) { + private static SecurityContext buildSecurityContext(final String tenant) { final SecurityContextImpl securityContext = new SecurityContextImpl(); securityContext.setAuthentication( new AuthenticationDelegate(SecurityContextHolder.getContext().getAuthentication(), tenant)); @@ -68,7 +63,7 @@ public class SecurityContextTenantAware implements TenantAware { * {@link Authentication} object except setting the details specifically for * a specific tenant. */ - private class AuthenticationDelegate implements Authentication { + private static final class AuthenticationDelegate implements Authentication { private static final long serialVersionUID = 1L; private final Authentication delegate; diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java index da998c87c..4432fbb67 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java @@ -29,12 +29,12 @@ import org.springframework.stereotype.Service; import com.google.common.base.Throwables; /** - * + * A Service which provide to run system code. */ @Service public class SystemSecurityContext { - private static final Logger logger = LoggerFactory.getLogger(SystemSecurityContext.class); + private static final Logger LOG = LoggerFactory.getLogger(SystemSecurityContext.class); private final TenantAware tenantAware; @@ -96,19 +96,21 @@ public class SystemSecurityContext { public T runAsSystemAsTenant(final Callable callable, final String tenant) { final SecurityContext oldContext = SecurityContextHolder.getContext(); try { - logger.debug("entering system code execution"); + LOG.debug("entering system code execution"); return tenantAware.runAsTenant(tenant, () -> { try { setSystemContext(SecurityContextHolder.getContext()); return callable.call(); - } catch (final Exception e) { + // The callable API throws a Exception and not a specific + // one + } catch (@SuppressWarnings("squid:S2221") final Exception e) { throw Throwables.propagate(e); } }); } finally { SecurityContextHolder.setContext(oldContext); - logger.debug("leaving system code execution"); + LOG.debug("leaving system code execution"); } } @@ -134,7 +136,7 @@ public class SystemSecurityContext { * {@link SpringEvalExpressions#SYSTEM_ROLE} which is allowed to execute all * secured methods. */ - public static class SystemCodeAuthentication implements Authentication { + public static final class SystemCodeAuthentication implements Authentication { private static final long serialVersionUID = 1L; private static final List AUTHORITIES = Collections diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java index 2a56adf28..9768c2390 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java @@ -50,13 +50,11 @@ import com.vaadin.ui.themes.ValoTheme; /** * Vaadin management UI. * - * - * - * */ -@SuppressWarnings("serial") @Title("hawkBit Update Server") public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { + private static final long serialVersionUID = 1L; + private static final Logger LOG = LoggerFactory.getLogger(HawkbitUI.class); private static final String EMPTY_VIEW = ""; @@ -139,7 +137,7 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { contentVerticalLayout.addComponent(content); content.setStyleName("view-content"); content.setSizeFull(); - rootLayout.setExpandRatio(contentVerticalLayout, 1.0f); + rootLayout.setExpandRatio(contentVerticalLayout, 1.0F); contentVerticalLayout.setStyleName("main-content"); contentVerticalLayout.setExpandRatio(content, 1.0F); setContent(rootLayout); @@ -154,6 +152,8 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { } final Navigator navigator = new Navigator(this, content); navigator.addViewChangeListener(new ViewChangeListener() { + private static final long serialVersionUID = 1L; + @Override public boolean beforeViewChange(final ViewChangeEvent event) { return true; @@ -200,7 +200,7 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { * as set * @return String as preferred locale */ - private String getLocaleId(final Set availableLocalesInApp) { + private static String getLocaleId(final Set availableLocalesInApp) { final String[] localeChain = getLocaleChain(); String spLocale = SPUIDefinitions.DEFAULT_LOCALE; if (null != localeChain) { @@ -220,16 +220,18 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { * * @return String as locales */ - private String[] getLocaleChain() { + private static String[] getLocaleChain() { String[] localeChain = null; // Fetch all cookies from the request final Cookie[] cookies = VaadinService.getCurrentRequest().getCookies(); - if (cookies != null) { - for (final Cookie c : cookies) { - if (c.getName().equals(SPUIDefinitions.COOKIE_NAME) && !c.getValue().isEmpty()) { - localeChain = c.getValue().split("#"); - break; - } + if (cookies == null) { + return localeChain; + } + + for (final Cookie c : cookies) { + if (c.getName().equals(SPUIDefinitions.COOKIE_NAME) && !c.getValue().isEmpty()) { + localeChain = c.getValue().split("#"); + break; } } return localeChain; @@ -237,6 +239,8 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { private class ManagementViewProvider implements ViewProvider { + private static final long serialVersionUID = 1L; + @Override public String getViewName(final String viewAndParameters) { return viewProvider.getViewName(getStartView(viewAndParameters)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java index b07aa0276..ffbb3b7bd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java @@ -158,7 +158,7 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW detailAndUploadLayout.setComponentAlignment(dadw, Alignment.MIDDLE_CENTER); } - detailAndUploadLayout.setExpandRatio(artifactDetailsLayout, 1.0f); + detailAndUploadLayout.setExpandRatio(artifactDetailsLayout, 1.0F); detailAndUploadLayout.setSizeFull(); detailAndUploadLayout.addStyleName("group"); detailAndUploadLayout.setSpacing(true); @@ -177,9 +177,9 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW mainLayout.addComponent(detailAndUploadLayout, 2, 0); mainLayout.addComponent(deleteActionsLayout, 1, 1); mainLayout.addComponent(uplaodButtonsLayout, 2, 1); - mainLayout.setRowExpandRatio(0, 1.0f); - mainLayout.setColumnExpandRatio(1, 0.5f); - mainLayout.setColumnExpandRatio(2, 0.5f); + mainLayout.setRowExpandRatio(0, 1.0F); + mainLayout.setColumnExpandRatio(1, 0.5F); + mainLayout.setColumnExpandRatio(2, 0.5F); mainLayout.setComponentAlignment(deleteActionsLayout, Alignment.BOTTOM_CENTER); mainLayout.setComponentAlignment(uplaodButtonsLayout, Alignment.BOTTOM_CENTER); return mainLayout; @@ -201,8 +201,8 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW private void maximizeSwTable() { mainLayout.removeComponent(detailAndUploadLayout); removeOtherComponents(); - mainLayout.setColumnExpandRatio(1, 1f); - mainLayout.setColumnExpandRatio(2, 0f); + mainLayout.setColumnExpandRatio(1, 1F); + mainLayout.setColumnExpandRatio(2, 0F); } private void minimizeArtifactoryDetails() { @@ -219,15 +219,15 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW mainLayout.removeComponent(smTableLayout); detailAndUploadLayout.removeComponent(dadw); removeOtherComponents(); - mainLayout.setColumnExpandRatio(1, 0f); - mainLayout.setColumnExpandRatio(2, 1f); + mainLayout.setColumnExpandRatio(1, 0F); + mainLayout.setColumnExpandRatio(2, 1F); } private void addOtherComponents() { mainLayout.addComponent(deleteActionsLayout, 1, 1); mainLayout.addComponent(uplaodButtonsLayout, 2, 1); - mainLayout.setColumnExpandRatio(1, 0.5f); - mainLayout.setColumnExpandRatio(2, 0.5f); + mainLayout.setColumnExpandRatio(1, 0.5F); + mainLayout.setColumnExpandRatio(2, 0.5F); mainLayout.setComponentAlignment(deleteActionsLayout, Alignment.BOTTOM_CENTER); mainLayout.setComponentAlignment(uplaodButtonsLayout, Alignment.BOTTOM_CENTER); } @@ -240,6 +240,8 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW private void hideDropHints() { UI.getCurrent().addClickListener(new ClickListener() { + private static final long serialVersionUID = 1L; + @Override public void click(final com.vaadin.event.MouseEvents.ClickEvent event) { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java index 80e8a2f4f..4ba722284 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java @@ -28,11 +28,6 @@ import org.vaadin.addons.lazyquerycontainer.QueryDefinition; /** * Simple implementation of generics bean query which dynamically loads artifact * beans. - * - * - * - * - * */ public class ArtifactBeanQuery extends AbstractBeanQuery { private static final long serialVersionUID = -333786310371208962L; @@ -74,7 +69,7 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { @Override protected LocalArtifact constructBean() { - return entityFactory.generateLocalArtifact(); + return getEntityFactory().generateLocalArtifact(); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java index 09444a2b3..bbab490ab 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java @@ -53,42 +53,42 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Autowired private transient SoftwareManagement softwareManagement; - + @Autowired private SwMetadataPopupLayout swMetadataPopupLayout; - + @Autowired - private EntityFactory entityFactory; - + private transient EntityFactory entityFactory; + private SoftwareModuleMetadatadetailslayout swmMetadataTable; - + /** * softwareLayout Initialize the component. */ @Override protected void init() { swmMetadataTable = new SoftwareModuleMetadatadetailslayout(); - swmMetadataTable.init(getI18n(), getPermissionChecker(),softwareManagement,swMetadataPopupLayout,entityFactory); + swmMetadataTable.init(getI18n(), getPermissionChecker(), softwareManagement, swMetadataPopupLayout, + entityFactory); super.init(); } - + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final MetadataEvent event) { - UI.getCurrent() - .access(() -> { - SoftwareModuleMetadata softwareModuleMetadata = event.getSoftwareModuleMetadata(); - if (softwareModuleMetadata != null - && isSoftwareModuleSelected(softwareModuleMetadata.getSoftwareModule())) { - if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) { - swmMetadataTable.createMetadata(event.getSoftwareModuleMetadata().getKey()); - } else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) { - swmMetadataTable.deleteMetadata(event.getSoftwareModuleMetadata().getKey()); - } - } - }); + UI.getCurrent().access(() -> { + final SoftwareModuleMetadata softwareModuleMetadata = event.getSoftwareModuleMetadata(); + if (softwareModuleMetadata != null + && isSoftwareModuleSelected(softwareModuleMetadata.getSoftwareModule())) { + if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) { + swmMetadataTable.createMetadata(event.getSoftwareModuleMetadata().getKey()); + } else if (event + .getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) { + swmMetadataTable.deleteMetadata(event.getSoftwareModuleMetadata().getKey()); + } + } + }); } - - + @Override protected String getEditButtonId() { return SPUIComponentIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; @@ -101,7 +101,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); detailsTab.addTab(swmMetadataTable, getI18n().get("caption.metadata"), null); } - + @Override protected void onEdit(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow @@ -126,7 +126,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta updateSoftwareModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); } - + populateMetadataDetails(); } @@ -188,38 +188,30 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta protected String getDetailsHeaderCaptionId() { return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } - - + @Override - protected void populateMetadataDetails(){ + protected void populateMetadataDetails() { swmMetadataTable.populateSMMetadata(getSelectedBaseEntity()); - } - - private boolean isSoftwareModuleSelected(SoftwareModule softwareModule) { - final SoftwareModule selectedUploadSWModule = artifactUploadState.getSelectedBaseSoftwareModule().isPresent() ? artifactUploadState - .getSelectedBaseSoftwareModule().get() : null; + } + + private boolean isSoftwareModuleSelected(final SoftwareModule softwareModule) { + final SoftwareModule selectedUploadSWModule = artifactUploadState.getSelectedBaseSoftwareModule().isPresent() + ? artifactUploadState.getSelectedBaseSoftwareModule().get() : null; return softwareModule != null && selectedUploadSWModule != null && selectedUploadSWModule.getName().equals(softwareModule.getName()) && selectedUploadSWModule.getVersion().equals(softwareModule.getVersion()); } - + @Override protected Boolean isMetadataIconToBeDisplayed() { return true; } - - @Override - protected String getShowMetadataButtonId() { - SoftwareModule selectedBaseEntity = getSelectedBaseEntity(); - return SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + selectedBaseEntity.getName() + "." - + selectedBaseEntity.getVersion(); - } @Override - protected void showMetadata(ClickEvent event) { - SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(getSelectedBaseEntityId()); - /* display the window */ - UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule,null)); + protected void showMetadata(final ClickEvent event) { + final SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(getSelectedBaseEntityId()); + /* display the window */ + UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule, null)); } - + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java index d627a6dd0..88a9fa779 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java @@ -8,7 +8,10 @@ */ package org.eclipse.hawkbit.ui.artifacts.smtype; +import java.util.EnumSet; + import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; +import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadViewAcceptCriteria; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; @@ -46,12 +49,11 @@ public class SMTypeFilterButtons extends AbstractFilterButtons { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleTypeEvent event) { - if (event.getSoftwareModuleTypeEnum() == SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.ADD_SOFTWARE_MODULE_TYPE - || event.getSoftwareModuleTypeEnum() == SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.UPDATE_SOFTWARE_MODULE_TYPE - || event.getSoftwareModuleTypeEnum() == SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.DELETE_SOFTWARE_MODULE_TYPE - && event.getSoftwareModuleType() != null) { + if (event.getSoftwareModuleType() != null + && EnumSet.allOf(SoftwareModuleTypeEnum.class).contains(event.getSoftwareModuleTypeEnum())) { refreshTable(); } + } @EventBusListenerMethod(scope = EventScope.SESSION) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java index 8455dea69..915aee48a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java @@ -108,7 +108,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { private UploadResultWindow currentUploadResultWindow; - private int redErrorLabelCount = 0; + private int redErrorLabelCount; private final ArtifactUploadState artifactUploadState; @@ -353,11 +353,8 @@ public class UploadConfirmationwindow implements Button.ClickListener { * label * @return Boolean */ - private Boolean isWarningIcon(final Label icon) { - if (icon.isVisible() && !icon.getStyleName().contains(SPUIStyleDefinitions.ERROR_LABEL)) { - return true; - } - return false; + private static Boolean isWarningIcon(final Label icon) { + return !isErrorIcon(icon); } /** @@ -367,14 +364,11 @@ public class UploadConfirmationwindow implements Button.ClickListener { * label * @return Boolean */ - private Boolean isErrorIcon(final Label icon) { - if (icon.isVisible() && icon.getStyleName().contains(SPUIStyleDefinitions.ERROR_LABEL)) { - return true; - } - return false; + private static Boolean isErrorIcon(final Label icon) { + return icon.isVisible() && icon.getStyleName().contains(SPUIStyleDefinitions.ERROR_LABEL); } - private Label getWarningLabel() { + private static Label getWarningLabel() { final Label warningIconLabel = new Label(); warningIconLabel.addStyleName(ValoTheme.LABEL_SMALL); warningIconLabel.setHeightUndefined(); @@ -436,7 +430,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { private void hideErrorIcon(final Label warningLabel, final int errorLabelCount, final int duplicateCount, final Label errorLabel, final String oldFileName, final Long currentSwId) { - if (warningLabel == null && (errorLabelCount > 1 || duplicateCount == 1 && errorLabelCount == 1)) { + if (warningLabel == null && (errorLabelCount > 1 || (duplicateCount == 1 && errorLabelCount == 1))) { final ArtifactManagement artifactManagement = SpringContextHelper.getBean(ArtifactManagement.class); final List artifactList = artifactManagement.findByFilenameAndSoftwareModule(oldFileName, currentSwId); @@ -486,12 +480,12 @@ public class UploadConfirmationwindow implements Button.ClickListener { uploadDetailsTable.setColumnHeader(SIZE, i18n.get("upload.size")); uploadDetailsTable.setColumnHeader(ACTION, i18n.get("upload.action")); - uploadDetailsTable.setColumnExpandRatio(FILE_NAME_LAYOUT, 0.25f); - uploadDetailsTable.setColumnExpandRatio(SW_MODULE_NAME, 0.17f); - uploadDetailsTable.setColumnExpandRatio(SHA1_CHECKSUM, 0.2f); - uploadDetailsTable.setColumnExpandRatio(MD5_CHECKSUM, 0.2f); - uploadDetailsTable.setColumnExpandRatio(SIZE, 0.12f); - uploadDetailsTable.setColumnExpandRatio(ACTION, 0.06f); + uploadDetailsTable.setColumnExpandRatio(FILE_NAME_LAYOUT, 0.25F); + uploadDetailsTable.setColumnExpandRatio(SW_MODULE_NAME, 0.17F); + uploadDetailsTable.setColumnExpandRatio(SHA1_CHECKSUM, 0.2F); + uploadDetailsTable.setColumnExpandRatio(MD5_CHECKSUM, 0.2F); + uploadDetailsTable.setColumnExpandRatio(SIZE, 0.12F); + uploadDetailsTable.setColumnExpandRatio(ACTION, 0.06F); final Object[] visibileColumn = { FILE_NAME_LAYOUT, SW_MODULE_NAME, SHA1_CHECKSUM, MD5_CHECKSUM, SIZE, ACTION }; uploadDetailsTable.setVisibleColumns(visibileColumn); @@ -548,9 +542,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { uploadConfrimationWindow.close(); } else if (event.getComponent().getId().equals(SPUIComponentIdProvider.UPLOAD_BUTTON)) { processArtifactUpload(); - } - - else if (event.getComponent().getId().startsWith(SPUIComponentIdProvider.UPLOAD_DELETE_ICON)) { + } else if (event.getComponent().getId().startsWith(SPUIComponentIdProvider.UPLOAD_DELETE_ICON)) { final String itemId = ((Button) event.getComponent()).getData().toString(); final Item item = uploadDetailsTable.getItem(((Button) event.getComponent()).getData()); final Long swId = (Long) item.getItemProperty(BASE_SOFTWARE_ID).getValue(); @@ -667,7 +659,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { } - private void closeFileStream(final FileInputStream fis, final File newFile) { + private static void closeFileStream(final FileInputStream fis, final File newFile) { if (fis != null) { try { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index af02e917b..71b041c9e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -76,6 +76,11 @@ import com.vaadin.ui.VerticalLayout; @SpringComponent public class UploadLayout extends VerticalLayout { + /** + * + */ + private static final String HTML_DIV = ""; + private static final long serialVersionUID = -566164756606779220L; private static final Logger LOG = LoggerFactory.getLogger(UploadLayout.class); @@ -248,7 +253,7 @@ public class UploadLayout extends VerticalLayout { final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); // selected software module at the time of file drop is // considered for upload - SoftwareModule selectedSw = artifactUploadState.getSelectedBaseSoftwareModule().get(); + final SoftwareModule selectedSw = artifactUploadState.getSelectedBaseSoftwareModule().get(); // reset the flag hasDirectory = Boolean.FALSE; for (final Html5File file : files) { @@ -265,7 +270,7 @@ public class UploadLayout extends VerticalLayout { } } - private void processFile(final Html5File file, SoftwareModule selectedSw) { + private void processFile(final Html5File file, final SoftwareModule selectedSw) { if (!isDirectory(file)) { if (!checkForDuplicate(file.getFileName(), selectedSw)) { artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); @@ -276,7 +281,7 @@ public class UploadLayout extends VerticalLayout { } } - private StreamVariable createStreamVariable(final Html5File file, SoftwareModule selectedSw) { + private StreamVariable createStreamVariable(final Html5File file, final SoftwareModule selectedSw) { return new UploadHandler(file.getFileName(), file.getFileSize(), UploadLayout.this, spInfo.getMaxArtifactFileSize(), null, file.getType(), selectedSw); } @@ -366,11 +371,13 @@ public class UploadLayout extends VerticalLayout { * in case of upload errors */ OutputStream saveUploadedFileDetails(final String name, final long size, final String mimeType, - SoftwareModule selectedSw) { + final SoftwareModule selectedSw) { File tempFile = null; try { tempFile = File.createTempFile("spUiArtifactUpload", null); + // we return the outputstream so we cannot close it here + @SuppressWarnings("squid:S2095") final OutputStream out = new FileOutputStream(tempFile); final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion(selectedSw.getName(), @@ -406,18 +413,12 @@ public class UploadLayout extends VerticalLayout { return checkIfSoftwareModuleIsSelected(); } - private boolean isFilesDropped(final DragAndDropEvent event) { + private static boolean isFilesDropped(final 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; + return files != null; } + return false; } Boolean checkIfSoftwareModuleIsSelected() { @@ -441,12 +442,14 @@ public class UploadLayout extends VerticalLayout { * * @param name * file name + * @param selectedSoftwareModule + * the current selected sm module * @return Boolean */ public Boolean checkIfFileIsDuplicate(final String name, final SoftwareModule selectedSoftwareModule) { Boolean isDuplicate = false; - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( - selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); + final String currentBaseSoftwareModuleKey = HawkbitCommonUtil + .getFormattedNameVersion(selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); for (final CustomFile customFile : artifactUploadState.getFileSelected()) { final String fileSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( @@ -473,7 +476,7 @@ public class UploadLayout extends VerticalLayout { void updateActionCount() { if (!artifactUploadState.getFileSelected().isEmpty()) { processBtn.setCaption(SPUILabelDefinitions.PROCESS + "
" - + artifactUploadState.getFileSelected().size() + "
"); + + artifactUploadState.getFileSelected().size() + HTML_DIV); } else { processBtn.setCaption(SPUILabelDefinitions.PROCESS); } @@ -502,6 +505,9 @@ public class UploadLayout extends VerticalLayout { return message.toString(); } + /** + * Show the duplicated message. + */ public void showDuplicateMessage() { uiNotification.displayValidationError(getDuplicateFileValidationMessage()); } @@ -510,9 +516,9 @@ public class UploadLayout extends VerticalLayout { artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); } - void updateFileSize(final String name, final long size, SoftwareModule selectedSoftwareModule) { - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( - selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); + void updateFileSize(final String name, final long size, final SoftwareModule selectedSoftwareModule) { + final String currentBaseSoftwareModuleKey = HawkbitCommonUtil + .getFormattedNameVersion(selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); for (final CustomFile customFile : artifactUploadState.getFileSelected()) { final String fileSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( @@ -594,12 +600,12 @@ public class UploadLayout extends VerticalLayout { private void setConfirmationPopupHeightWidth(final float newWidth, final float newHeight) { if (currentUploadConfirmationwindow != null) { - currentUploadConfirmationwindow.getUploadArtifactDetails().setWidth( - HawkbitCommonUtil.getArtifactUploadPopupWidth(newWidth, - SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), Unit.PIXELS); - currentUploadConfirmationwindow.getUploadDetailsTable().setHeight( - HawkbitCommonUtil.getArtifactUploadPopupHeight(newHeight, - SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), Unit.PIXELS); + currentUploadConfirmationwindow.getUploadArtifactDetails().setWidth(HawkbitCommonUtil + .getArtifactUploadPopupWidth(newWidth, SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), + Unit.PIXELS); + currentUploadConfirmationwindow.getUploadDetailsTable().setHeight(HawkbitCommonUtil + .getArtifactUploadPopupHeight(newHeight, SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), + Unit.PIXELS); } } @@ -616,12 +622,10 @@ public class UploadLayout extends VerticalLayout { && currentUploadConfirmationwindow.getCurrentUploadResultWindow() != null) { final UploadResultWindow uploadResultWindow = currentUploadConfirmationwindow .getCurrentUploadResultWindow(); - uploadResultWindow.getUploadResultsWindow().setWidth( - HawkbitCommonUtil.getArtifactUploadPopupWidth(newWidth, - SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), Unit.PIXELS); - uploadResultWindow.getUploadResultTable().setHeight( - HawkbitCommonUtil.getArtifactUploadPopupHeight(newHeight, - SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), Unit.PIXELS); + uploadResultWindow.getUploadResultsWindow().setWidth(HawkbitCommonUtil.getArtifactUploadPopupWidth(newWidth, + SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), Unit.PIXELS); + uploadResultWindow.getUploadResultTable().setHeight(HawkbitCommonUtil.getArtifactUploadPopupHeight( + newHeight, SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), Unit.PIXELS); } } @@ -632,8 +636,8 @@ public class UploadLayout extends VerticalLayout { } else { currentUploadConfirmationwindow = new UploadConfirmationwindow(this, artifactUploadState); UI.getCurrent().addWindow(currentUploadConfirmationwindow.getUploadConfrimationWindow()); - setConfirmationPopupHeightWidth(Page.getCurrent().getBrowserWindowWidth(), Page.getCurrent() - .getBrowserWindowHeight()); + setConfirmationPopupHeightWidth(Page.getCurrent().getBrowserWindowWidth(), + Page.getCurrent().getBrowserWindowHeight()); } } } @@ -682,7 +686,7 @@ public class UploadLayout extends VerticalLayout { displayDuplicateValidationMessage(); } - private void onUploadStreamingFailure(UploadStatusEvent event) { + private void onUploadStreamingFailure(final UploadStatusEvent event) { /** * If upload interrupted because of duplicate file,do not remove the * file already in upload list @@ -691,13 +695,13 @@ public class UploadLayout extends VerticalLayout { || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { final SoftwareModule sw = event.getUploadStatus().getSoftwareModule(); if (sw != null) { - getFileSelected().remove( - new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); + getFileSelected() + .remove(new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); } // failed reason to be updated only if there is error other than // duplicate file error - uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason(), event.getUploadStatus().getSoftwareModule()); + uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), + event.getUploadStatus().getFailureReason(), event.getUploadStatus().getSoftwareModule()); increaseNumberOfFileUploadsFailed(); } decreaseNumberOfFileUploadsExpected(); @@ -711,9 +715,9 @@ public class UploadLayout extends VerticalLayout { displayDuplicateValidationMessage(); } - private void onUploadSuccess(UploadStatusEvent event) { - updateFileSize(event.getUploadStatus().getFileName(), event.getUploadStatus().getContentLength(), event - .getUploadStatus().getSoftwareModule()); + private void onUploadSuccess(final UploadStatusEvent event) { + updateFileSize(event.getUploadStatus().getFileName(), event.getUploadStatus().getContentLength(), + event.getUploadStatus().getSoftwareModule()); // recorded that we now one more uploaded increaseNumberOfFilesActuallyUpload(); } @@ -730,8 +734,8 @@ public class UploadLayout extends VerticalLayout { } private boolean isUploadComplete() { - int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); - int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); + final int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); + final int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); return uploadedCount == expectedUploadsCount; } @@ -744,13 +748,13 @@ public class UploadLayout extends VerticalLayout { || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { final SoftwareModule sw = event.getUploadStatus().getSoftwareModule(); if (sw != null) { - getFileSelected().remove( - new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); + getFileSelected() + .remove(new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); } // failed reason to be updated only if there is error other than // duplicate file error - uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason(), event.getUploadStatus().getSoftwareModule()); + uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), + event.getUploadStatus().getFailureReason(), event.getUploadStatus().getSoftwareModule()); increaseNumberOfFileUploadsFailed(); decreaseNumberOfFileUploadsExpected(); } @@ -773,8 +777,8 @@ public class UploadLayout extends VerticalLayout { * @param selectedBaseSoftwareModule */ public void refreshArtifactDetailsLayout(final SoftwareModule selectedBaseSoftwareModule) { - eventBus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.ARTIFACTS_CHANGED, - selectedBaseSoftwareModule)); + eventBus.publish(this, + new SoftwareModuleEvent(SoftwareModuleEventType.ARTIFACTS_CHANGED, selectedBaseSoftwareModule)); } /** @@ -804,19 +808,19 @@ public class UploadLayout extends VerticalLayout { } void updateStatusButtonCount() { - int uploadsPending = artifactUploadState.getNumberOfFileUploadsExpected().get() + final int uploadsPending = artifactUploadState.getNumberOfFileUploadsExpected().get() - artifactUploadState.getNumberOfFilesActuallyUpload().get(); - int uploadsFailed = artifactUploadState.getNumberOfFileUploadsFailed().get(); - StringBuilder builder = new StringBuilder(""); + final int uploadsFailed = artifactUploadState.getNumberOfFileUploadsFailed().get(); + final StringBuilder builder = new StringBuilder(""); if (uploadsFailed != 0) { if (uploadsPending != 0) { - builder.append("
" + uploadsFailed + "
"); + builder.append("
" + uploadsFailed + HTML_DIV); } else { - builder.append("
" + uploadsFailed + "
"); + builder.append("
" + uploadsFailed + HTML_DIV); } } if (uploadsPending != 0) { - builder.append("
" + uploadsPending + "
"); + builder.append("
" + uploadsPending + HTML_DIV); } uploadStatusButton.setCaption(builder.toString()); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java index 06e280e4e..86a986e3a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java @@ -14,7 +14,7 @@ import com.vaadin.shared.ui.colorpicker.Color; * Provides color constants for the ColorPickerLayout * */ -public class ColorPickerConstants { +public final class ColorPickerConstants { public static final String DEFAULT_COLOR = "rgb(44,151,32)"; public static final Color START_COLOR = new Color(0, 146, 58); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java index 923c58fe3..1f80bf5ab 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java @@ -20,7 +20,7 @@ import com.vaadin.ui.Slider.ValueOutOfBoundsException; * Contains helper methods for the ColorPickerLayout to handle the ColorPicker * */ -public class ColorPickerHelper { +public final class ColorPickerHelper { private static final Logger LOG = LoggerFactory.getLogger(ColorPickerHelper.class); @@ -30,7 +30,9 @@ public class ColorPickerHelper { /** * Get color picked value as string. - * + * + * @param preview + * the color picker preview * @return String of color picked value. */ public static String getColorPickedString(final SpColorPickerPreview preview) { @@ -59,7 +61,7 @@ public class ColorPickerHelper { final int green = Integer.parseInt(colors[1]); final int blue = Integer.parseInt(colors[2]); if (colors.length > 3) { - final int alpha = (int) (Double.parseDouble(colors[3]) * 255d); + final int alpha = (int) (Double.parseDouble(colors[3]) * 255D); return new Color(red, green, blue, alpha); } return new Color(red, green, blue); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java index 050d7c79f..ff1cc3db1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractMetadataPopupLayout.java @@ -38,7 +38,6 @@ import com.vaadin.server.FontAwesome; import com.vaadin.ui.AbstractTextField.TextChangeEventMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; -import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.SelectionMode; @@ -98,7 +97,7 @@ public abstract class AbstractMetadataPopupLayout { if (ok) { - deleteMetadata(getSelectedEntity(), key, value); - uiNotification.displaySuccess(i18n.get("message.metadata.deleted.successfully", key)); - final Object selectedRow = metaDataGrid.getSelectedRow(); - metaDataGrid.getContainerDataSource().removeItem(event.getItemId()); - // force grid to refresh - metaDataGrid.clearSortOrder(); - if (!metaDataGrid.getContainerDataSource().getItemIds().isEmpty()) { - if (selectedRow != null) { - if (selectedRow.equals(event.getItemId())) { - metaDataGrid.select(metaDataGrid.getContainerDataSource().getIdByIndex(0)); - } else { - metaDataGrid.select(selectedRow); - } - } - } else { - keyTextField.clear(); - valueTextArea.clear(); - metaDataGrid.select(null); - if (hasCreatePermission()) { - keyTextField.setEnabled(true); - valueTextArea.setEnabled(true); - addIcon.setEnabled(false); - } - } + handleOkDeleteMetadata(event, key, value); } }); UI.getCurrent().addWindow(confirmDialog.getWindow()); confirmDialog.getWindow().bringToFront(); } + private void handleOkDeleteMetadata(final RendererClickEvent event, final String key, final String value) { + deleteMetadata(getSelectedEntity(), key, value); + uiNotification.displaySuccess(i18n.get("message.metadata.deleted.successfully", key)); + final Object selectedRow = metaDataGrid.getSelectedRow(); + metaDataGrid.getContainerDataSource().removeItem(event.getItemId()); + // force grid to refresh + metaDataGrid.clearSortOrder(); + if (!metaDataGrid.getContainerDataSource().getItemIds().isEmpty()) { + if (selectedRow != null) { + if (selectedRow.equals(event.getItemId())) { + metaDataGrid.select(metaDataGrid.getContainerDataSource().getIdByIndex(0)); + } else { + metaDataGrid.select(selectedRow); + } + } + } else { + clearTextFields(); + } + } + + private void clearTextFields() { + keyTextField.clear(); + valueTextArea.clear(); + metaDataGrid.select(null); + if (hasCreatePermission()) { + keyTextField.setEnabled(true); + valueTextArea.setEnabled(true); + addIcon.setEnabled(false); + } + } + private Button createAddIcon() { addIcon = SPUIComponentProvider.getButton(SPUIComponentIdProvider.METADTA_ADD_ICON_ID, i18n.get("button.save"), null, null, false, FontAwesome.PLUS, SPUIButtonStyleSmallNoBorder.class); - addIcon.addClickListener(event -> onAdd(event)); + addIcon.addClickListener(event -> onAdd()); return addIcon; } private Label createHeaderCaption() { - final Label captionLabel = SPUIComponentProvider.getLabel(i18n.get("caption.metadata"), - SPUILabelDefinitions.SP_WIDGET_CAPTION); - return captionLabel; + return SPUIComponentProvider.getLabel(i18n.get("caption.metadata"), SPUILabelDefinitions.SP_WIDGET_CAPTION); } - private IndexedContainer getMetadataContainer() { + private static IndexedContainer getMetadataContainer() { final IndexedContainer swcontactContainer = new IndexedContainer(); swcontactContainer.addContainerProperty(KEY, String.class, ""); swcontactContainer.addContainerProperty(VALUE, String.class, ""); @@ -340,7 +344,7 @@ public abstract class AbstractMetadataPopupLayout close(); + private final ClickListener closeClickListener = event -> close(); private final transient Map orginalValues; @@ -115,6 +115,10 @@ public class CommonDialogWindow extends Window implements Serializable { * the saveButtonClickListener * @param cancelButtonClickListener * the cancelButtonClickListener + * @param layout + * the abstract layout + * @param i18n + * the i18n service */ public CommonDialogWindow(final String caption, final Component content, final String helpLink, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, @@ -233,11 +237,11 @@ public class CommonDialogWindow extends Window implements Serializable { } protected void addCloseListenerForSaveButton() { - saveButton.addClickListener(close); + saveButton.addClickListener(closeClickListener); } protected void addCloseListenerForCancelButton() { - cancelButton.addClickListener(close); + cancelButton.addClickListener(closeClickListener); } protected void addComponenetListeners() { @@ -275,7 +279,8 @@ public class CommonDialogWindow extends Window implements Serializable { return false; } - private boolean isValueEquals(final AbstractField field, final Object orginalValue, final Object currentValue) { + private static boolean isValueEquals(final AbstractField field, final Object orginalValue, + final Object currentValue) { if (Set.class.equals(field.getType())) { return CollectionUtils.isEqualCollection(CollectionUtils.emptyIfNull((Collection) orginalValue), CollectionUtils.emptyIfNull((Collection) currentValue)); @@ -289,7 +294,7 @@ public class CommonDialogWindow extends Window implements Serializable { return Objects.equals(orginalValue, currentValue); } - private Object getCurrentVaue(final Component currentChangedComponent, final Object newValue, + private static Object getCurrentVaue(final Component currentChangedComponent, final Object newValue, final AbstractField field) { Object currentValue = field.getValue(); if (field instanceof Table) { @@ -365,7 +370,7 @@ public class CommonDialogWindow extends Window implements Serializable { return false; } - private List> getAllComponents(final AbstractLayout abstractLayout) { + private static List> getAllComponents(final AbstractLayout abstractLayout) { final List> components = new ArrayList<>(); final Iterator iterate = abstractLayout.iterator(); @@ -464,6 +469,7 @@ public class CommonDialogWindow extends Window implements Serializable { private class ChangeListener implements ValueChangeListener, TextChangeListener, ItemSetChangeListener { + private static final long serialVersionUID = 1L; private final Field field; public ChangeListener(final Field field) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java index b96b59f6a..df6483592 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java @@ -64,7 +64,7 @@ public abstract class AbstractTableDetailsLayout extends private Button editButton; private Button manageMetadataBtn; - + private TabSheet detailsTab; private VerticalLayout detailsLayout; @@ -140,11 +140,11 @@ public abstract class AbstractTableDetailsLayout extends editButton.addClickListener(this::onEdit); editButton.setEnabled(false); - manageMetadataBtn = SPUIComponentProvider.getButton("", "", "", null, false, - FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class); + manageMetadataBtn = SPUIComponentProvider.getButton("", "", "", null, false, FontAwesome.LIST_ALT, + SPUIButtonStyleSmallNoBorder.class); manageMetadataBtn.setId(getEditButtonId()); manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon")); - manageMetadataBtn.addClickListener(this::showMetadata); + manageMetadataBtn.addClickListener(this::showMetadata); manageMetadataBtn.setEnabled(false); detailsTab = SPUIComponentProvider.getDetailsTabSheet(); @@ -294,8 +294,8 @@ public abstract class AbstractTableDetailsLayout extends descriptionLayout = getTabLayout(); return descriptionLayout; } - - /** + + /** * Default caption of header to be displayed when no data row selected in * table. * @@ -340,7 +340,7 @@ public abstract class AbstractTableDetailsLayout extends } protected abstract void populateDetailsWidget(); - + protected abstract void populateMetadataDetails(); protected Long getSelectedBaseEntityId() { @@ -351,10 +351,8 @@ public abstract class AbstractTableDetailsLayout extends protected abstract String getName(); - protected abstract String getShowMetadataButtonId(); - protected abstract Boolean isMetadataIconToBeDisplayed(); - + protected abstract void showMetadata(Button.ClickEvent event); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java index 355080636..fd5c1d59f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java @@ -47,7 +47,7 @@ public class SoftwareModuleMetadatadetailslayout extends Table { private SpPermissionChecker permissionChecker; - private SoftwareManagement softwareManagement; + private transient SoftwareManagement softwareManagement; private SwMetadataPopupLayout swMetadataPopupLayout; @@ -55,19 +55,33 @@ public class SoftwareModuleMetadatadetailslayout extends Table { private Long selectedSWModuleId; - private transient EntityFactory entityFactory; + private transient EntityFactory entityFactory; - public void init(final I18N i18n, final SpPermissionChecker permissionChecker, - final SoftwareManagement softwareManagement, final SwMetadataPopupLayout swMetadataPopupLayout, - final EntityFactory entityFactory) { - this.i18n = i18n; - this.permissionChecker = permissionChecker; - this.softwareManagement = softwareManagement; - this.swMetadataPopupLayout = swMetadataPopupLayout; - this.entityFactory = entityFactory; - createSWMMetadataTable(); - addCustomGeneratedColumns(); - } + /** + * Initialize the layout. + * + * @param i18n + * the i18n service + * @param permissionChecker + * the permission checker service + * @param softwareManagement + * the software management service + * @param swMetadataPopupLayout + * the software module metadata popup layout + * @param entityFactory + * the entity factory service + */ + public void init(final I18N i18n, final SpPermissionChecker permissionChecker, + final SoftwareManagement softwareManagement, final SwMetadataPopupLayout swMetadataPopupLayout, + final EntityFactory entityFactory) { + this.i18n = i18n; + this.permissionChecker = permissionChecker; + this.softwareManagement = softwareManagement; + this.swMetadataPopupLayout = swMetadataPopupLayout; + this.entityFactory = entityFactory; + createSWMMetadataTable(); + addCustomGeneratedColumns(); + } /** * Populate software module metadata table. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java index b3b74836c..e8bb18e90 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java @@ -26,8 +26,6 @@ import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.TableColumn; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -49,9 +47,9 @@ import com.vaadin.ui.themes.ValoTheme; */ public abstract class AbstractTable extends Table { - private static final long serialVersionUID = 4856562746502217630L; + private static final float DEFAULT_COLUMN_NAME_MIN_SIZE = 0.8F; - private static final Logger LOG = LoggerFactory.getLogger(AbstractTable.class); + private static final long serialVersionUID = 4856562746502217630L; @Autowired protected transient EventBus.SessionEventBus eventBus; @@ -89,6 +87,13 @@ public abstract class AbstractTable extends Table { eventBus.unsubscribe(this); } + /** + * Gets the selected item id or in multiselect mode a set of selected ids. + * + * @param table + * the table to retrieve the selected ID(s) + * @return the ID(s) which are selected in the table + */ public static Set getTableValue(final Table table) { @SuppressWarnings("unchecked") Set values = (Set) table.getValue(); @@ -351,7 +356,7 @@ public abstract class AbstractTable extends Table { } protected float getColumnNameMinimizedSize() { - return 0.8F; + return DEFAULT_COLUMN_NAME_MIN_SIZE; } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java index 6d52b78d8..dbe377548 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java @@ -44,6 +44,9 @@ import com.vaadin.ui.themes.ValoTheme; /** * Abstract class for target/ds tag token layout. + * + * @param + * the special entity */ public abstract class AbstractTagToken implements Serializable { @@ -76,6 +79,9 @@ public abstract class AbstractTagToken implements Serializ @Autowired protected ManagementUIState managementUIState; + // BaseEntity implements Serializable so this entity is serializable. Maybe + // a sonar bug + @SuppressWarnings("squid:S1948") protected T selectedEntity; @PostConstruct @@ -214,11 +220,11 @@ public abstract class AbstractTagToken implements Serializ unassignTag(tagDetails.get(tokenId).getName()); } - } + private Property getItemNameProperty(final Object tokenId) { + final Item item = tokenField.getContainerDataSource().getItem(tokenId); + return item.getItemProperty("name"); + } - private Property getItemNameProperty(final Object tokenId) { - final Item item = tokenField.getContainerDataSource().getItem(tokenId); - return item.getItemProperty("name"); } private String getColor(final Object tokenId) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java index e74a331af..81ea9154c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java @@ -18,7 +18,10 @@ import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; /** - * Abstract class for target tag token layout. + * /** Abstract class for target tag token layout. + * + * @param + * the entity type */ public abstract class AbstractTargetTagToken extends AbstractTagToken { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java index 273dd3bf3..13e8eda9c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.common.tagdetails; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -86,23 +85,11 @@ public class DistributionTagToken extends AbstractTagToken { @Override protected void unassignTag(final String tagName) { final DistributionSetTagAssignmentResult result = toggleAssignment(tagName); - if (result.getUnassigned() >= 1 && (isClickedTagListEmpty() || getClickedTagList().contains(tagName))) { + if (result.getUnassigned() >= 1) { eventBus.publish(this, ManagementUIEvent.UNASSIGN_DISTRIBUTION_TAG); } } - private Boolean isClickedTagListEmpty() { - if (getClickedTagList() == null || getClickedTagList() != null && !getClickedTagList().isEmpty()) { - return true; - } - return false; - } - - /* To Be Done : this implementation will vary in views */ - private List getClickedTagList() { - return new ArrayList<>(); - } - @Override protected Boolean isToggleTagAssignmentAllowed() { return checker.hasUpdateDistributionPermission(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java index bd91302cf..2b4a853d0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.common.tagdetails; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -23,7 +22,6 @@ import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -46,9 +44,6 @@ public class TargetTagToken extends AbstractTargetTagToken { // To Be Done : have to set this value based on view??? private static final Boolean NOTAGS_SELECTED = Boolean.FALSE; - @Autowired - private UINotification uinotification; - @Autowired private transient TargetManagement targetManagement; @@ -85,23 +80,11 @@ public class TargetTagToken extends AbstractTargetTagToken { @Override protected void unassignTag(final String tagName) { final TargetTagAssignmentResult result = toggleAssignment(tagName); - if (result.getUnassigned() >= 1 && (isClickedTagListEmpty() || getClickedTagList().contains(tagName))) { + if (result.getUnassigned() >= 1) { eventBus.publish(this, ManagementUIEvent.UNASSIGN_TARGET_TAG); } } - private Boolean isClickedTagListEmpty() { - if (getClickedTagList() == null || getClickedTagList() != null && !getClickedTagList().isEmpty()) { - return true; - } - return false; - } - - /* To Be Done : this implementation will vary in views */ - private List getClickedTagList() { - return new ArrayList<>(); - } - @Override protected Boolean isToggleTagAssignmentAllowed() { return checker.hasUpdateTargetPermission(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index f3f5c5a06..8161c2895 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; -import org.eclipse.hawkbit.ui.decorators.SPUIHeaderLayoutDecorator; +import org.eclipse.hawkbit.ui.decorators.HeaderLayoutDecorator; import org.eclipse.hawkbit.ui.decorators.SPUILabelDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextAreaDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextFieldDecorator; @@ -104,7 +104,7 @@ public final class SPUIComponentProvider { * @return */ public static HorizontalLayout getHeaderLayout( - final Class tableHeaderLayoutDecorator) { + final Class tableHeaderLayoutDecorator) { // Do we really need this??? HorizontalLayout hLayout = getHorizontalLayout(new SPUIHorizontalLayout().getUiHorizontalLayout().getClass()); @@ -113,11 +113,11 @@ public final class SPUIComponentProvider { } try { - final SPUIHeaderLayoutDecorator layoutDecorator = tableHeaderLayoutDecorator.newInstance(); + final HeaderLayoutDecorator layoutDecorator = tableHeaderLayoutDecorator.newInstance(); hLayout = layoutDecorator.decorate(hLayout); } catch (final InstantiationException | IllegalAccessException exception) { - LOG.error("Error occured while creating horizontal decorator " + SPUIHeaderLayoutDecorator.class, + LOG.error("Error occured while creating horizontal decorator " + HeaderLayoutDecorator.class, exception); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/HeaderLayoutDecorator.java similarity index 72% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/HeaderLayoutDecorator.java index f7de09ad7..a71bc9031 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/HeaderLayoutDecorator.java @@ -13,13 +13,17 @@ import com.vaadin.ui.HorizontalLayout; /** * * - * + * Ui header layout decorater. */ -public interface SPUIHeaderLayoutDecorator { +@FunctionalInterface +public interface HeaderLayoutDecorator { /** + * decorate the header + * * @param layout - * @return + * the layout + * @return the decorated layout */ HorizontalLayout decorate(HorizontalLayout layout); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java index dd6f928d7..05d1f8a0a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java @@ -17,6 +17,7 @@ import com.vaadin.ui.Button; * * */ +@FunctionalInterface public interface SPUIButtonDecorator { /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 2a12bc859..65e52d448 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import java.util.List; -import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -27,8 +26,6 @@ import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; @@ -59,8 +56,6 @@ import com.vaadin.ui.themes.ValoTheme; public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { private static final long serialVersionUID = -5169398523815877767L; - private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateDistSetTypeLayout.class); - private static final String DIST_TYPE_NAME = "name"; private static final String DIST_TYPE_DESCRIPTION = "description"; private static final String DIST_TYPE_MANDATORY = "mandatory"; @@ -84,8 +79,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { private IndexedContainer originalSelectedTableContainer; - private Map mandatoryCheckboxMap; - @Override protected void createRequiredComponents() { @@ -152,9 +145,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { twinColumnLayout.setComponentAlignment(sourceTable, Alignment.MIDDLE_LEFT); twinColumnLayout.setComponentAlignment(selectButtonLayout, Alignment.MIDDLE_CENTER); twinColumnLayout.setComponentAlignment(selectedTable, Alignment.MIDDLE_RIGHT); - twinColumnLayout.setExpandRatio(sourceTable, 0.45f); - twinColumnLayout.setExpandRatio(selectButtonLayout, 0.07f); - twinColumnLayout.setExpandRatio(selectedTable, 0.48f); + twinColumnLayout.setExpandRatio(sourceTable, 0.45F); + twinColumnLayout.setExpandRatio(selectButtonLayout, 0.07F); + twinColumnLayout.setExpandRatio(selectedTable, 0.48F); sourceTable.setVisibleColumns(new Object[] { DIST_TYPE_NAME }); return twinColumnLayout; } @@ -226,7 +219,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { sourceTable.setVisibleColumns(new Object[] { DIST_TYPE_NAME }); sourceTable.setColumnHeaders(i18n.get("header.dist.twintable.available")); - sourceTable.setColumnExpandRatio(DIST_TYPE_NAME, 1.0f); + sourceTable.setColumnExpandRatio(DIST_TYPE_NAME, 1.0F); getSourceTableData(); addTooltip(); sourceTable.select(sourceTable.firstItemId()); @@ -413,7 +406,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { } } - private void checkMandatoryAndAddMandatoryModuleType(final DistributionSetType updateDistSetType, + private static void checkMandatoryAndAddMandatoryModuleType(final DistributionSetType updateDistSetType, final Boolean isMandatory, final SoftwareModuleType swModuleType) { if (isMandatory) { updateDistSetType.addMandatoryModuleType(swModuleType); @@ -488,7 +481,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { * * @return */ - private LazyQueryContainer getDistSetTypeLazyQueryContainer() { + private static LazyQueryContainer getDistSetTypeLazyQueryContainer() { final LazyQueryContainer disttypeContainer = HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(DistributionSetTypeBeanQuery.class)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index 3eab8a402..06b23c51b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -65,7 +65,6 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private static final long serialVersionUID = -4595004466943546669L; private static final String SOFT_MODULE = "softwareModule"; - @Autowired private ManageDistUIState manageDistUIState; @@ -86,7 +85,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private DsMetadataPopupLayout dsMetadataPopupLayout; @Autowired - private EntityFactory entityFactory; + private transient EntityFactory entityFactory; private SoftwareModuleDetailsTable softwareModuleTable; @@ -181,7 +180,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet return null; } - private String getUnsavedAssigedSwModule(final String name, final String version) { + private static String getUnsavedAssigedSwModule(final String name, final String version) { return HawkbitCommonUtil.getFormattedNameVersion(name, version); } @@ -396,14 +395,6 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet return true; } - @Override - protected String getShowMetadataButtonId() { - final DistributionSetIdName lastselectedDistDS = manageDistUIState.getLastSelectedDistribution().isPresent() - ? manageDistUIState.getLastSelectedDistribution().get() : null; - return SPUIComponentIdProvider.DS_TABLE_MANAGE_METADATA_ID + "." + lastselectedDistDS.getName() + "." - + lastselectedDistDS.getVersion(); - } - private boolean isDistributionSetSelected(final DistributionSet ds) { final DistributionSetIdName lastselectedDistDS = manageDistUIState.getLastSelectedDistribution().isPresent() ? manageDistUIState.getLastSelectedDistribution().get() : null; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java index 0d433d910..8b035de45 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetadataPopupLayout.java @@ -34,7 +34,7 @@ public class DsMetadataPopupLayout extends AbstractMetadataPopupLayout { - SoftwareModuleMetadata softwareModuleMetadata = event.getSoftwareModuleMetadata(); - if (softwareModuleMetadata != null - && isSoftwareModuleSelected(softwareModuleMetadata.getSoftwareModule())) { - if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) { - swmMetadataTable.createMetadata(event.getSoftwareModuleMetadata().getKey()); - } else if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) { - swmMetadataTable.deleteMetadata(event.getSoftwareModuleMetadata().getKey()); - } - } - }); + UI.getCurrent().access(() -> { + final SoftwareModuleMetadata softwareModuleMetadata = event.getSoftwareModuleMetadata(); + if (softwareModuleMetadata != null + && isSoftwareModuleSelected(softwareModuleMetadata.getSoftwareModule())) { + if (event.getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.CREATE_SOFTWARE_MODULE_METADATA) { + swmMetadataTable.createMetadata(event.getSoftwareModuleMetadata().getKey()); + } else if (event + .getMetadataUIEvent() == MetadataEvent.MetadataUIEvent.DELETE_SOFTWARE_MODULE_METADATA) { + swmMetadataTable.deleteMetadata(event.getSoftwareModuleMetadata().getKey()); + } + } + }); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -119,7 +120,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); detailsTab.addTab(swmMetadataTable, getI18n().get("caption.metadata"), null); - } + } @Override protected String getDefaultCaption() { @@ -196,15 +197,15 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay protected String getDetailsHeaderCaptionId() { return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } - + @Override protected void populateMetadataDetails() { swmMetadataTable.populateSMMetadata(getSelectedBaseEntity()); } - private boolean isSoftwareModuleSelected(SoftwareModule softwareModule) { - final Long selectedDistSWModuleId = manageDistUIState.getSelectedBaseSwModuleId().isPresent() ? manageDistUIState - .getSelectedBaseSwModuleId().get() : null; + private boolean isSoftwareModuleSelected(final SoftwareModule softwareModule) { + final Long selectedDistSWModuleId = manageDistUIState.getSelectedBaseSwModuleId().isPresent() + ? manageDistUIState.getSelectedBaseSwModuleId().get() : null; return softwareModule != null && selectedDistSWModuleId != null && selectedDistSWModuleId.equals(softwareModule.getId()); } @@ -213,17 +214,10 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay protected Boolean isMetadataIconToBeDisplayed() { return true; } - - @Override - protected String getShowMetadataButtonId() { - SoftwareModule selectedBaseEntity = getSelectedBaseEntity(); - return SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + selectedBaseEntity.getName() + "." - + selectedBaseEntity.getVersion(); - } @Override - protected void showMetadata(ClickEvent event) { - SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(getSelectedBaseEntityId()); + protected void showMetadata(final ClickEvent event) { + final SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(getSelectedBaseEntityId()); UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule, null)); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java index 1aaafd905..853c6f095 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java @@ -13,11 +13,9 @@ package org.eclipse.hawkbit.ui.filter; * mechanism. The filter expression can evaluate if e.g. Targets should * currently be added to the target list or if the current enabled filtered will * filter the target and not show the newly created target. - * - * - * * */ +@FunctionalInterface public interface FilterExpression { /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index b785ae8b6..1023d98ed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -60,8 +60,7 @@ import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; /** - * - * + * A Vaadin layout for create or update the target filter. */ @SpringComponent @ViewScope @@ -494,11 +493,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button if (filterManagementUIState.isCreateFilterViewDisplayed() && !doesAlreadyExists()) { createTargetFilterQuery(); } else { - if (!nameTextField.getValue().equals(oldFilterName) && !doesAlreadyExists()) { - updateCustomFilter(); - } else { - updateCustomFilter(); - } + updateCustomFilter(); } } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java index 6dc1d7a69..9992b09e2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java @@ -59,7 +59,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail private DsMetadataPopupLayout dsMetadataPopupLayout; @Autowired - private EntityFactory entityFactory; + private transient EntityFactory entityFactory; private SoftwareModuleDetailsTable softwareModuleTable; @@ -193,15 +193,6 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail return true; } - @Override - protected String getShowMetadataButtonId() { - final DistributionSetIdName lastselectedDistDS = managementUIState.getLastSelectedDistribution().isPresent() - ? managementUIState.getLastSelectedDistribution().get() : null; - - return SPUIComponentIdProvider.DS_TABLE_MANAGE_METADATA_ID + "." + lastselectedDistDS.getName() + "." - + lastselectedDistDS.getVersion(); - } - private boolean isDistributionSetSelected(final DistributionSet ds) { final DistributionSetIdName lastselectedManageDS = managementUIState.getLastSelectedDistribution().isPresent() ? managementUIState.getLastSelectedDistribution().get() : null; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java index 56fdd9114..6e4714e14 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java @@ -104,7 +104,7 @@ public class DistributionTable extends AbstractNamedVersionTable { return; } targetAddUpdateWindowLayout.getWindow(getSelectedBaseEntity().getControllerId()); - // targetAddUpdateWindowLayout.populateValuesOfTarget(getSelectedBaseEntity().getControllerId()); openWindow(); } @@ -229,7 +228,7 @@ public class TargetDetails extends AbstractTableDetailsLayout { * as Module (JVM|OS|AH) * @return Label as UI */ - private Label getSWModlabel(final String labelName, final SoftwareModule swModule) { + private static Label getSWModlabel(final String labelName, final SoftwareModule swModule) { return SPUIComponentProvider.createNameValueLabel(labelName + " : ", swModule.getName(), swModule.getVersion()); } @@ -253,24 +252,19 @@ public class TargetDetails extends AbstractTableDetailsLayout { return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } - @Override - protected String getShowMetadataButtonId() { - return null; - } - @Override protected Boolean isMetadataIconToBeDisplayed() { return false; } @Override - protected void showMetadata(ClickEvent event) { - //No implementation required + protected void showMetadata(final ClickEvent event) { + // No implementation required } @Override protected void populateMetadataDetails() { - //No implementation required + // No implementation required } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 0a0eaaa7e..ec0ad0c55 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -933,6 +933,7 @@ public class TargetTable extends AbstractTable { /** * Select all rows in the table. */ + @Override public void selectAll() { // As Vaadin Table only returns the current ItemIds which are visible @@ -1033,4 +1034,4 @@ public class TargetTable extends AbstractTable { private boolean isFilteredByTags() { return !managementUIState.getTargetTableFilters().getClickedTargetTags().isEmpty(); } -} \ No newline at end of file +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java index 1caafe307..defcc82c0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java @@ -56,6 +56,11 @@ import com.vaadin.ui.themes.ValoTheme; @UIScope public final class DashboardMenu extends CustomComponent { + private static final String STYLE_VISIBLE = "valo-menu-visible"; + public static final String ID = "dashboard-menu"; + public static final String REPORTS_BADGE_ID = "dashboard-menu-reports-badge"; + public static final String NOTIFICATIONS_BADGE_ID = "dashboard-menu-notifications-badge"; + @Autowired private I18N i18n; @@ -67,11 +72,6 @@ public final class DashboardMenu extends CustomComponent { private static final long serialVersionUID = 5394474618559481462L; - public static final String ID = "dashboard-menu"; - public static final String REPORTS_BADGE_ID = "dashboard-menu-reports-badge"; - public static final String NOTIFICATIONS_BADGE_ID = "dashboard-menu-notifications-badge"; - private static final String STYLE_VISIBLE = "valo-menu-visible"; - // this should be resolved when we introduce event bus on UI to just inform // the buttons directly via events private final List menuButtons = new ArrayList<>(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 05eabf249..8a7d11df1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -44,8 +44,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -80,8 +78,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private static final long serialVersionUID = 2999293468801479916L; - private static final Logger LOG = LoggerFactory.getLogger(AddUpdateRolloutWindowLayout.class); - private static final String MESSAGE_ROLLOUT_FIELD_VALUE_RANGE = "message.rollout.field.value.range"; private static final String MESSAGE_ENTER_NUMBER = "message.enter.number"; @@ -154,6 +150,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { buildLayout(); } + /** + * Get the window. + * + * @param rolloutId + * the rollout id + * @return the window + */ public CommonDialogWindow getWindow(final Long rolloutId) { window = getWindow(); populateData(rolloutId); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index b58e2e7b8..9ebb1d065 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -443,7 +443,7 @@ public class RolloutListGrid extends AbstractGrid { return null; } - private String getDSDetails(final Item rolloutItem) { + private static String getDSDetails(final Item rolloutItem) { final StringBuilder swModuleNames = new StringBuilder(); final StringBuilder swModuleVendors = new StringBuilder(); final Set swModules = (Set) rolloutItem.getItemProperty(SW_MODULES).getValue(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java index 15f51877d..9a3a54a5e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java @@ -24,7 +24,7 @@ import com.vaadin.ui.GridLayout; * duration in the DurationField or he can configure using the global duration * by changing the CheckBox. */ -public class DurationConfigField extends GridLayout implements ConfigurationItem { +public final class DurationConfigField extends GridLayout implements ConfigurationItem { private static final long serialVersionUID = 1L; @@ -130,45 +130,96 @@ public class DurationConfigField extends GridLayout implements ConfigurationItem configurationChangeListeners.add(listener); } + /** + * Create a DurationConfigFieldBuilder. + * + * @return the builder + */ public static DurationConfigFieldBuilder builder() { return new DurationConfigFieldBuilder(); } - public static class DurationConfigFieldBuilder { + /** + * Builder for the calendar widget. + * + */ + public static final class DurationConfigFieldBuilder { private final DurationConfigField field; - private Duration globalDuration = null; - private Duration tenantDuration = null; + private Duration globalDuration; + private Duration tenantDuration; private DurationConfigFieldBuilder() { field = new DurationConfigField(); - }; + } + /** + * set the checkbox tooltip. + * + * @param label + * the tooltip + * @return the builder + */ public DurationConfigFieldBuilder checkBoxTooltip(final String label) { field.setCheckBoxTooltip(label); return this; } + /** + * set the global duration. + * + * @param globalDuration + * the global duration + * @return the builder + */ public DurationConfigFieldBuilder globalDuration(final Duration globalDuration) { this.globalDuration = globalDuration; return this; } + /** + * set the caption. + * + * @param caption + * the caption + * @return the builder + */ public DurationConfigFieldBuilder caption(final String caption) { field.setCaption(caption); return this; } + /** + * set the range. + * + * @param minDuration + * min duration + * @param maxDuration + * max duration + * @return the builder + */ public DurationConfigFieldBuilder range(final Duration minDuration, final Duration maxDuration) { field.setAllowedRange(minDuration, maxDuration); return this; } + /** + * set the tenant duration. + * + * @param tenantDuration + * the duration + * @return the builder + */ public DurationConfigFieldBuilder tenantDuration(final Duration tenantDuration) { this.tenantDuration = tenantDuration; return this; } + /** + * Create the {@link DurationConfigField}. + * + * @return the {@link DurationConfigField} + */ public DurationConfigField build() { if (globalDuration == null) { throw new IllegalStateException( @@ -178,5 +229,5 @@ public class DurationConfigField extends GridLayout implements ConfigurationItem field.init(globalDuration, tenantDuration); return field; } - }; + } }