Renamed some classes. Signed-off-by: Anatole Tresch <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/f030e122 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/f030e122 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/f030e122 Branch: refs/heads/configjsr Commit: f030e1225d2d28a097b5ba3c773c7ac7b8696d7d Parents: 7dbbbe5 Author: Anatole Tresch <[email protected]> Authored: Mon Feb 5 20:04:05 2018 +0100 Committer: Anatole Tresch <[email protected]> Committed: Mon Feb 5 20:04:05 2018 +0100 ---------------------------------------------------------------------- .../apache/tamaya/validation/ConfigArea.java | 37 +++ .../tamaya/validation/ConfigValidation.java | 78 ++++++ .../validation/ConfigValidationResult.java | 203 ++++++++++++++++ .../apache/tamaya/validation/Validation.java | 203 ---------------- .../tamaya/validation/ValidationManager.java | 56 +++-- .../tamaya/validation/ValidationModel.java | 78 ------ .../tamaya/validation/ValidationTarget.java | 37 --- .../internal/ConfigValidationBean.java | 43 ++-- .../ConfiguredInlineModelProviderSpi.java | 10 +- .../ConfiguredPropertiesModelProviderSpi.java | 10 +- .../ConfiguredResourcesModelProviderSpi.java | 10 +- .../ConfiguredTypeEventsModelPopulator.java | 14 +- .../ConfiguredTypeEventsModelProvider.java | 14 +- .../validation/spi/AbstractConfigModel.java | 88 ------- .../spi/AbstractConfigValidation.java | 88 +++++++ .../validation/spi/ConfigValidationMBean.java | 6 +- .../spi/ConfigValidationProviderSpi.java | 39 +++ .../validation/spi/ConfigValidationReader.java | 18 +- .../tamaya/validation/spi/ValidateGroup.java | 110 --------- .../validation/spi/ValidateParameter.java | 242 ------------------- .../tamaya/validation/spi/ValidateSection.java | 201 --------------- .../tamaya/validation/spi/ValidatedGroup.java | 110 +++++++++ .../validation/spi/ValidatedParameter.java | 242 +++++++++++++++++++ .../tamaya/validation/spi/ValidatedSection.java | 201 +++++++++++++++ .../spi/ValidationModelProviderSpi.java | 39 --- ...a.validation.spi.ConfigValidationProviderSpi | 22 ++ ...ya.validation.spi.ValidationModelProviderSpi | 22 -- .../validation/ConfigModelProviderTest.java | 32 +-- .../internal/ConfigDocumentationBeanTest.java | 6 +- 29 files changed, 1128 insertions(+), 1131 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/ConfigArea.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/ConfigArea.java b/validation/src/main/java/org/apache/tamaya/validation/ConfigArea.java new file mode 100644 index 0000000..89df2c8 --- /dev/null +++ b/validation/src/main/java/org/apache/tamaya/validation/ConfigArea.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tamaya.validation; + +/** + * This enumeration defines the types of supported validations. + */ +public enum ConfigArea { + /** + * A configuration section. + */ + Section, + /** + * A configuration paramter. + */ + Parameter, + /** + * ConfigModel that is a container of other validations. + */ + Group, +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/ConfigValidation.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/ConfigValidation.java b/validation/src/main/java/org/apache/tamaya/validation/ConfigValidation.java new file mode 100644 index 0000000..29a418b --- /dev/null +++ b/validation/src/main/java/org/apache/tamaya/validation/ConfigValidation.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tamaya.validation; + + +import javax.config.Config; +import java.util.Collection; + +/** + * Base structure describing a validated item, by default a parameter or a section. + */ +public interface ConfigValidation { + + /** + * Access the owner. + * @return the owner of this model, never null. + */ + String getOwner(); + + /** + * Get the type of item that is modelled. + * @return the modelled type, never null. + */ + ConfigArea getArea(); + + /** + * Get the item's name, it should minimally describe the validation. Examples are: + * <pre> + * Sections: a.b.c + * Params: a.b.c.paramName + * Filter: a.b.c.FilterImplClass + * Dependency: mydepClassname + * CombinationPolicy: a.b.c.MyCombinationPolicyClass + * </pre> + * @return the item's name. + */ + String getName(); + + /** + * Check if this validation is a required one. + * @return true, if this validation is required. + */ + boolean isRequired(); + + /** + * Get an description of the item, using the default locale. The description is basically optional + * though it is higly recommended to provide a description, so the validation issues is well + * resolvable. + * + * @return the description required, or null. + */ + String getDescription(); + + /** + * Validates the item and all its children against the given configuration. + * + * @param config the configuration to be validated against, not null. + * @return the validation result, or null, if not applicable. + */ + Collection<ConfigValidationResult> validate(Config config); + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/ConfigValidationResult.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/ConfigValidationResult.java b/validation/src/main/java/org/apache/tamaya/validation/ConfigValidationResult.java new file mode 100644 index 0000000..d6ee091 --- /dev/null +++ b/validation/src/main/java/org/apache/tamaya/validation/ConfigValidationResult.java @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tamaya.validation; + +import org.apache.tamaya.validation.spi.AbstractConfigValidation; + +import javax.config.Config; +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; + +/** + * Models a partial configuration configModel result. + */ +public final class ConfigValidationResult { + /** + * the config section. + */ + private final ConfigValidation configModel; + /** + * The configModel result. + */ + private final ValidationType result; + /** + * The configModel message. + */ + private final String message; + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @return a new validation result containing valid parts of the given model. + */ + public static ConfigValidationResult checkValid(ConfigValidation configModel) { + return new ConfigValidationResult(configModel, ValidationType.VALID, null); + } + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @return a new validation result containing missing parts of the given model. + */ + public static ConfigValidationResult checkMissing(ConfigValidation configModel) { + return new ConfigValidationResult(configModel, ValidationType.MISSING, null); + } + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @param message Additional message to be shown (optional). + * @return a new validation result containing missing parts of the given model with a message. + */ + public static ConfigValidationResult checkMissing(ConfigValidation configModel, String message) { + return new ConfigValidationResult(configModel, ValidationType.MISSING, message); + } + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @param error error message to add. + * @return a new validation result containing erroneous parts of the given model with the given error message. + */ + public static ConfigValidationResult checkError(ConfigValidation configModel, String error) { + return new ConfigValidationResult(configModel, ValidationType.ERROR, error); + } + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @param warning warning message to add. + * @return a new validation result containing warning parts of the given model with the given warning message. + */ + public static ConfigValidationResult checkWarning(ConfigValidation configModel, String warning) { + return new ConfigValidationResult(configModel, ValidationType.WARNING, warning); + } + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @param alternativeUsage allows setting a message to indicate non-deprecated replacement, maybe null. + * @return a new validation result containing deprecated parts of the given model with an optional message. + */ + public static ConfigValidationResult checkDeprecation(ConfigValidation configModel, String alternativeUsage) { + return new ConfigValidationResult(configModel, ValidationType.DEPRECATED, alternativeUsage != null ? "Use instead: " + alternativeUsage : null); + } + + /** + * Creates a new ValidationResult. + * + * @param configModel the configModel item, not null. + * @return a new validation result containing deprecated parts of the given model. + */ + public static ConfigValidationResult checkDeprecation(ConfigValidation configModel) { + return new ConfigValidationResult(configModel, ValidationType.DEPRECATED, null); + } + + /** + * Creates a new ValidationResult. + * + * @param owner owner + * @param key the name/model key + * @param type model type + * @return a corresponding configModel item + */ + public static ConfigValidationResult checkUndefined(final String owner, final String key, final ConfigArea type) { + return new ConfigValidationResult(new AbstractConfigValidation(owner, key, false, "Undefined key: " + key) { + + @Override + public ConfigArea getArea() { + return type; + } + + @Override + public Collection<ConfigValidationResult> validate(Config config) { + return Collections.emptyList(); + } + }, ValidationType.UNDEFINED, null); + } + + + /** + * Constructor. + * + * @param configModel the configModel item, not null. + * @param result the configModel result, not null. + * @param message the detail message. + * @return new validation result. + */ + public static ConfigValidationResult of(ConfigValidation configModel, ValidationType result, String message) { + return new ConfigValidationResult(configModel, result, message); + } + + + /** + * Constructor. + * + * @param configModel the configModel item, not null. + * @param result the configModel result, not null. + * @param message the detail message. + */ + private ConfigValidationResult(ConfigValidation configModel, ValidationType result, String message) { + this.message = message; + this.configModel = Objects.requireNonNull(configModel); + this.result = Objects.requireNonNull(result); + } + + /** + * Get the configModel section. + * + * @return the section, never null. + */ + public ConfigValidation getConfigModel() { + return configModel; + } + + /** + * Get the configModel result. + * + * @return the result, never null. + */ + public ValidationType getResult() { + return result; + } + + /** + * Get the detail message. + * + * @return the detail message, or null. + */ + public String getMessage() { + return message; + } + + @Override + public String toString() { + if (message != null) { + return result + ": " + configModel.getName() + " (" + configModel.getArea() + ") -> " + message + '\n'; + } + return result + ": " + configModel.getName() + " (" + configModel.getArea() + ")"; + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/Validation.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/Validation.java b/validation/src/main/java/org/apache/tamaya/validation/Validation.java deleted file mode 100644 index d9c4ba1..0000000 --- a/validation/src/main/java/org/apache/tamaya/validation/Validation.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tamaya.validation; - -import org.apache.tamaya.validation.spi.AbstractConfigModel; - -import javax.config.Config; -import java.util.Collection; -import java.util.Collections; -import java.util.Objects; - -/** - * Models a partial configuration configModel result. - */ -public final class Validation { - /** - * the config section. - */ - private final ValidationModel configModel; - /** - * The configModel result. - */ - private final ValidationType result; - /** - * The configModel message. - */ - private final String message; - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @return a new validation result containing valid parts of the given model. - */ - public static Validation checkValid(ValidationModel configModel) { - return new Validation(configModel, ValidationType.VALID, null); - } - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @return a new validation result containing missing parts of the given model. - */ - public static Validation checkMissing(ValidationModel configModel) { - return new Validation(configModel, ValidationType.MISSING, null); - } - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @param message Additional message to be shown (optional). - * @return a new validation result containing missing parts of the given model with a message. - */ - public static Validation checkMissing(ValidationModel configModel, String message) { - return new Validation(configModel, ValidationType.MISSING, message); - } - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @param error error message to add. - * @return a new validation result containing erroneous parts of the given model with the given error message. - */ - public static Validation checkError(ValidationModel configModel, String error) { - return new Validation(configModel, ValidationType.ERROR, error); - } - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @param warning warning message to add. - * @return a new validation result containing warning parts of the given model with the given warning message. - */ - public static Validation checkWarning(ValidationModel configModel, String warning) { - return new Validation(configModel, ValidationType.WARNING, warning); - } - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @param alternativeUsage allows setting a message to indicate non-deprecated replacement, maybe null. - * @return a new validation result containing deprecated parts of the given model with an optional message. - */ - public static Validation checkDeprecation(ValidationModel configModel, String alternativeUsage) { - return new Validation(configModel, ValidationType.DEPRECATED, alternativeUsage != null ? "Use instead: " + alternativeUsage : null); - } - - /** - * Creates a new ValidationResult. - * - * @param configModel the configModel item, not null. - * @return a new validation result containing deprecated parts of the given model. - */ - public static Validation checkDeprecation(ValidationModel configModel) { - return new Validation(configModel, ValidationType.DEPRECATED, null); - } - - /** - * Creates a new ValidationResult. - * - * @param owner owner - * @param key the name/model key - * @param type model type - * @return a corresponding configModel item - */ - public static Validation checkUndefined(final String owner, final String key, final ValidationTarget type) { - return new Validation(new AbstractConfigModel(owner, key, false, "Undefined key: " + key) { - - @Override - public ValidationTarget getType() { - return type; - } - - @Override - public Collection<Validation> validate(Config config) { - return Collections.emptyList(); - } - }, ValidationType.UNDEFINED, null); - } - - - /** - * Constructor. - * - * @param configModel the configModel item, not null. - * @param result the configModel result, not null. - * @param message the detail message. - * @return new validation result. - */ - public static Validation of(ValidationModel configModel, ValidationType result, String message) { - return new Validation(configModel, result, message); - } - - - /** - * Constructor. - * - * @param configModel the configModel item, not null. - * @param result the configModel result, not null. - * @param message the detail message. - */ - private Validation(ValidationModel configModel, ValidationType result, String message) { - this.message = message; - this.configModel = Objects.requireNonNull(configModel); - this.result = Objects.requireNonNull(result); - } - - /** - * Get the configModel section. - * - * @return the section, never null. - */ - public ValidationModel getConfigModel() { - return configModel; - } - - /** - * Get the configModel result. - * - * @return the result, never null. - */ - public ValidationType getResult() { - return result; - } - - /** - * Get the detail message. - * - * @return the detail message, or null. - */ - public String getMessage() { - return message; - } - - @Override - public String toString() { - if (message != null) { - return result + ": " + configModel.getName() + " (" + configModel.getType() + ") -> " + message + '\n'; - } - return result + ": " + configModel.getName() + " (" + configModel.getType() + ")"; - } -} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/ValidationManager.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/ValidationManager.java b/validation/src/main/java/org/apache/tamaya/validation/ValidationManager.java index aca56e2..db59a88 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/ValidationManager.java +++ b/validation/src/main/java/org/apache/tamaya/validation/ValidationManager.java @@ -19,7 +19,7 @@ package org.apache.tamaya.validation; import org.apache.tamaya.validation.spi.ConfigValidationMBean; -import org.apache.tamaya.validation.spi.ValidationModelProviderSpi; +import org.apache.tamaya.validation.spi.ConfigValidationProviderSpi; import org.apache.tamaya.base.ServiceContextManager; import javax.config.Config; @@ -30,9 +30,7 @@ import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.logging.Level; @@ -48,7 +46,7 @@ public final class ValidationManager { private static final ValidationManager INSTANCE = new ValidationManager(); - private List<ValidationModel> models = new ArrayList<>(); + private List<ConfigValidation> models = new ArrayList<>(); /** * Get the singleton instance. @@ -62,8 +60,8 @@ public final class ValidationManager { * Singleton constructor. */ private ValidationManager() { - for (ValidationModelProviderSpi model : ServiceContextManager.getServiceContext().getServices(ValidationModelProviderSpi.class)) { - models.addAll(model.getConfigModels()); + for (ConfigValidationProviderSpi model : ServiceContextManager.getServiceContext().getServices(ConfigValidationProviderSpi.class)) { + models.addAll(model.getConfigValidations()); } models.sort((k1, k2) -> k2.getName().compareTo(k2.getName())); } @@ -76,8 +74,8 @@ public final class ValidationManager { StringBuilder b = new StringBuilder(); b.append("TYPE OWNER NAME MANDATORY DESCRIPTION\n"); b.append("-----------------------------------------------------------------------------------------------------\n"); - for(ValidationModel model:models){ - switch(model.getType()){ + for(ConfigValidation model:models){ + switch(model.getArea()){ case Parameter: b.append("PARAM "); break; @@ -124,7 +122,7 @@ public final class ValidationManager { * * @return the sections defined, never null. */ - public Collection<ValidationModel> getModels() { + public Collection<ConfigValidation> getModels() { return Collections.unmodifiableCollection(models); } @@ -137,9 +135,9 @@ public final class ValidationManager { * @param <T> type of the model to filter for. * @return the sections defined, never null. */ - public <T extends ValidationModel> T getModel(String name, Class<T> modelType) { - for (ValidationModelProviderSpi model : ServiceContextManager.getServiceContext().getServices(ValidationModelProviderSpi.class)) { - for(ValidationModel configModel : model.getConfigModels()) { + public <T extends ConfigValidation> T getModel(String name, Class<T> modelType) { + for (ConfigValidationProviderSpi model : ServiceContextManager.getServiceContext().getServices(ConfigValidationProviderSpi.class)) { + for(ConfigValidation configModel : model.getConfigValidations()) { if(configModel.getName().equals(name) && configModel.getClass().equals(modelType)) { return modelType.cast(configModel); } @@ -154,14 +152,14 @@ public final class ValidationManager { * @param targets the target types only to be returned (optional). * @return the sections defined, never null. */ - public Collection<ValidationModel> findModels(String namePattern, ValidationTarget... targets) { - List<ValidationModel> result = new ArrayList<>(); - for (ValidationModelProviderSpi model : ServiceContextManager.getServiceContext().getServices(ValidationModelProviderSpi.class)) { - for(ValidationModel configModel : model.getConfigModels()) { + public Collection<ConfigValidation> findModels(String namePattern, ConfigArea... targets) { + List<ConfigValidation> result = new ArrayList<>(); + for (ConfigValidationProviderSpi model : ServiceContextManager.getServiceContext().getServices(ConfigValidationProviderSpi.class)) { + for(ConfigValidation configModel : model.getConfigValidations()) { if(configModel.getName().matches(namePattern)) { if(targets.length>0){ - for(ValidationTarget tgt:targets){ - if(configModel.getType().equals(tgt)){ + for(ConfigArea tgt:targets){ + if(configModel.getArea().equals(tgt)){ result.add(configModel); break; } @@ -181,7 +179,7 @@ public final class ValidationManager { * @param config the configuration to be validated against, not null. * @return the validation results, never null. */ - public Collection<Validation> validate(Config config) { + public Collection<ConfigValidationResult> validate(Config config) { return validate(config, false); } @@ -192,9 +190,9 @@ public final class ValidationManager { * @param showUndefined allows filtering for undefined configuration elements. * @return the validation results, never null. */ - public Collection<Validation> validate(Config config, boolean showUndefined) { - List<Validation> result = new ArrayList<>(); - for (ValidationModel defConf : getModels()) { + public Collection<ConfigValidationResult> validate(Config config, boolean showUndefined) { + List<ConfigValidationResult> result = new ArrayList<>(); + for (ConfigValidation defConf : getModels()) { result.addAll(defConf.validate(config)); } if(showUndefined){ @@ -202,27 +200,27 @@ public final class ValidationManager { Set<String> keys = new HashSet<>(); map.forEach(keys::add); Set<String> areas = extractTransitiveAreas(keys); - for (ValidationModel defConf : getModels()) { - if(ValidationTarget.Section.equals(defConf.getType())){ + for (ConfigValidation defConf : getModels()) { + if(ConfigArea.Section.equals(defConf.getArea())){ areas.removeIf(area -> area.matches(defConf.getName())); } - if(ValidationTarget.Parameter.equals(defConf.getType())){ + if(ConfigArea.Parameter.equals(defConf.getArea())){ keys.remove(defConf.getName()); } } outer:for(String key:keys){ - for (ValidationModel defConf : getModels()) { - if(ValidationTarget.Section.equals(defConf.getType())){ + for (ConfigValidation defConf : getModels()) { + if(ConfigArea.Section.equals(defConf.getArea())){ if(defConf.getName().endsWith(".*") && key.matches(defConf.getName())){ // Ignore parameters that are part of transitive section. continue outer; } } } - result.add(Validation.checkUndefined("<auto>", key, ValidationTarget.Parameter)); + result.add(ConfigValidationResult.checkUndefined("<auto>", key, ConfigArea.Parameter)); } for(String area:areas){ - result.add(Validation.checkUndefined("<auto>", area, ValidationTarget.Section)); + result.add(ConfigValidationResult.checkUndefined("<auto>", area, ConfigArea.Section)); } } return result; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/ValidationModel.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/ValidationModel.java b/validation/src/main/java/org/apache/tamaya/validation/ValidationModel.java deleted file mode 100644 index 01c8cb6..0000000 --- a/validation/src/main/java/org/apache/tamaya/validation/ValidationModel.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tamaya.validation; - - -import javax.config.Config; -import java.util.Collection; - -/** - * Base structure describing a validated item, by default a parameter or a section. - */ -public interface ValidationModel { - - /** - * Access the owner. - * @return the owner of this model, never null. - */ - String getOwner(); - - /** - * Get the type of item that is modelled. - * @return the modelled type, never null. - */ - ValidationTarget getType(); - - /** - * Get the item's name, it should minimally describe the validation. Examples are: - * <pre> - * Sections: a.b.c - * Params: a.b.c.paramName - * Filter: a.b.c.FilterImplClass - * Dependency: mydepClassname - * CombinationPolicy: a.b.c.MyCombinationPolicyClass - * </pre> - * @return the item's name. - */ - String getName(); - - /** - * Check if this validation is a required one. - * @return true, if this validation is required. - */ - boolean isRequired(); - - /** - * Get an description of the item, using the default locale. The description is basically optional - * though it is higly recommended to provide a description, so the validation issues is well - * resolvable. - * - * @return the description required, or null. - */ - String getDescription(); - - /** - * Validates the item and all its children against the given configuration. - * - * @param config the configuration to be validated against, not null. - * @return the validation result, or null, if not applicable. - */ - Collection<Validation> validate(Config config); - -} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/ValidationTarget.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/ValidationTarget.java b/validation/src/main/java/org/apache/tamaya/validation/ValidationTarget.java deleted file mode 100644 index 5a501e5..0000000 --- a/validation/src/main/java/org/apache/tamaya/validation/ValidationTarget.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tamaya.validation; - -/** - * This enumeration defines the types of supported validations. - */ -public enum ValidationTarget { - /** - * A configuration section. - */ - Section, - /** - * A configuration paramter. - */ - Parameter, - /** - * ConfigModel that is a container of other validations. - */ - Group, -} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/internal/ConfigValidationBean.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfigValidationBean.java b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfigValidationBean.java index 4f41d3e..fe677b3 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfigValidationBean.java +++ b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfigValidationBean.java @@ -18,10 +18,10 @@ */ package org.apache.tamaya.validation.internal; -import org.apache.tamaya.validation.ValidationModel; +import org.apache.tamaya.validation.ConfigValidation; import org.apache.tamaya.validation.ValidationManager; -import org.apache.tamaya.validation.ValidationTarget; -import org.apache.tamaya.validation.Validation; +import org.apache.tamaya.validation.ConfigArea; +import org.apache.tamaya.validation.ConfigValidationResult; import org.apache.tamaya.validation.spi.ConfigValidationMBean; import javax.config.Config; @@ -36,7 +36,6 @@ import javax.json.JsonWriterFactory; import javax.json.stream.JsonGenerator; import java.io.StringWriter; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -49,9 +48,9 @@ public class ConfigValidationBean implements ConfigValidationMBean { private final JsonWriterFactory writerFactory; - private static final Comparator<Validation> COMPARATOR = new Comparator<Validation>() { + private static final Comparator<ConfigValidationResult> COMPARATOR = new Comparator<ConfigValidationResult>() { @Override - public int compare(Validation v1, Validation v2) { + public int compare(ConfigValidationResult v1, ConfigValidationResult v2) { int compare = VAL_COMPARATOR.compare(v1.getConfigModel(), v2.getConfigModel()); if(compare==0){ compare = v1.getResult().compareTo(v2.getResult()); @@ -62,8 +61,8 @@ public class ConfigValidationBean implements ConfigValidationMBean { return compare; } }; - private static final Comparator<ValidationModel> VAL_COMPARATOR = (v1, v2) -> { - int compare = v1.getType().compareTo(v2.getType()); + private static final Comparator<ConfigValidation> VAL_COMPARATOR = (v1, v2) -> { + int compare = v1.getArea().compareTo(v2.getArea()); if(compare==0){ compare = v1.getName().compareTo(v2.getName()); } @@ -102,10 +101,10 @@ public class ConfigValidationBean implements ConfigValidationMBean { @Override public String validate(boolean showUndefined) { - List<Validation> validations = new ArrayList<>(ValidationManager.getInstance().validate(getConfig(), showUndefined)); + List<ConfigValidationResult> validations = new ArrayList<>(ValidationManager.getInstance().validate(getConfig(), showUndefined)); validations.sort(COMPARATOR); JsonArrayBuilder builder = Json.createArrayBuilder(); - for(Validation val:validations){ + for(ConfigValidationResult val:validations){ builder.add(toJsonObject(val)); } return formatJson(builder.build()); @@ -115,37 +114,37 @@ public class ConfigValidationBean implements ConfigValidationMBean { @Override public String getConfigurationModel() { - List<ValidationModel> configModels = new ArrayList<>(ValidationManager.getInstance().getModels()); + List<ConfigValidation> configModels = new ArrayList<>(ValidationManager.getInstance().getModels()); configModels.sort(VAL_COMPARATOR); JsonArrayBuilder result = Json.createArrayBuilder(); - for(ValidationModel val: configModels){ + for(ConfigValidation val: configModels){ result.add(toJsonObject(val)); } return formatJson(result.build()); } @Override - public String getConfigurationModel(ValidationTarget type) { + public String getConfigurationModel(ConfigArea type) { return findValidationModels(".*", type); } @Override public String findConfigurationModels(String namePattern) { - List<ValidationModel> configModels = new ArrayList<>(ValidationManager.getInstance().findModels(namePattern)); + List<ConfigValidation> configModels = new ArrayList<>(ValidationManager.getInstance().findModels(namePattern)); configModels.sort(VAL_COMPARATOR); JsonArrayBuilder result = Json.createArrayBuilder(); - for(ValidationModel val: configModels){ + for(ConfigValidation val: configModels){ result.add(toJsonObject(val)); } return formatJson(result.build()); } @Override - public String findValidationModels(String namePattern, ValidationTarget... type) { - List<ValidationModel> configModels = new ArrayList<>(ValidationManager.getInstance().findModels(namePattern, type)); + public String findValidationModels(String namePattern, ConfigArea... type) { + List<ConfigValidation> configModels = new ArrayList<>(ValidationManager.getInstance().findModels(namePattern, type)); configModels.sort(VAL_COMPARATOR); JsonArrayBuilder result = Json.createArrayBuilder(); - for(ValidationModel val: configModels){ + for(ConfigValidation val: configModels){ result.add(toJsonObject(val)); } return formatJson(result.build()); @@ -157,8 +156,8 @@ public class ConfigValidationBean implements ConfigValidationMBean { } - private JsonObject toJsonObject(ValidationModel val) { - JsonObjectBuilder valJson = Json.createObjectBuilder().add("target", val.getType().toString()) + private JsonObject toJsonObject(ConfigValidation val) { + JsonObjectBuilder valJson = Json.createObjectBuilder().add("target", val.getArea().toString()) .add("name", val.getName()); if(val.getDescription()!=null) { valJson.add("description", val.getDescription()); @@ -169,8 +168,8 @@ public class ConfigValidationBean implements ConfigValidationMBean { return valJson.build(); } - private JsonObject toJsonObject(Validation val) { - JsonObjectBuilder valJson = Json.createObjectBuilder().add("target", val.getConfigModel().getType().toString()) + private JsonObject toJsonObject(ConfigValidationResult val) { + JsonObjectBuilder valJson = Json.createObjectBuilder().add("target", val.getConfigModel().getArea().toString()) .add("name", val.getConfigModel().getName()); if(val.getConfigModel().isRequired()){ valJson.add("required",true); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredInlineModelProviderSpi.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredInlineModelProviderSpi.java b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredInlineModelProviderSpi.java index 097030b..af793b5 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredInlineModelProviderSpi.java +++ b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredInlineModelProviderSpi.java @@ -19,9 +19,9 @@ package org.apache.tamaya.validation.internal; import org.apache.tamaya.functions.ConfigurationFunctions; -import org.apache.tamaya.validation.ValidationModel; +import org.apache.tamaya.validation.ConfigValidation; import org.apache.tamaya.validation.spi.ConfigValidationReader; -import org.apache.tamaya.validation.spi.ValidationModelProviderSpi; +import org.apache.tamaya.validation.spi.ConfigValidationProviderSpi; import javax.config.Config; import javax.config.ConfigProvider; @@ -31,7 +31,7 @@ import java.util.logging.Logger; /** * ConfigModel provider that reads model metadata from the current {@link Config}. */ -public class ConfiguredInlineModelProviderSpi implements ValidationModelProviderSpi { +public class ConfiguredInlineModelProviderSpi implements ConfigValidationProviderSpi { /** The logger. */ private static final Logger LOG = Logger.getLogger(ConfiguredInlineModelProviderSpi.class.getName()); @@ -39,7 +39,7 @@ public class ConfiguredInlineModelProviderSpi implements ValidationModelProvider private static final String MODEL_EANABLED_PARAM = "org.apache.tamaya.validation.integrated.enabled"; /** The configModels read. */ - private List<ValidationModel> configModels = new ArrayList<>(); + private List<ConfigValidation> configModels = new ArrayList<>(); /** @@ -59,7 +59,7 @@ public class ConfiguredInlineModelProviderSpi implements ValidationModelProvider } - public Collection<ValidationModel> getConfigModels() { + public Collection<ConfigValidation> getConfigValidations() { return configModels; } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredPropertiesModelProviderSpi.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredPropertiesModelProviderSpi.java b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredPropertiesModelProviderSpi.java index 0b7df20..09c5389 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredPropertiesModelProviderSpi.java +++ b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredPropertiesModelProviderSpi.java @@ -19,9 +19,9 @@ package org.apache.tamaya.validation.internal; import org.apache.tamaya.base.configsource.MapConfigSource; -import org.apache.tamaya.validation.ValidationModel; +import org.apache.tamaya.validation.ConfigValidation; import org.apache.tamaya.validation.spi.ConfigValidationReader; -import org.apache.tamaya.validation.spi.ValidationModelProviderSpi; +import org.apache.tamaya.validation.spi.ConfigValidationProviderSpi; import javax.config.ConfigProvider; import java.io.InputStream; @@ -104,14 +104,14 @@ import java.util.logging.Logger; * {model}a.b.c.aValidatedSection.configModels=org.apache.tamaya.model.TestValidator * </pre> */ -public class ConfiguredPropertiesModelProviderSpi implements ValidationModelProviderSpi { +public class ConfiguredPropertiesModelProviderSpi implements ConfigValidationProviderSpi { /** The logger. */ private static final Logger LOG = Logger.getLogger(ConfiguredPropertiesModelProviderSpi.class.getName()); /** parameter to disable this provider. By default the provider is active. */ private static final String MODEL_EANABLED_PARAM = "org.apache.tamaya.validation.default.enabled"; /** The configModels read. */ - private List<ValidationModel> configModels = new ArrayList<>(); + private List<ConfigValidation> configModels = new ArrayList<>(); public ConfiguredPropertiesModelProviderSpi() { Optional<String> enabledVal = ConfigProvider.getConfig().getOptionalValue(MODEL_EANABLED_PARAM, String.class); @@ -148,7 +148,7 @@ public class ConfiguredPropertiesModelProviderSpi implements ValidationModelProv } - public Collection<ValidationModel> getConfigModels() { + public Collection<ConfigValidation> getConfigValidations() { return configModels; } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredResourcesModelProviderSpi.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredResourcesModelProviderSpi.java b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredResourcesModelProviderSpi.java index 9d871d0..df94530 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredResourcesModelProviderSpi.java +++ b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredResourcesModelProviderSpi.java @@ -27,9 +27,9 @@ import java.util.logging.Logger; import org.apache.tamaya.format.ConfigurationData; import org.apache.tamaya.format.ConfigurationFormats; -import org.apache.tamaya.validation.ValidationModel; +import org.apache.tamaya.validation.ConfigValidation; import org.apache.tamaya.validation.spi.ConfigValidationReader; -import org.apache.tamaya.validation.spi.ValidationModelProviderSpi; +import org.apache.tamaya.validation.spi.ConfigValidationProviderSpi; import org.apache.tamaya.resource.ConfigResources; import javax.config.ConfigProvider; @@ -44,7 +44,7 @@ import javax.config.ConfigProvider; * key value pairs within a map are separated by a colon. * </pre> */ -public class ConfiguredResourcesModelProviderSpi implements ValidationModelProviderSpi { +public class ConfiguredResourcesModelProviderSpi implements ConfigValidationProviderSpi { /** * The logger. @@ -74,7 +74,7 @@ public class ConfiguredResourcesModelProviderSpi implements ValidationModelProvi /** * The configModels read. */ - private List<ValidationModel> configModels = new ArrayList<>(); + private List<ConfigValidation> configModels = new ArrayList<>(); /** * Initializes the flag showing if the formats module is present (required). @@ -155,7 +155,7 @@ public class ConfiguredResourcesModelProviderSpi implements ValidationModelProvi @Override - public Collection<ValidationModel> getConfigModels() { + public Collection<ConfigValidation> getConfigValidations() { return configModels; } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelPopulator.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelPopulator.java b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelPopulator.java index 74afcc9..8056e09 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelPopulator.java +++ b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelPopulator.java @@ -24,14 +24,14 @@ import org.apache.tamaya.inject.spi.ConfiguredField; import org.apache.tamaya.inject.spi.ConfiguredMethod; import org.apache.tamaya.inject.spi.ConfiguredType; import org.apache.tamaya.validation.ValidationManager; -import org.apache.tamaya.validation.ValidationModel; -import org.apache.tamaya.validation.spi.ValidateParameter; +import org.apache.tamaya.validation.ConfigValidation; +import org.apache.tamaya.validation.spi.ValidatedParameter; import java.util.Collection; import java.util.logging.Logger; /** - * Internal facade that registers all kind of injected fields as {@link ValidationModel} entries, + * Internal facade that registers all kind of injected fields as {@link ConfigValidation} entries, * so all configured injection points are visible as documented configuration hooks. */ public final class ConfiguredTypeEventsModelPopulator implements ConfigEventListener { @@ -57,10 +57,10 @@ public final class ConfiguredTypeEventsModelPopulator implements ConfigEventList for (ConfiguredField field : confType.getConfiguredFields()) { Collection<String> keys = field.getConfiguredKeys(); for (String key : keys) { - ValidateParameter val = ValidationManager.getInstance().getModel(key, ValidateParameter.class); + ValidatedParameter val = ValidationManager.getInstance().getModel(key, ValidatedParameter.class); if (val == null) { ConfiguredTypeEventsModelProvider.addConfigModel( - new ValidateParameter.Builder(confType.getName(), key) + new ValidatedParameter.Builder(confType.getName(), key) .setType(field.getType().getName()) .setDescription("Injected field: " + field.getAnnotatedField().getDeclaringClass().getName() + '.' + field.toString() + @@ -72,10 +72,10 @@ public final class ConfiguredTypeEventsModelPopulator implements ConfigEventList for (ConfiguredMethod method : confType.getConfiguredMethods()) { Collection<String> keys = method.getConfiguredKeys(); for (String key : keys) { - ValidateParameter val = ValidationManager.getInstance().getModel(key, ValidateParameter.class); + ValidatedParameter val = ValidationManager.getInstance().getModel(key, ValidatedParameter.class); if (val == null) { ConfiguredTypeEventsModelProvider.addConfigModel( - new ValidateParameter.Builder(confType.getName(), key) + new ValidatedParameter.Builder(confType.getName(), key) .setType(method.getParameterTypes()[0].getName()) .setDescription("Injected field: " + method.getAnnotatedMethod().getDeclaringClass().getName() + '.' + method.toString() + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelProvider.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelProvider.java b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelProvider.java index e11e97a..40b6fa4 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelProvider.java +++ b/validation/src/main/java/org/apache/tamaya/validation/internal/ConfiguredTypeEventsModelProvider.java @@ -18,8 +18,8 @@ */ package org.apache.tamaya.validation.internal; -import org.apache.tamaya.validation.ValidationModel; -import org.apache.tamaya.validation.spi.ValidationModelProviderSpi; +import org.apache.tamaya.validation.ConfigValidation; +import org.apache.tamaya.validation.spi.ConfigValidationProviderSpi; import java.util.ArrayList; import java.util.Collection; @@ -30,22 +30,22 @@ import java.util.List; * Model provider that adds model definitions for the items published as * {@link org.apache.tamaya.inject.spi.ConfiguredType} events. */ -public class ConfiguredTypeEventsModelProvider implements ValidationModelProviderSpi { +public class ConfiguredTypeEventsModelProvider implements ConfigValidationProviderSpi { /** The collected models. */ - private static Collection<ValidationModel> configModels = new ArrayList<>(); + private static Collection<ConfigValidation> configModels = new ArrayList<>(); /** * Adds a model, called from the registered listener class. * @param configModel adds the config model. */ - static void addConfigModel(ValidationModel configModel){ - List<ValidationModel> newList = new ArrayList<>(configModels); + static void addConfigModel(ConfigValidation configModel){ + List<ConfigValidation> newList = new ArrayList<>(configModels); newList.add(configModel); ConfiguredTypeEventsModelProvider.configModels = newList; } @Override - public Collection<ValidationModel> getConfigModels() { + public Collection<ConfigValidation> getConfigValidations() { return Collections.unmodifiableCollection(configModels); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigModel.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigModel.java b/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigModel.java deleted file mode 100644 index 7f12753..0000000 --- a/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigModel.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tamaya.validation.spi; - -import org.apache.tamaya.validation.ValidationModel; - -import java.util.Objects; - -/** - * Default configuration Model for a configuration area. - */ -public abstract class AbstractConfigModel implements ValidationModel, Comparable<ValidationModel> { - private final String owner; - private final String name; - private final String description; - private boolean required = false; - - - protected AbstractConfigModel(String owner, String name, boolean required, String description) { - this.name = Objects.requireNonNull(name); - this.owner = Objects.requireNonNull(owner); - this.description = description; - this.required = required; - } - - @Override - public String getOwner() { - return owner; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public boolean isRequired() { - return required; - } - - @Override - public int compareTo(ValidationModel configModel) { - int compare = getType().compareTo(configModel.getType()); - if (compare != 0) { - return compare; - } - return getName().compareTo(configModel.getName()); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - AbstractConfigModel that = (AbstractConfigModel) o; - return getType().equals(that.getType()) && name.equals(that.name); - - } - - @Override - public int hashCode() { - return getType().hashCode() + name.hashCode(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigValidation.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigValidation.java b/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigValidation.java new file mode 100644 index 0000000..23e7c35 --- /dev/null +++ b/validation/src/main/java/org/apache/tamaya/validation/spi/AbstractConfigValidation.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tamaya.validation.spi; + +import org.apache.tamaya.validation.ConfigValidation; + +import java.util.Objects; + +/** + * Default configuration Model for a configuration area. + */ +public abstract class AbstractConfigValidation implements ConfigValidation, Comparable<ConfigValidation> { + private final String owner; + private final String name; + private final String description; + private boolean required = false; + + + protected AbstractConfigValidation(String owner, String name, boolean required, String description) { + this.name = Objects.requireNonNull(name); + this.owner = Objects.requireNonNull(owner); + this.description = description; + this.required = required; + } + + @Override + public String getOwner() { + return owner; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public boolean isRequired() { + return required; + } + + @Override + public int compareTo(ConfigValidation configModel) { + int compare = getArea().compareTo(configModel.getArea()); + if (compare != 0) { + return compare; + } + return getName().compareTo(configModel.getName()); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AbstractConfigValidation that = (AbstractConfigValidation) o; + return getArea().equals(that.getArea()) && name.equals(that.name); + + } + + @Override + public int hashCode() { + return getArea().hashCode() + name.hashCode(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationMBean.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationMBean.java b/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationMBean.java index fc01e61..9fd3f11 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationMBean.java +++ b/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationMBean.java @@ -18,7 +18,7 @@ */ package org.apache.tamaya.validation.spi; -import org.apache.tamaya.validation.ValidationTarget; +import org.apache.tamaya.validation.ConfigArea; /** * JMX Management bean for accessing current configuration information @@ -34,7 +34,7 @@ public interface ConfigValidationMBean { String getConfigurationModel(); - String getConfigurationModel(ValidationTarget type); + String getConfigurationModel(ConfigArea type); /** * Find the validations by checking the validation's name using the given regular expression. @@ -49,5 +49,5 @@ public interface ConfigValidationMBean { * @param namePattern the regular expression to use, not null. * @return the sections defined, never null. */ - String findValidationModels(String namePattern, ValidationTarget... type); + String findValidationModels(String namePattern, ConfigArea... type); } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationProviderSpi.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationProviderSpi.java b/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationProviderSpi.java new file mode 100644 index 0000000..71a42ba --- /dev/null +++ b/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationProviderSpi.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tamaya.validation.spi; + +import org.apache.tamaya.validation.ConfigValidation; + +import java.util.Collection; + +/** + * Model of a configuration state. A model can be a full model, or a partial model, validating only + * a configuration subset. This allows better user feedback because big configurations can be grouped + * and validated by multiple (partial) models. + */ +public interface ConfigValidationProviderSpi { + + /** + * Get the validation defined. + * + * @return the sections defined, never null. + */ + Collection<ConfigValidation> getConfigValidations(); + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationReader.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationReader.java b/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationReader.java index 2938a3e..d32251d 100644 --- a/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationReader.java +++ b/validation/src/main/java/org/apache/tamaya/validation/spi/ConfigValidationReader.java @@ -20,7 +20,7 @@ package org.apache.tamaya.validation.spi; import java.util.*; -import org.apache.tamaya.validation.ValidationModel; +import org.apache.tamaya.validation.ConfigValidation; /** * Utility class to read metamodel information from properties. Hereby these properties can be part of a @@ -44,8 +44,8 @@ public final class ConfigValidationReader { * @param props the properties to be read * @return a collection of config validations. */ - public static Collection<ValidationModel> loadValidations(String owner, Map<String,String> props) { - List<ValidationModel> result = new ArrayList<>(); + public static Collection<ConfigValidation> loadValidations(String owner, Map<String,String> props) { + List<ConfigValidation> result = new ArrayList<>(); Set<String> itemKeys = new HashSet<>(); for (String key : props.keySet()) { if (key.startsWith("_") && @@ -96,10 +96,10 @@ public final class ConfigValidationReader { * @param validations the optional custom validations to be performed. * @return the new validation for this parameter. */ - private static ValidationModel validateParameter(String owner, String paramName, String description, String type, String reqVal, - String regEx, String validations) { + private static ConfigValidation validateParameter(String owner, String paramName, String description, String type, String reqVal, + String regEx, String validations) { boolean required = "true".equalsIgnoreCase(reqVal); - ValidateParameter.Builder builder = ValidateParameter.builder(owner, paramName).setRequired(required) + ValidatedParameter.Builder builder = ValidatedParameter.builder(owner, paramName).setRequired(required) .setDescription(description).setExpression(regEx); if(type!=null) { builder.setType(type); @@ -118,10 +118,10 @@ public final class ConfigValidationReader { * @param validations the optional custom validations to be performed. * @return the new validation for this section. */ - private static ValidationModel validateSection(String owner, String sectionName, String description, String reqVal, - String validations) { + private static ConfigValidation validateSection(String owner, String sectionName, String description, String reqVal, + String validations) { boolean required = "true".equalsIgnoreCase(reqVal); - ValidateSection.Builder builder = ValidateSection.builder(owner, sectionName).setRequired(required) + ValidatedSection.Builder builder = ValidatedSection.builder(owner, sectionName).setRequired(required) .setDescription(description); // if(validations!=null) { // builder.setValidations(validations); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateGroup.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateGroup.java b/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateGroup.java deleted file mode 100644 index 6b7634c..0000000 --- a/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateGroup.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tamaya.validation.spi; - -import org.apache.tamaya.validation.ValidationModel; -import org.apache.tamaya.validation.ValidationTarget; -import org.apache.tamaya.validation.Validation; - -import javax.config.Config; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -/** - * Default configuration Model for a configuration area. - */ -public class ValidateGroup implements ValidationModel { - - private final String owner; - private final String name; - private boolean required; - private List<ValidationModel> childModels = new ArrayList<>(); - - public ValidateGroup(String owner, String name, ValidationModel... configModels){ - this(owner, name, Arrays.asList(configModels)); - } - - public ValidateGroup(String owner, String name, Collection<ValidationModel> configModels){ - this.owner = Objects.requireNonNull(owner); - this.name = Objects.requireNonNull(name); - this.childModels.addAll(configModels); - this.childModels = Collections.unmodifiableList(childModels); - for(ValidationModel val: configModels) { - if(val.isRequired()){ - this.required = true; - break; - } - } - } - - @Override - public String getOwner() { - return owner; - } - - @Override - public String getName() { - return name; - } - - @Override - public boolean isRequired() { - return required; - } - - @Override - public ValidationTarget getType() { - return ValidationTarget.Group; - } - - @Override - public String getDescription() { - if(childModels.isEmpty()){ - return null; - } - StringBuilder b = new StringBuilder(); - for(ValidationModel val: childModels){ - b.append(" >> ").append(val); - } - return b.toString(); - } - - public Collection<ValidationModel> getValidations(){ - return childModels; - } - - @Override - public Collection<Validation> validate(Config config) { - List<Validation> result = new ArrayList<>(1); - for(ValidationModel child: childModels){ - result.addAll(child.validate(config)); - } - return result; - } - - @Override - public String toString(){ - return String.valueOf(getType()) + ", size: " + childModels.size() + ": " + getDescription(); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f030e122/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateParameter.java ---------------------------------------------------------------------- diff --git a/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateParameter.java b/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateParameter.java deleted file mode 100644 index 5d598f1..0000000 --- a/validation/src/main/java/org/apache/tamaya/validation/spi/ValidateParameter.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tamaya.validation.spi; - -import org.apache.tamaya.validation.ValidationModel; -import org.apache.tamaya.validation.ValidationTarget; -import org.apache.tamaya.validation.Validation; - -import javax.config.Config; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Default configuration Model for a configuration parameter. - */ -public class ValidateParameter extends AbstractConfigModel { - /** Optional regular expression for validating the value. */ - private final String regEx; - /** The target type into which the value must be convertible. */ - private final Class<?> type; - - /** - * Internal constructor. - * @param builder the builder, not null. - */ - protected ValidateParameter(Builder builder) { - super(builder.owner, builder.name, builder.required, builder.description); - this.regEx = builder.regEx; - this.type = builder.type; - } - - @Override - public ValidationTarget getType() { - return ValidationTarget.Parameter; - } - - /** - * Get the required parameter type. - * - * @return the type. - */ - public Class<?> getParameterType() { - return type; - } - - @Override - public Collection<Validation> validate(Config config) { - List<Validation> result = new ArrayList<>(1); - String configValue = config.getValue(getName(), String.class); - if (configValue == null && isRequired()) { - result.add(Validation.checkMissing(this)); - } - if (configValue != null && regEx != null) { - if (!configValue.matches(regEx)) { - result.add(Validation.checkError(this, "Config value not matching expression: " + regEx + ", was " + - configValue)); - } - } - return result; - } - - @Override - public String toString() { - StringBuilder b = new StringBuilder(); - b.append(getType()).append(": ").append(getName()); - if (isRequired()) { - b.append(", required: ").append(isRequired()); - } - if (regEx != null) { - b.append(", expression: ").append(regEx); - } - return b.toString(); - } - - /** - * Creates a new Builder instance. - * @param owner the owner name, not null. - * @param name the fully qualified parameter name. - * @return a new builder, never null. - */ - public static Builder builder(String owner, String name) { - return new Builder(owner, name); - } - - /** - * Creates a new ConfigModel - * @param owner the owner name, not null. - * @param name the fully qualified parameter name. - * @param required the required flag. - * @param expression an optional regular expression to validate a value. - * @return the new ConfigModel instance. - */ - public static ValidationModel of(String owner, String name, boolean required, String expression) { - return new Builder(owner, name).setRequired(required).setExpression(expression).build(); - } - - /** - * Creates a new ConfigModel - * @param owner the owner name, not null. - * @param name the fully qualified parameter name. - * @param required the required flag. - * @return the new ConfigModel instance. - */ - public static ValidationModel of(String owner, String name, boolean required) { - return new Builder(owner, name).setRequired(required).build(); - } - - /** - * Creates a new ConfigModel. The parameter will be defined as optional. - * @param owner the owner name, not null. - * @param name the fully qualified parameter name. - * @return the new ConfigModel instance. - */ - public static ValidationModel of(String owner, String name) { - return new Builder(owner, name).setRequired(false).build(); - } - - - /** - * A new Builder for creating ParameterModel instances. - */ - public static class Builder { - /** The parameter's target type. */ - private Class<?> type; - /** The owner. */ - private String owner; - /** The fully qualified parameter name. */ - private String name; - /** The optional validation expression. */ - private String regEx; - /** The optional description. */ - private String description; - /** The required flag. */ - private boolean required; - - /** - * Creates a new Builder. - * @param owner owner, not null. - * @param name the fully qualified parameter name, not null. - */ - public Builder(String owner, String name) { - this.owner = Objects.requireNonNull(owner); - this.name = Objects.requireNonNull(name); - } - - /** - * Sets the target type. - * @param type the type, not null. - * @return the Builder for chaining - */ - public Builder setType(String type) { - try { - this.type = Class.forName(type); - } catch (ClassNotFoundException e) { - try { - this.type = Class.forName("java.lang."+type); - } catch (ClassNotFoundException e2) { - Logger.getLogger(getClass().getName()).log(Level.INFO, "Failed to load parameter type: " + type, e2); - } - } - return this; - } - - /** - * Sets the required flag. - * @param required the required flag. - * @return the Builder for chaining - */ - public Builder setRequired(boolean required) { - this.required = required; - return this; - } - - /** - * Sets the optional description - * @param description the description - * @return the Builder for chaining - */ - public Builder setDescription(String description) { - this.description = description; - return this; - } - - /** - * Sets the optional validation expression - * @param expression the validation expression - * @return the Builder for chaining - */ - public Builder setExpression(String expression) { - this.regEx = expression; - return this; - } - - /** - * Sets the owner name. - * @param owner the owner name, not null. - * @return the Builder for chaining - */ - public Builder setOwner(String owner) { - this.owner = Objects.requireNonNull(owner); - return this; - } - - /** - * Sets the fully qualified parameter name. - * @param name the fully qualified parameter name, not null. - * @return the Builder for chaining - */ - public Builder setName(String name) { - this.name = Objects.requireNonNull(name); - return this; - } - - /** - * Creates a new ConfigModel with the given parameters. - * @return a new ConfigModel , never null. - */ - public ValidationModel build() { - return new ValidateParameter(this); - } - } -}
