move entity validation to domain specific packages to avoid typing problems
This commit is contained in:
parent
99ec74386a
commit
6d286d18a9
@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
|
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
|
||||||
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
|
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
|
||||||
|
import net.hostsharing.hsadminng.hs.validation.Validatable;
|
||||||
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
|
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
|
||||||
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
|
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
|
||||||
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
|
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
|
||||||
@ -65,7 +66,7 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
|
|||||||
@Setter
|
@Setter
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class HsBookingItemEntity implements Stringifyable, RbacObject {
|
public class HsBookingItemEntity implements Stringifyable, RbacObject, Validatable<HsBookingItemEntity, HsBookingItemType> {
|
||||||
|
|
||||||
private static Stringify<HsBookingItemEntity> stringify = stringify(HsBookingItemEntity.class)
|
private static Stringify<HsBookingItemEntity> stringify = stringify(HsBookingItemEntity.class)
|
||||||
.withProp(HsBookingItemEntity::getDebitor)
|
.withProp(HsBookingItemEntity::getDebitor)
|
||||||
@ -142,6 +143,11 @@ public class HsBookingItemEntity implements Stringifyable, RbacObject {
|
|||||||
":" + caption;
|
":" + caption;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getProperties() {
|
||||||
|
return resources;
|
||||||
|
}
|
||||||
|
|
||||||
public static RbacView rbac() {
|
public static RbacView rbac() {
|
||||||
return rbacViewFor("bookingItem", HsBookingItemEntity.class)
|
return rbacViewFor("bookingItem", HsBookingItemEntity.class)
|
||||||
.withIdentityView(SQL.query("""
|
.withIdentityView(SQL.query("""
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
package net.hostsharing.hsadminng.hs.booking.item;
|
||||||
|
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
|
||||||
|
|
||||||
|
import jakarta.validation.ValidationException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static java.util.Arrays.stream;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class HsBookingItemEntityValidators {
|
||||||
|
|
||||||
|
private static final Map<Enum<HsBookingItemType>, HsEntityValidator<HsBookingItemEntity, HsBookingItemType>> validators = new HashMap<>();
|
||||||
|
|
||||||
|
public static void register(final Enum<HsBookingItemType> type, final HsEntityValidator<HsBookingItemEntity, HsBookingItemType> validator) {
|
||||||
|
stream(validator.propertyValidators).forEach( entry -> {
|
||||||
|
entry.verifyConsistency(Map.entry(type, validator));
|
||||||
|
});
|
||||||
|
validators.put(type, validator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HsEntityValidator<HsBookingItemEntity, HsBookingItemType> forType(final Enum<HsBookingItemType> type) {
|
||||||
|
return validators.get(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<? extends Enum<?>> types() {
|
||||||
|
return validators.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
static HsBookingItemEntity valid(final HsBookingItemEntity entityToSave) {
|
||||||
|
final var violations = HsBookingItemEntityValidators.forType(entityToSave.getType()).validate(entityToSave);
|
||||||
|
if (!violations.isEmpty()) {
|
||||||
|
throw new ValidationException(violations.toString());
|
||||||
|
}
|
||||||
|
return entityToSave;
|
||||||
|
}
|
||||||
|
}
|
@ -8,10 +8,10 @@ import static net.hostsharing.hsadminng.hs.validation.EnumerationPropertyValidat
|
|||||||
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class HsCloudServerAssetValidator extends HsEntityValidator {
|
class HsCloudServerAssetValidator extends HsEntityValidator<HsHostingAssetEntity, HsHostingAssetType> {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
HsEntityValidator.register(CLOUD_SERVER, new HsCloudServerAssetValidator());
|
HsHostingAssetEntityValidators.register(CLOUD_SERVER, new HsCloudServerAssetValidator());
|
||||||
}
|
}
|
||||||
|
|
||||||
public HsCloudServerAssetValidator() {
|
public HsCloudServerAssetValidator() {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||||
|
|
||||||
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
|
|
||||||
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.api.HsHostingAssetsApi;
|
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.api.HsHostingAssetsApi;
|
||||||
|
|
||||||
import net.hostsharing.hsadminng.context.Context;
|
import net.hostsharing.hsadminng.context.Context;
|
||||||
@ -17,11 +16,11 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;
|
import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;
|
||||||
|
|
||||||
import jakarta.persistence.EntityNotFoundException;
|
import jakarta.persistence.EntityNotFoundException;
|
||||||
import jakarta.validation.ValidationException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntityValidators.valid;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class HsHostingAssetController implements HsHostingAssetsApi {
|
public class HsHostingAssetController implements HsHostingAssetsApi {
|
||||||
@ -118,19 +117,11 @@ public class HsHostingAssetController implements HsHostingAssetsApi {
|
|||||||
|
|
||||||
new HsHostingAssetEntityPatcher(current).apply(body);
|
new HsHostingAssetEntityPatcher(current).apply(body);
|
||||||
|
|
||||||
final var saved = assetRepo.save(current);
|
final var saved = assetRepo.save(valid(current));
|
||||||
final var mapped = mapper.map(saved, HsHostingAssetResource.class);
|
final var mapped = mapper.map(saved, HsHostingAssetResource.class);
|
||||||
return ResponseEntity.ok(mapped);
|
return ResponseEntity.ok(mapped);
|
||||||
}
|
}
|
||||||
|
|
||||||
private HsHostingAssetEntity valid(final HsHostingAssetEntity entityToSave) {
|
|
||||||
final var violations = HsEntityValidator.forType(entityToSave.getType()).validate(entityToSave);
|
|
||||||
if (!violations.isEmpty()) {
|
|
||||||
throw new ValidationException(violations.toString());
|
|
||||||
}
|
|
||||||
return entityToSave;
|
|
||||||
}
|
|
||||||
|
|
||||||
final BiConsumer<HsHostingAssetInsertResource, HsHostingAssetEntity> RESOURCE_TO_ENTITY_POSTMAPPER = (resource, entity) -> {
|
final BiConsumer<HsHostingAssetInsertResource, HsHostingAssetEntity> RESOURCE_TO_ENTITY_POSTMAPPER = (resource, entity) -> {
|
||||||
entity.putConfig(KeyValueMap.from(resource.getConfig()));
|
entity.putConfig(KeyValueMap.from(resource.getConfig()));
|
||||||
if (resource.getParentAssetUuid() != null) {
|
if (resource.getParentAssetUuid() != null) {
|
||||||
|
@ -8,6 +8,7 @@ import lombok.Getter;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
|
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
|
||||||
|
import net.hostsharing.hsadminng.hs.validation.Validatable;
|
||||||
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
|
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
|
||||||
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
|
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
|
||||||
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
|
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
|
||||||
@ -60,7 +61,7 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
|
|||||||
@Setter
|
@Setter
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class HsHostingAssetEntity implements Stringifyable, RbacObject {
|
public class HsHostingAssetEntity implements Stringifyable, RbacObject, Validatable<HsHostingAssetEntity, HsHostingAssetType> {
|
||||||
|
|
||||||
private static Stringify<HsHostingAssetEntity> stringify = stringify(HsHostingAssetEntity.class)
|
private static Stringify<HsHostingAssetEntity> stringify = stringify(HsHostingAssetEntity.class)
|
||||||
.withProp(HsHostingAssetEntity::getType)
|
.withProp(HsHostingAssetEntity::getType)
|
||||||
@ -113,6 +114,11 @@ public class HsHostingAssetEntity implements Stringifyable, RbacObject {
|
|||||||
PatchableMapWrapper.of(configWrapper, (newWrapper) -> {configWrapper = newWrapper; }, config).assign(newConfg);
|
PatchableMapWrapper.of(configWrapper, (newWrapper) -> {configWrapper = newWrapper; }, config).assign(newConfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getProperties() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return stringify.apply(this);
|
return stringify.apply(this);
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||||
|
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
|
||||||
|
|
||||||
|
import jakarta.validation.ValidationException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static java.util.Arrays.stream;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class HsHostingAssetEntityValidators {
|
||||||
|
|
||||||
|
private static final Map<Enum<HsHostingAssetType>, HsEntityValidator<HsHostingAssetEntity, HsHostingAssetType>> validators = new HashMap<>();
|
||||||
|
|
||||||
|
public static void register(final Enum<HsHostingAssetType> type, final HsEntityValidator<HsHostingAssetEntity, HsHostingAssetType> validator) {
|
||||||
|
stream(validator.propertyValidators).forEach( entry -> {
|
||||||
|
entry.verifyConsistency(Map.entry(type, validator));
|
||||||
|
});
|
||||||
|
validators.put(type, validator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HsEntityValidator<HsHostingAssetEntity, HsHostingAssetType> forType(final Enum<HsHostingAssetType> type) {
|
||||||
|
return validators.get(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<? extends Enum<?>> types() {
|
||||||
|
return validators.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static HsHostingAssetEntity valid(final HsHostingAssetEntity entityToSave) {
|
||||||
|
final var violations = HsHostingAssetEntityValidators.forType(entityToSave.getType()).validate(entityToSave);
|
||||||
|
if (!violations.isEmpty()) {
|
||||||
|
throw new ValidationException(violations.toString());
|
||||||
|
}
|
||||||
|
return entityToSave;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||||
|
|
||||||
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
|
|
||||||
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.api.HsHostingAssetPropsApi;
|
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.api.HsHostingAssetPropsApi;
|
||||||
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.model.HsHostingAssetTypeResource;
|
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.model.HsHostingAssetTypeResource;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
@ -15,7 +14,7 @@ public class HsHostingAssetPropsController implements HsHostingAssetPropsApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<List<String>> listAssetTypes() {
|
public ResponseEntity<List<String>> listAssetTypes() {
|
||||||
final var resource = HsEntityValidator.types().stream()
|
final var resource = HsHostingAssetEntityValidators.types().stream()
|
||||||
.map(Enum::name)
|
.map(Enum::name)
|
||||||
.toList();
|
.toList();
|
||||||
return ResponseEntity.ok(resource);
|
return ResponseEntity.ok(resource);
|
||||||
@ -25,7 +24,7 @@ public class HsHostingAssetPropsController implements HsHostingAssetPropsApi {
|
|||||||
public ResponseEntity<List<Object>> listAssetTypeProps(
|
public ResponseEntity<List<Object>> listAssetTypeProps(
|
||||||
final HsHostingAssetTypeResource assetType) {
|
final HsHostingAssetTypeResource assetType) {
|
||||||
|
|
||||||
final var propValidators = HsEntityValidator.forType(HsHostingAssetType.of(assetType));
|
final var propValidators = HsHostingAssetEntityValidators.forType(HsHostingAssetType.of(assetType));
|
||||||
final List<Map<String, Object>> resource = propValidators.properties();
|
final List<Map<String, Object>> resource = propValidators.properties();
|
||||||
return ResponseEntity.ok(toListOfObjects(resource));
|
return ResponseEntity.ok(toListOfObjects(resource));
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,10 @@ import static net.hostsharing.hsadminng.hs.validation.EnumerationPropertyValidat
|
|||||||
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class HsManagedServerAssetValidator extends HsEntityValidator {
|
class HsManagedServerAssetValidator extends HsEntityValidator<HsHostingAssetEntity, HsHostingAssetType> {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
HsEntityValidator.register(MANAGED_SERVER, new HsManagedServerAssetValidator());
|
HsHostingAssetEntityValidators.register(MANAGED_SERVER, new HsManagedServerAssetValidator());
|
||||||
}
|
}
|
||||||
|
|
||||||
public HsManagedServerAssetValidator() {
|
public HsManagedServerAssetValidator() {
|
||||||
|
@ -11,10 +11,10 @@ import static net.hostsharing.hsadminng.hs.validation.EnumerationPropertyValidat
|
|||||||
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class HsManagedWebspaceAssetValidator extends HsEntityValidator {
|
class HsManagedWebspaceAssetValidator extends HsEntityValidator<HsHostingAssetEntity, HsHostingAssetType> {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
HsEntityValidator.register(MANAGED_WEBSPACE, new HsManagedWebspaceAssetValidator());
|
HsHostingAssetEntityValidators.register(MANAGED_WEBSPACE, new HsManagedWebspaceAssetValidator());
|
||||||
}
|
}
|
||||||
|
|
||||||
public HsManagedWebspaceAssetValidator() {
|
public HsManagedWebspaceAssetValidator() {
|
||||||
|
@ -3,54 +3,31 @@ package net.hostsharing.hsadminng.hs.validation;
|
|||||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||||
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity;
|
|
||||||
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static java.util.Arrays.stream;
|
import static java.util.Arrays.stream;
|
||||||
import static net.hostsharing.hsadminng.hs.validation.EnumerationPropertyValidator.enumerationProperty;
|
|
||||||
import static net.hostsharing.hsadminng.hs.validation.HsPropertyValidator.defType;
|
|
||||||
import static net.hostsharing.hsadminng.hs.validation.IntegerPropertyValidator.integerProperty;
|
|
||||||
|
|
||||||
public class HsEntityValidator {
|
public class HsEntityValidator<E extends Validatable<E, T>, T extends Enum<T>> {
|
||||||
|
|
||||||
private static final Map<Enum<?>, HsEntityValidator> validators = new HashMap<>();
|
public final HsPropertyValidator<?>[] propertyValidators;
|
||||||
private final HsPropertyValidator<?>[] propertyValidators;
|
|
||||||
|
|
||||||
public static void register(final Enum<?> type, final HsEntityValidator validator) {
|
|
||||||
stream(validator.propertyValidators).forEach( entry -> {
|
|
||||||
entry.verifyConsistency(Map.entry(type, validator));
|
|
||||||
});
|
|
||||||
validators.put(type, validator);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HsEntityValidator forType(final HsHostingAssetType type) {
|
|
||||||
return validators.get(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HsEntityValidator(final HsPropertyValidator<?>... validators) {
|
public HsEntityValidator(final HsPropertyValidator<?>... validators) {
|
||||||
propertyValidators = validators;
|
propertyValidators = validators;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<? extends Enum<?>> types() {
|
public List<String> validate(final E assetEntity) {
|
||||||
return validators.keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> validate(final HsHostingAssetEntity assetEntity) {
|
|
||||||
final var result = new ArrayList<String>();
|
final var result = new ArrayList<String>();
|
||||||
assetEntity.getConfig().keySet().forEach( givenPropName -> {
|
assetEntity.getProperties().keySet().forEach( givenPropName -> {
|
||||||
if (stream(propertyValidators).map(pv -> pv.propertyName).noneMatch(propName -> propName.equals(givenPropName))) {
|
if (stream(propertyValidators).map(pv -> pv.propertyName).noneMatch(propName -> propName.equals(givenPropName))) {
|
||||||
result.add("'config." + givenPropName + "' is not expected but is '" +assetEntity.getConfig().get(givenPropName) + "'");
|
result.add("'config." + givenPropName + "' is not expected but is '" +assetEntity.getProperties().get(givenPropName) + "'");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
stream(propertyValidators).forEach(pv -> {
|
stream(propertyValidators).forEach(pv -> {
|
||||||
result.addAll(pv.validate(assetEntity.getConfig()));
|
result.addAll(pv.validate(assetEntity.getProperties()));
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package net.hostsharing.hsadminng.hs.validation;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType;
|
|
||||||
|
|
||||||
import java.util.AbstractMap.SimpleImmutableEntry;
|
import java.util.AbstractMap.SimpleImmutableEntry;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -52,7 +51,7 @@ public abstract class HsPropertyValidator<T> {
|
|||||||
|
|
||||||
protected abstract void validate(final ArrayList<String> result, final T propValue, final Map<String, Object> props);
|
protected abstract void validate(final ArrayList<String> result, final T propValue, final Map<String, Object> props);
|
||||||
|
|
||||||
public void verifyConsistency(final Map.Entry<? extends Enum<?>, HsEntityValidator> typeDef) {
|
public void verifyConsistency(final Map.Entry<? extends Enum<?>, ?> typeDef) {
|
||||||
if (required == null ) {
|
if (required == null ) {
|
||||||
throw new IllegalStateException(typeDef.getKey() + "[" + propertyName + "] not fully initialized, please call either .required() or .optional()" );
|
throw new IllegalStateException(typeDef.getKey() + "[" + propertyName + "] not fully initialized, please call either .required() or .optional()" );
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package net.hostsharing.hsadminng.hs.validation;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface Validatable<E, T extends Enum<T>> {
|
||||||
|
|
||||||
|
Map<String, Object> getProperties();
|
||||||
|
|
||||||
|
Enum<T> getType();
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||||
|
|
||||||
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -14,7 +13,7 @@ class HsManagedServerValidatorUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
void validatesDependentProperties() {
|
void validatesDependentProperties() {
|
||||||
// given
|
// given
|
||||||
final var validator = HsEntityValidator.forType(MANAGED_SERVER);
|
final var validator = HsHostingAssetEntityValidators.forType(MANAGED_SERVER);
|
||||||
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
||||||
.type(MANAGED_SERVER)
|
.type(MANAGED_SERVER)
|
||||||
.config(Map.ofEntries(
|
.config(Map.ofEntries(
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||||
|
|
||||||
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
|
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
|
||||||
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
|
|
||||||
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
|
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@ -15,8 +14,10 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
|
|
||||||
class HsManagedWebspaceAssetValidatorUnitTest {
|
class HsManagedWebspaceAssetValidatorUnitTest {
|
||||||
|
|
||||||
@SuppressWarnings("unused") // just to make sure the class is loaded
|
// just to make sure the class is loaded
|
||||||
HsEntityValidator validator = new HsManagedWebspaceAssetValidator();
|
static {
|
||||||
|
new HsManagedWebspaceAssetValidator();
|
||||||
|
}
|
||||||
|
|
||||||
final HsBookingItemEntity managedServerBookingItem = HsBookingItemEntity.builder()
|
final HsBookingItemEntity managedServerBookingItem = HsBookingItemEntity.builder()
|
||||||
.debitor(HsOfficeDebitorEntity.builder().defaultPrefix("abc").build()
|
.debitor(HsOfficeDebitorEntity.builder().defaultPrefix("abc").build()
|
||||||
@ -35,7 +36,7 @@ class HsManagedWebspaceAssetValidatorUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
void validatesIdentifier() {
|
void validatesIdentifier() {
|
||||||
// given
|
// given
|
||||||
final var validator = HsEntityValidator.forType(MANAGED_WEBSPACE);
|
final var validator = HsHostingAssetEntityValidators.forType(MANAGED_WEBSPACE);
|
||||||
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
||||||
.type(MANAGED_WEBSPACE)
|
.type(MANAGED_WEBSPACE)
|
||||||
.parentAsset(mangedServerAssetEntity)
|
.parentAsset(mangedServerAssetEntity)
|
||||||
@ -58,7 +59,7 @@ class HsManagedWebspaceAssetValidatorUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
void validatesMissingProperties() {
|
void validatesMissingProperties() {
|
||||||
// given
|
// given
|
||||||
final var validator = HsEntityValidator.forType(MANAGED_WEBSPACE);
|
final var validator = HsHostingAssetEntityValidators.forType(MANAGED_WEBSPACE);
|
||||||
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
||||||
.type(MANAGED_WEBSPACE)
|
.type(MANAGED_WEBSPACE)
|
||||||
.parentAsset(mangedServerAssetEntity)
|
.parentAsset(mangedServerAssetEntity)
|
||||||
@ -79,7 +80,7 @@ class HsManagedWebspaceAssetValidatorUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
void validatesUnknownProperties() {
|
void validatesUnknownProperties() {
|
||||||
// given
|
// given
|
||||||
final var validator = HsEntityValidator.forType(MANAGED_WEBSPACE);
|
final var validator = HsHostingAssetEntityValidators.forType(MANAGED_WEBSPACE);
|
||||||
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
||||||
.type(MANAGED_WEBSPACE)
|
.type(MANAGED_WEBSPACE)
|
||||||
.parentAsset(mangedServerAssetEntity)
|
.parentAsset(mangedServerAssetEntity)
|
||||||
@ -102,7 +103,7 @@ class HsManagedWebspaceAssetValidatorUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
void validatesValidProperties() {
|
void validatesValidProperties() {
|
||||||
// given
|
// given
|
||||||
final var validator = HsEntityValidator.forType(MANAGED_WEBSPACE);
|
final var validator = HsHostingAssetEntityValidators.forType(MANAGED_WEBSPACE);
|
||||||
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
final var mangedWebspaceHostingAssetEntity = HsHostingAssetEntity.builder()
|
||||||
.type(MANAGED_WEBSPACE)
|
.type(MANAGED_WEBSPACE)
|
||||||
.parentAsset(mangedServerAssetEntity)
|
.parentAsset(mangedServerAssetEntity)
|
||||||
|
Loading…
Reference in New Issue
Block a user