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 java.util.List;
021    import org.apache.commons.pipeline.Pipeline;
022    import org.apache.commons.pipeline.Stage;
023    import org.apache.commons.pipeline.StageDriverFactory;
024    
025    /**
026     * This interface is used as the basis for validation strategies that may be
027     * used to check the validity of a pipeline under construction.
028     *
029     *
030     */
031    public interface PipelineValidator {
032        /**
033         * Implementations of this method should validate the overall structure of 
034         * the pipeline.
035         * @param pipeline The pipeline to be validated
036         * @return The list of validation errors encountered. An empty list is returned if no
037         * errors are found.
038         */
039        public List<ValidationFailure> validate(Pipeline pipeline);
040        
041        /**
042         * Implementations of this method should validate whether or not the specified 
043         * stage can be added to the pipeline in its current state.
044         * @param pipeline The pipeline to which the stage is being added
045         * @param stage The added stage
046         * @param driverFactory The StageDriverFactory used to create a StageDriver for the stage
047         * @return The list of validation errors encountered, or an empty list if none were
048         * encountered
049         */
050        public List<ValidationFailure> validateAddStage(Pipeline pipeline, Stage stage, StageDriverFactory driverFactory);
051        
052        /**
053         * Implementations of this method should validate whether or not the specified
054         * branch can be added to the specified pipeline with the given key.
055         * @param pipeline The pipeline to which the branch is being added
056         * @param branchKey The key used to identify the new branch
057         * @param branch The new branch pipeline
058         * @return The list of validation failures, or an empty list if validation passes.
059         */
060        public List<ValidationFailure> validateAddBranch(Pipeline pipeline, String branchKey, Pipeline branch);
061    }