[
https://issues.apache.org/jira/browse/AMBARI-8295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14208678#comment-14208678
]
Hudson commented on AMBARI-8295:
--------------------------------
SUCCESS: Integrated in Ambari-trunk-Commit #927 (See
[https://builds.apache.org/job/Ambari-trunk-Commit/927/])
AMBARI-8295 - Views: support validation (tbeerbower) (tbeerbower:
http://git-wip-us.apache.org/repos/asf?p=ambari.git&a=commit&h=e2757784ca251c18ecdd248a7a1a8e4a3019fac3)
*
ambari-server/src/test/java/org/apache/ambari/server/view/validation/InstanceValidationResultImplTest.java
*
ambari-server/src/test/java/org/apache/ambari/server/view/configuration/ViewConfigTest.java
*
ambari-server/src/test/java/org/apache/ambari/server/view/validation/ValidationResultImplTest.java
*
ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java
*
ambari-views/src/main/java/org/apache/ambari/view/validation/ValidationResult.java
*
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java
* ambari-views/src/main/java/org/apache/ambari/view/validation/Validator.java
* ambari-views/src/main/resources/view.xsd
*
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java
*
ambari-server/src/main/java/org/apache/ambari/server/view/validation/InstanceValidationResultImpl.java
* ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
*
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProvider.java
*
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
*
ambari-server/src/main/java/org/apache/ambari/server/view/configuration/ViewConfig.java
*
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BaseProviderTest.java
*
ambari-server/src/main/java/org/apache/ambari/server/view/validation/ValidationResultImpl.java
*
ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java
> Views: support validation
> -------------------------
>
> Key: AMBARI-8295
> URL: https://issues.apache.org/jira/browse/AMBARI-8295
> Project: Ambari
> Issue Type: Bug
> Reporter: Tom Beerbower
> Assignee: Tom Beerbower
> Fix For: 2.0.0
>
> Attachments: AMBARI-8295.patch
>
>
> Proposal:
> The view framework SPI exposes a new Validator interface that could
> optionally be implemented by the view developer. The Validator interface
> allows the view developer to define the validation logic that gets applied
> when a new view instance is created or updated. The interface specifies a
> svalidate method that is passed a ViewInstanceDefinition. The given view
> instance is the instance that is being created or updated. The validator has
> full access to the instance definition as well as the owning view definition
> so it can check things like parameters and properties. If the validator
> successfully validates the given instance it simply returns. If the
> validation fails then the validator should throw an ValidationException with
> a message that describes the failure.
> {code}
> public interface Validator {
> /**
> * Validate the given view instance definition. Return {@code null} to
> indicate that
> * no validation was performed.
> *
> * @param definition the view instance definition
> * @param mode the validation mode
> *
> * @return the instance validation result; may be {@code null}
> */
> public ValidationResult validateInstance(ViewInstanceDefinition definition,
> ValidationContext mode);
> /**
> * Validate a property of the given view instance definition. Return
> {@code null} to indicate that
> * no validation was performed.
> *
> * @param property the property name
> * @param definition the view instance definition
> * @param mode the validation mode
> *
> * @return the instance validation result; may be {@code null}
> */
> public ValidationResult validateProperty(String property,
> ViewInstanceDefinition definition, ValidationContext mode);
> /**
> * The context in which a view instance validation check is performed.
> */
> public enum ValidationContext {
> PRE_CREATE, // validation prior to creation
> PRE_UPDATE, // validation prior to update
> EXISTING // validation of an existing view instance
> }
> }
> {code}
> The context allows the framework a way to let the validator know at what
> point in the view instance lifecycle the validation is being performed. If a
> validation fails during instance create (PRE_CREATE), the view framework will
> rollback the instance creation and will fail with an appropriate response
> (see below). The same is true for instance update (PRE_UPDATE). The
> validator (if specified) will also be called during a GET of view instance
> resources (EXISTING) and be reported back as properties of the resource in
> the normal response.
> So, for example, a view instance may have a 'server' property. During
> instance creation (PRE_CREATE), the validator for the view might check the
> 'server' property for invalid characters and fail the create if found. After
> an instance is created and a request to get the instance resource is made
> (EXISTING), the validator might check to see if the server specified by the
> 'server' property is actually reachable and fail the verify if not. In this
> case the view instance resource is still reachable but the fact that the
> validation failed will show as a property in the instance resource (see
> below).
> The result of the validation for the view instance and each of its properties
> are returned from the validator to the view framework in the validation
> result classes ...
> {code}
> public interface ValidationResult {
> /**
> * Determine whether or not the result is valid.
> *
> * @return true if the result is valid
> */
> public boolean isValid();
> /**
> * Get the detail of the validation result.
> *
> * @return the validation result detail
> */
> public String getDetail();
> /**
> * Successful validation result.
> */
> public static final ValidationResult SUCCESS = new ValidationResult() {
> @Override
> public boolean isValid() {
> return true;
> }
> @Override
> public String getDetail() {
> return "OK";
> }
> };
> }
> {code}
> If a POST or PUT for a view instance fails because of a validation check the
> results will look something like this (note in the example that the
> validation for one property passed while the other failed) ...
> {code}
> {
> "status": 400,
> "message": "{"propertyResults": {
> "cities": {
> "valid": true,
> "detail": "OK"
> },
> "units": {
> "valid": false,
> "detail": "Units must be either metric or imperial."
> }
> }, "valid": false, "detail": "The instance has invalid properties."}"
> }
> {code}
> When a view specifies a validator, the instance resource will include the
> properties 'validation_result' and 'property_validation_results' which will
> be reevaluated each time the resource is requested...
> {code}
> {
> "href" :
> "http://c6401.ambari.apache.org:8080/api/v1/views/WEATHER/versions/1.0.0/instances/EUROPE",
> "ViewInstanceInfo" : {
> "instance_name" : "EUROPE",
> ...
> "validation_result" : {
> "valid" : true,
> "detail" : "OK"
> },
> "version" : "1.0.0",
> "view_name" : "WEATHER",
> ...
> "properties" : {
> "cities" : "London, UK;Paris;Munich",
> "units" : "imperial"
> },
> "property_validation_results" : {
> "cities" : {
> "valid" : true,
> "detail" : "OK"
> },
> "units" : {
> "valid" : true,
> "detail" : "OK"
> }
> }
> },
> ...
> {code}
> Note that in the examples above, the detail messages are provided by the view
> Validator implementation and are specific to the view (it can be any text
> that makes sense for that view).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)