View Javadoc
1   package org.codehaus.plexus.interpolation;
2   
3   /*
4    * Copyright 2001-2008 Codehaus Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.util.List;
20  
21  /**
22   * Interpolator interface. Based on existing RegexBasedInterpolator interface.
23   *
24   * @author cstamas
25   */
26  public interface Interpolator extends BasicInterpolator {
27  
28      /**
29       * Add a new {@link ValueSource} to the stack used to resolve expressions
30       * in this interpolator instance.
31       * @param valueSource {@link ValueSource}.
32       */
33      void addValueSource(ValueSource valueSource);
34  
35      /**
36       * Remove the specified {@link ValueSource} from the stack used to resolve
37       * expressions in this interpolator instance.
38       * @param valueSource {@link ValueSource}.
39       */
40      void removeValuesSource(ValueSource valueSource);
41  
42      /**
43       * Add a new post-processor to handle final processing after
44       * recursively-interpolated value is determined.
45       * @param postProcessor {@link InterpolationPostProcessor}.
46       */
47      void addPostProcessor(InterpolationPostProcessor postProcessor);
48  
49      /**
50       * Remove the given post-processor.
51       * @param postProcessor {@link InterpolationPostProcessor}.
52       */
53      void removePostProcessor(InterpolationPostProcessor postProcessor);
54  
55      /**
56       * See {@link Interpolator#interpolate(String, String, RecursionInterceptor)}.
57       * <p>
58       * This method triggers the use of a {@link SimpleRecursionInterceptor}
59       * instance for protection against expression cycles.</p>
60       *
61       * @param input The input string to interpolate
62       *
63       * @param thisPrefixPattern An optional pattern that should be trimmed from
64       *                          the start of any expressions found in the input.
65       * @return interpolated string.
66       * @throws InterpolationException in case of an error.
67       */
68      String interpolate(String input, String thisPrefixPattern) throws InterpolationException;
69  
70      /**
71       * Attempt to resolve all expressions in the given input string, using the
72       * given pattern to first trim an optional prefix from each expression. The
73       * supplied recursion interceptor will provide protection from expression
74       * cycles, ensuring that the input can be resolved or an exception is
75       * thrown.
76       * <b>return an empty String if input is null</b>
77       * @param input The input string to interpolate
78       *
79       * @param thisPrefixPattern An optional pattern that should be trimmed from
80       *                          the start of any expressions found in the input.
81       *
82       * @param recursionInterceptor Used to protect the interpolation process
83       *                             from expression cycles, and throw an
84       *                             exception if one is detected.
85       * @return interpolated string.
86       * @throws InterpolationException in case of an error.
87       */
88      String interpolate(String input, String thisPrefixPattern, RecursionInterceptor recursionInterceptor)
89              throws InterpolationException;
90  
91      /**
92       * Return any feedback messages and errors that were generated - but
93       * suppressed - during the interpolation process. Since unresolvable
94       * expressions will be left in the source string as-is, this feedback is
95       * optional, and will only be useful for debugging interpolation problems.
96       *
97       * @return a {@link List} that may be interspersed with {@link String} and
98       * {@link Throwable} instances.
99       */
100     List getFeedback();
101 
102     /**
103      * Clear the feedback messages from previous interpolate(..) calls.
104      */
105     void clearFeedback();
106 
107     /**
108      * @return state of the cacheAnswers
109      */
110     boolean isCacheAnswers();
111 
112     /**
113      * @param cacheAnswers true/false.
114      */
115     void setCacheAnswers(boolean cacheAnswers);
116 
117     void clearAnswers();
118 }