1. /*
  2. * Copyright 2002-2004 The Apache Software Foundation
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. *
  16. */
  17. package org.apache.tools.ant.types;
  18. import java.util.Vector;
  19. import org.apache.tools.ant.BuildException;
  20. import org.apache.tools.ant.filters.ChainableReader;
  21. import org.apache.tools.ant.filters.ClassConstants;
  22. import org.apache.tools.ant.filters.EscapeUnicode;
  23. import org.apache.tools.ant.filters.ExpandProperties;
  24. import org.apache.tools.ant.filters.HeadFilter;
  25. import org.apache.tools.ant.filters.LineContains;
  26. import org.apache.tools.ant.filters.LineContainsRegExp;
  27. import org.apache.tools.ant.filters.PrefixLines;
  28. import org.apache.tools.ant.filters.ReplaceTokens;
  29. import org.apache.tools.ant.filters.StripJavaComments;
  30. import org.apache.tools.ant.filters.StripLineBreaks;
  31. import org.apache.tools.ant.filters.StripLineComments;
  32. import org.apache.tools.ant.filters.TabsToSpaces;
  33. import org.apache.tools.ant.filters.TailFilter;
  34. import org.apache.tools.ant.filters.TokenFilter;
  35. /**
  36. * FilterChain may contain a chained set of filter readers.
  37. *
  38. */
  39. public final class FilterChain extends DataType
  40. implements Cloneable {
  41. private Vector filterReaders = new Vector();
  42. public final void addFilterReader(final AntFilterReader filterReader) {
  43. filterReaders.addElement(filterReader);
  44. }
  45. public final Vector getFilterReaders() {
  46. return filterReaders;
  47. }
  48. public final void addClassConstants(final ClassConstants classConstants) {
  49. filterReaders.addElement(classConstants);
  50. }
  51. public final void addExpandProperties(final ExpandProperties expandProperties) {
  52. filterReaders.addElement(expandProperties);
  53. }
  54. public final void addHeadFilter(final HeadFilter headFilter) {
  55. filterReaders.addElement(headFilter);
  56. }
  57. public final void addLineContains(final LineContains lineContains) {
  58. filterReaders.addElement(lineContains);
  59. }
  60. public final void addLineContainsRegExp(final LineContainsRegExp
  61. lineContainsRegExp) {
  62. filterReaders.addElement(lineContainsRegExp);
  63. }
  64. public final void addPrefixLines(final PrefixLines prefixLines) {
  65. filterReaders.addElement(prefixLines);
  66. }
  67. public final void addReplaceTokens(final ReplaceTokens replaceTokens) {
  68. filterReaders.addElement(replaceTokens);
  69. }
  70. public final void addStripJavaComments(final StripJavaComments
  71. stripJavaComments) {
  72. filterReaders.addElement(stripJavaComments);
  73. }
  74. public final void addStripLineBreaks(final StripLineBreaks
  75. stripLineBreaks) {
  76. filterReaders.addElement(stripLineBreaks);
  77. }
  78. public final void addStripLineComments(final StripLineComments
  79. stripLineComments) {
  80. filterReaders.addElement(stripLineComments);
  81. }
  82. public final void addTabsToSpaces(final TabsToSpaces tabsToSpaces) {
  83. filterReaders.addElement(tabsToSpaces);
  84. }
  85. public final void addTailFilter(final TailFilter tailFilter) {
  86. filterReaders.addElement(tailFilter);
  87. }
  88. /**
  89. * @since Ant 1.6
  90. */
  91. public final void addEscapeUnicode(final EscapeUnicode escapeUnicode) {
  92. filterReaders.addElement(escapeUnicode);
  93. }
  94. /**
  95. * @since Ant 1.6
  96. */
  97. public final void addTokenFilter(final TokenFilter tokenFilter) {
  98. filterReaders.addElement(tokenFilter);
  99. }
  100. /**
  101. * delete characters filter
  102. * @since Ant 1.6
  103. */
  104. public void addDeleteCharacters(TokenFilter.DeleteCharacters filter) {
  105. filterReaders.addElement(filter);
  106. }
  107. /**
  108. * containsregex
  109. * @since Ant 1.6
  110. */
  111. public void addContainsRegex(TokenFilter.ContainsRegex filter) {
  112. filterReaders.addElement(filter);
  113. }
  114. /**
  115. * replaceregex
  116. * @since Ant 1.6
  117. */
  118. public void addReplaceRegex(TokenFilter.ReplaceRegex filter) {
  119. filterReaders.addElement(filter);
  120. }
  121. /**
  122. * trim
  123. * @since Ant 1.6
  124. */
  125. public void addTrim(TokenFilter.Trim filter) {
  126. filterReaders.addElement(filter);
  127. }
  128. /**
  129. * replacestring
  130. * @since Ant 1.6
  131. */
  132. public void addReplaceString(
  133. TokenFilter.ReplaceString filter) {
  134. filterReaders.addElement(filter);
  135. }
  136. /**
  137. * ignoreBlank
  138. * @since Ant 1.6
  139. */
  140. public void addIgnoreBlank(
  141. TokenFilter.IgnoreBlank filter) {
  142. filterReaders.addElement(filter);
  143. }
  144. /**
  145. * Makes this instance in effect a reference to another FilterChain
  146. * instance.
  147. *
  148. * <p>You must not set another attribute or nest elements inside
  149. * this element if you make it a reference.</p>
  150. *
  151. * @param r the reference to which this instance is associated
  152. * @exception BuildException if this instance already has been configured.
  153. */
  154. public void setRefid(Reference r) throws BuildException {
  155. if (!filterReaders.isEmpty()) {
  156. throw tooManyAttributes();
  157. }
  158. // change this to get the objects from the other reference
  159. Object o = r.getReferencedObject(getProject());
  160. if (o instanceof FilterChain) {
  161. FilterChain fc = (FilterChain) o;
  162. filterReaders = fc.getFilterReaders();
  163. } else {
  164. String msg = r.getRefId() + " doesn\'t refer to a FilterChain";
  165. throw new BuildException(msg);
  166. }
  167. super.setRefid(r);
  168. }
  169. /**
  170. * add a chainfilter
  171. * @since Ant 1.6
  172. */
  173. public void add(ChainableReader filter) {
  174. filterReaders.addElement(filter);
  175. }
  176. }