Merge branch 'feature_configurable_mgmt_sim_scenario' of https://github.com/bsinno/hawkbit.git into feature_configurable_mgmt_sim_scenario

This commit is contained in:
kaizimmerm
2016-06-21 18:05:39 +02:00
8 changed files with 91 additions and 64 deletions

View File

@@ -96,7 +96,11 @@ public abstract class AbstractSimulatedDevice {
this.pollDelaySec = pollDelaySec; this.pollDelaySec = pollDelaySec;
} }
abstract public void poll(); /**
* Can be called by a scheduler to trigger a device polling, like in real
* scenarios devices are frequently asking for updates etc.
*/
public abstract void poll();
public int getPollDelaySec() { public int getPollDelaySec() {
return pollDelaySec; return pollDelaySec;

View File

@@ -76,7 +76,6 @@ public class GenerateDialog extends Window {
pollDelayTextField = createRequiredTextfield("poll delay (sec)", new ObjectProperty<Integer>(10), pollDelayTextField = createRequiredTextfield("poll delay (sec)", new ObjectProperty<Integer>(10),
FontAwesome.CLOCK_O, new RangeValidator<Integer>("Must be between 1 and 60", Integer.class, 1, 60)); FontAwesome.CLOCK_O, new RangeValidator<Integer>("Must be between 1 and 60", Integer.class, 1, 60));
pollDelayTextField.setVisible(false);
pollUrlTextField = createRequiredTextfield("base poll URL endpoint", "http://localhost:8080", pollUrlTextField = createRequiredTextfield("base poll URL endpoint", "http://localhost:8080",
FontAwesome.FLAG_O, new RegexpValidator( FontAwesome.FLAG_O, new RegexpValidator(
@@ -193,7 +192,6 @@ public class GenerateDialog extends Window {
protocolGroup.select(Protocol.DMF_AMQP); protocolGroup.select(Protocol.DMF_AMQP);
protocolGroup.addValueChangeListener(event -> { protocolGroup.addValueChangeListener(event -> {
final boolean directDeviceOptionSelected = event.getProperty().getValue().equals(Protocol.DDI_HTTP); final boolean directDeviceOptionSelected = event.getProperty().getValue().equals(Protocol.DDI_HTTP);
pollDelayTextField.setVisible(directDeviceOptionSelected);
pollUrlTextField.setVisible(directDeviceOptionSelected); pollUrlTextField.setVisible(directDeviceOptionSelected);
gatewayTokenTextField.setVisible(directDeviceOptionSelected); gatewayTokenTextField.setVisible(directDeviceOptionSelected);
}); });

View File

@@ -35,7 +35,9 @@ import org.springframework.beans.factory.annotation.Qualifier;
/** /**
* *
* Default getting started scenario. * A configurable scenario which runs the configured scenarios.
*
* @see {@link ClientConfigurationProperties#getScenarios()}
* *
*/ */
public class ConfigurableScenario { public class ConfigurableScenario {

View File

@@ -24,82 +24,73 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_REPO_ENTITY_ALRREADY_EXISTS("hawkbit.server.error.repo.entitiyAlreayExists", SP_REPO_ENTITY_ALRREADY_EXISTS("hawkbit.server.error.repo.entitiyAlreayExists", "The given entity already exists in database"),
"The given entity already exists in database"),
/**
*
*/
SP_REPO_ENTITY_NOT_EXISTS("hawkbit.server.error.repo.entitiyNotFound",
"The given entity does not exist in database"),
/**
*
*/
SP_REPO_CONCURRENT_MODIFICATION("hawkbit.server.error.repo.concurrentModification",
"The given entity has been changed by another user/session"),
/**
*
*/
SP_REST_SORT_PARAM_SYNTAX("hawkbit.server.error.rest.param.sortParamSyntax",
"The given sort paramter is not well formed"),
/** /**
* *
*/ */
SP_REST_RSQL_SEARCH_PARAM_SYNTAX("hawkbit.server.error.rest.param.rsqlParamSyntax", SP_REPO_INVALID_TARGET_ADDRESS("hawkbit.server.error.repo.invalidTargetAddress", "The target address is not well formed"),
"The given search paramter is not well formed"), /**
*
*/
SP_REPO_ENTITY_NOT_EXISTS("hawkbit.server.error.repo.entitiyNotFound", "The given entity does not exist in database"),
/**
*
*/
SP_REPO_CONCURRENT_MODIFICATION("hawkbit.server.error.repo.concurrentModification", "The given entity has been changed by another user/session"),
/**
*
*/
SP_REST_SORT_PARAM_SYNTAX("hawkbit.server.error.rest.param.sortParamSyntax", "The given sort paramter is not well formed"),
/** /**
* *
*/ */
SP_REST_RSQL_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.rsqlInvalidField", SP_REST_RSQL_SEARCH_PARAM_SYNTAX("hawkbit.server.error.rest.param.rsqlParamSyntax", "The given search paramter is not well formed"),
"The given search parameter field does not exist"),
/** /**
* *
*/ */
SP_REST_SORT_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.invalidField", SP_REST_RSQL_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.rsqlInvalidField", "The given search parameter field does not exist"),
"The given sort parameter field does not exist"),
/** /**
* *
*/ */
SP_REST_SORT_PARAM_INVALID_DIRECTION("hawkbit.server.error.rest.param.invalidDirection", SP_REST_SORT_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.invalidField", "The given sort parameter field does not exist"),
"The given sort parameter direction does not exist"),
/** /**
* *
*/ */
SP_REST_BODY_NOT_READABLE("hawkbit.server.error.rest.body.notReadable", SP_REST_SORT_PARAM_INVALID_DIRECTION("hawkbit.server.error.rest.param.invalidDirection", "The given sort parameter direction does not exist"),
"The given request body is not well formed"),
/**
*
*/
SP_ARTIFACT_UPLOAD_FAILED("hawkbit.server.error.artifact.uploadFailed",
"Upload of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.md5.match", SP_REST_BODY_NOT_READABLE("hawkbit.server.error.rest.body.notReadable", "The given request body is not well formed"),
"Upload of artifact failed as the provided MD5 checksum did not match with the provided artifact."), /**
*
*/
SP_ARTIFACT_UPLOAD_FAILED("hawkbit.server.error.artifact.uploadFailed", "Upload of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.sha1.match", SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.md5.match", "Upload of artifact failed as the provided MD5 checksum did not match with the provided artifact."),
"Upload of artifact failed as the provided SHA1 checksum did not match with the provided artifact."),
/** /**
* *
*/ */
SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.sha1.match", "Upload of artifact failed as the provided SHA1 checksum did not match with the provided artifact."),
"Creation if Distribution Set failed as module is missing that is configured as mandatory."),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", "Creation if Distribution Set failed as module is missing that is configured as mandatory."),
"Upload of artifact failed as the file exceeds its maximum permitted size"),
/**
*
*/
SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", "Upload of artifact failed as the file exceeds its maximum permitted size"),
/** /**
* *
*/ */
@@ -108,63 +99,53 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_ARTIFACT_DELETE_FAILED("hawkbit.server.error.artifact.deleteFailed", SP_ARTIFACT_DELETE_FAILED("hawkbit.server.error.artifact.deleteFailed", "Deletion of artifact failed with internal server error."),
"Deletion of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ARTIFACT_LOAD_FAILED("hawkbit.server.error.artifact.loadFailed", SP_ARTIFACT_LOAD_FAILED("hawkbit.server.error.artifact.loadFailed", "Load of artifact failed with internal server error."),
"Load of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ACTION_STATUS_TO_MANY_ENTRIES("hawkbit.server.error.action.status.tooManyEntries", SP_ACTION_STATUS_TO_MANY_ENTRIES("hawkbit.server.error.action.status.tooManyEntries", "Too many status entries have been inserted."),
"Too many status entries have been inserted."),
/** /**
* *
*/ */
SP_ATTRIBUTES_TO_MANY_ENTRIES("hawkbit.server.error.target.attributes.tooManyEntries", SP_ATTRIBUTES_TO_MANY_ENTRIES("hawkbit.server.error.target.attributes.tooManyEntries", "Too many attribute entries have been inserted."),
"Too many attribute entries have been inserted."),
/** /**
* error message, which describes that the action can not be canceled cause * error message, which describes that the action can not be canceled cause
* the action is inactive. * the action is inactive.
*/ */
SP_ACTION_NOT_CANCELABLE("hawkbit.server.error.action.notcancelable", SP_ACTION_NOT_CANCELABLE("hawkbit.server.error.action.notcancelable", "Only active actions which are in status pending are canceable."),
"Only active actions which are in status pending are canceable."),
/** /**
* error message, which describes that the action can not be force quit * error message, which describes that the action can not be force quit
* cause the action is inactive. * cause the action is inactive.
*/ */
SP_ACTION_NOT_FORCE_QUITABLE("hawkbit.server.error.action.notforcequitable", SP_ACTION_NOT_FORCE_QUITABLE("hawkbit.server.error.action.notforcequitable", "Only active actions which are in status pending can be force quit."),
"Only active actions which are in status pending can be force quit."),
/** /**
* *
*/ */
SP_DS_INCOMPLETE("hawkbit.server.error.distributionset.incomplete", SP_DS_INCOMPLETE("hawkbit.server.error.distributionset.incomplete", "Distribution set is assigned to a a target that is incomplete (i.e. mandatory modules are missing)"),
"Distribution set is assigned to a a target that is incomplete (i.e. mandatory modules are missing)"),
/** /**
* *
*/ */
SP_DS_TYPE_UNDEFINED("hawkbit.server.error.distributionset.type.undefined", SP_DS_TYPE_UNDEFINED("hawkbit.server.error.distributionset.type.undefined", "Distribution set type is not yet defined. Modules cannot be added until definition."),
"Distribution set type is not yet defined. Modules cannot be added until definition."),
/** /**
* *
*/ */
SP_DS_MODULE_UNSUPPORTED("hawkbit.server.error.distributionset.modules.unsupported", SP_DS_MODULE_UNSUPPORTED("hawkbit.server.error.distributionset.modules.unsupported", "Distribution set type does not contain the given module, i.e. is incompatible."),
"Distribution set type does not contain the given module, i.e. is incompatible."),
/** /**
* *
*/ */
SP_REPO_TENANT_NOT_EXISTS("hawkbit.server.error.repo.tenantNotExists", SP_REPO_TENANT_NOT_EXISTS("hawkbit.server.error.repo.tenantNotExists", "The entity cannot be inserted due the tenant does not exists"),
"The entity cannot be inserted due the tenant does not exists"),
/** /**
* *
@@ -174,14 +155,12 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_REPO_ENTITY_READ_ONLY("hawkbit.server.error.entityreadonly", SP_REPO_ENTITY_READ_ONLY("hawkbit.server.error.entityreadonly", "The given entity is read only and the change cannot be completed."),
"The given entity is read only and the change cannot be completed."),
/** /**
* *
*/ */
SP_CONFIGURATION_VALUE_INVALID("hawkbit.server.error.configValueInvalid", SP_CONFIGURATION_VALUE_INVALID("hawkbit.server.error.configValueInvalid", "The given configuration value is invalid."),
"The given configuration value is invalid."),
/** /**
* *
*/ */
@@ -190,8 +169,7 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_ROLLOUT_ILLEGAL_STATE("hawkbit.server.error.rollout.illegalstate", SP_ROLLOUT_ILLEGAL_STATE("hawkbit.server.error.rollout.illegalstate", "The rollout is currently in the wrong state for the current operation");
"The rollout is currently in the wrong state for the current operation");
private final String key; private final String key;
private final String message; private final String message;

View File

@@ -159,11 +159,6 @@
<artifactId>spring-context-support</artifactId> <artifactId>spring-context-support</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.4</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -0,0 +1,42 @@
/**
* 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.repository.exception;
import org.eclipse.hawkbit.exception.SpServerError;
import org.eclipse.hawkbit.exception.SpServerRtException;
/**
* Exception which is thrown when trying to set an invalid target address.
*/
public class InvalidTargetAddressException extends SpServerRtException {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param message
* the message for this exception
*/
public InvalidTargetAddressException(final String message) {
super(message, SpServerError.SP_REPO_INVALID_TARGET_ADDRESS);
}
/**
*
* @param message
* the message for this exception
* @param cause
* the cause for this exception
*/
public InvalidTargetAddressException(final String message, final Throwable cause) {
super(message, SpServerError.SP_REPO_INVALID_TARGET_ADDRESS, cause);
}
}

View File

@@ -37,6 +37,7 @@ import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient; import javax.persistence.Transient;
import org.eclipse.hawkbit.repository.exception.InvalidTargetAddressException;
import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder;
import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder;
import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet;
@@ -173,10 +174,16 @@ public class JpaTargetInfo implements Persistable<Long>, TargetInfo {
* @throws IllegalArgumentException * @throws IllegalArgumentException
* If the given string violates RFC&nbsp;2396 * If the given string violates RFC&nbsp;2396
*/ */
@Override
public void setAddress(final String address) { public void setAddress(final String address) {
// check if this is a real URI // check if this is a real URI
if (address != null) { if (address != null) {
try {
URI.create(address); URI.create(address);
} catch (final IllegalArgumentException e) {
throw new InvalidTargetAddressException(
"The given address " + address + " violates the RFC-2396 specification", e);
}
} }
this.address = address; this.address = address;

View File

@@ -67,6 +67,7 @@ public class ResponseExceptionHandler {
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_ROLLOUT_ILLEGAL_STATE, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_ROLLOUT_ILLEGAL_STATE, HttpStatus.BAD_REQUEST);
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_VALUE_INVALID, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_VALUE_INVALID, HttpStatus.BAD_REQUEST);
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_KEY_INVALID, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_KEY_INVALID, HttpStatus.BAD_REQUEST);
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_INVALID_TARGET_ADDRESS, HttpStatus.BAD_REQUEST);
} }
private static HttpStatus getStatusOrDefault(final SpServerError error) { private static HttpStatus getStatusOrDefault(final SpServerError error) {