001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.pipeline.validation;
019    
020    import org.apache.commons.pipeline.Stage;
021    
022    /**
023     * This class is used to store a collection of information about a particular 
024     * validation failure.
025     *
026     */
027    public class ValidationFailure {
028        /**
029         * Enumeration of possible causes of validation failure
030         */
031        public enum Type {
032            /**
033             * Indicates that a stage appears to be unable to consume the output of the previous stage
034             */
035            STAGE_CONNECT, 
036            /**
037             * Indicates that a branch could not consume the output (type mismatch) of pipeline
038             * stages feeding the branch.
039             */
040            BRANCH_CONNECT, 
041            /**
042             * Indicates that a branch to consume the branch output of a stage could not be found.
043             */
044            BRANCH_NOT_FOUND,
045            /**
046             * Other validation error - see detail message.
047             */
048            OTHER
049        };
050        
051        private Type type;
052        private String message;
053        private Stage upstream;
054        private Stage downstream;
055        
056        /**
057         * Creates a new instance of ValidationError
058         * @param type The type of problem encountered
059         * @param message A message with more detailed information about the problem
060         * @param upstream A reference to the upstream stage
061         * @param downstream A reference to a downstream stage
062         */
063        public ValidationFailure(Type type, String message, Stage upstream, Stage downstream) {
064            this.type = type;
065            this.message = message;
066            this.upstream = upstream;
067            this.downstream = downstream;        
068        }
069        
070        /**
071         * Type identifying what sort of problem was encountered
072         * @return the type of problem encountered
073         */
074        public Type getType() {
075            return this.type;
076        }
077        
078        /**
079         * Returns the descriptive message about the error
080         * @return message describing the error
081         */
082        public String getMessage() {
083            return this.message;
084        }
085        
086        /**
087         * The stage upstream of the connection that could not be validated
088         * @return reference to the upstream Stage
089         */
090        public Stage getUpstreamStage() {
091            return this.upstream;
092        }
093        
094        /**
095         * The stage downstream of the connection that could not be validated
096         * @return reference to the downstream Stage
097         */
098        public Stage getDownstreamStage() {
099            return this.downstream;
100        }
101    }