From 4c5c8d89bea267d0c11f945578cbd989668cdfcf Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Wed, 29 Nov 2000 11:50:08 +0000
Subject: [PATCH] Moved the instantiation of the RE matcher to a factory. Users
can now choose an implementation of there own by setting a system property.
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268264 13f79535-47bb-0310-9956-ffa450edef68
---
bootstrap.sh | 4 +-
build.xml | 3 +-
docs/P4desc.html | 90 ----------------
docs/index.html | 3 +-
.../tools/ant/util/RegexpPatternMapper.java | 41 ++-----
.../ant/util/regexp/RegexpMatcherFactory.java | 102 ++++++++++++++++++
6 files changed, 117 insertions(+), 126 deletions(-)
delete mode 100644 docs/P4desc.html
create mode 100644 src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java
diff --git a/bootstrap.sh b/bootstrap.sh
index 0cefbaea5..58c57f944 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -49,10 +49,10 @@ mkdir -p ${CLASSDIR}
echo ... Compiling Ant Classes
${JAVAC} -d ${CLASSDIR} ${TOOLS}/tar/*.java
+${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/util/regexp/RegexpMatcher.java ${TOOLS}/ant/util/regexp/RegexpMatcherFactory.java
+${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/util/*.java
${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/types/*.java
${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/*.java
-${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/util/regexp/RegexpMatcher.java
-${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/util/*.java
${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/taskdefs/*.java
echo ... Copying Required Files
diff --git a/build.xml b/build.xml
index ad8d63ba8..a534801e5 100644
--- a/build.xml
+++ b/build.xml
@@ -41,6 +41,7 @@
+
@@ -96,7 +97,7 @@
destdir="${build.classes}"
debug="on"
deprecation="off"
- optimize="on" >
+ optimize="${javac.optimize}" >
diff --git a/docs/P4desc.html b/docs/P4desc.html
deleted file mode 100644
index 298c510ae..000000000
--- a/docs/P4desc.html
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-Description
-
-Handles packages/modules retrieved from a Perforce repository.
-
-Parameters
-
-
-
- Attribute |
- Description |
- Required |
-
-
- localpath |
- The local path of the file/directory to
- write file(s) to. |
- Yes |
-
-
- user |
- Specifies the user name, overriding the value of $P4USER,
- $USER, and $USERNAME in the environment. |
- No
- |
-
-
- port |
- Specifies the server's listen address, overriding the
- value of $P4PORT in the environment and the default (perforce:1666). |
- No
- |
-
-
- version |
- The revision number of the file being
- extracted. |
- No |
-
-
- date |
- Get files as of this date. Either [yyyy/mm/dd]
- or [yyyy/mm/dd:hh:mm:ss]. Note that [yyyy/mm/dd] means [yyyy/mm/dd:00:00:00],
- so if you want to include all events on that day refer to
- the next day. |
- No |
-
-
- label |
- A label from which to check out files. |
- No |
-
-
- force |
- "[true|false]". Forces
- resynchronization even if the client already has the
- file, and clobbers writable files. This flag doesn't
- affect open files. |
- No, default "false" |
-
-
- change |
- Gets the file(s) as they were when a specified change
- number was applied. |
- No
- |
-
-
-
-Examples
-
- <perforce localpath="//path/to/source/..."
- force="true"
- change="4513"
- />
-
-syncs the files in the source directory that are in the
-Perforce repository, as of change number 4513, overwriting any
-modified files in the current source tree is needed.
-
- <perforce localpath="//path/to/source/..." />
-
-Syncs with the latest version of the file in the repository.
-
-
diff --git a/docs/index.html b/docs/index.html
index f93bbc3fb..aaa8b73ce 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -27,7 +27,7 @@
Dave Walend (dwalend@cs.tufts.edu)
-Version 1.3 - 2000/11/14
+Version 1.3 - 2000/11/29
Table of Contents
@@ -4550,7 +4550,6 @@ it had been located at htdocs/manual/ChangeLog.txt
.
JUnit
Native2Ascii
NetRexxC
- Perforce
PropertyFile
RenameExtensions
Script
diff --git a/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java b/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
index 2e73812a6..8ec4f4d14 100644
--- a/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
+++ b/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
@@ -56,6 +56,7 @@ package org.apache.tools.ant.util;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.regexp.RegexpMatcher;
+import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
import java.util.Enumeration;
import java.util.Vector;
@@ -70,30 +71,23 @@ public class RegexpPatternMapper implements FileNameMapper {
protected RegexpMatcher reg = null;
protected char[] to = null;
protected StringBuffer result = new StringBuffer();
- protected Class regexpMatcherClass = null;
public RegexpPatternMapper() throws BuildException {
- try {
- regexpMatcherClass = Class.forName("org.apache.tools.ant.util.regexp.JakartaOroMatcher");
-
- if (regexpMatcherClass == null) {
- regexpMatcherClass = Class.forName("org.apache.tools.ant.util.regexp.JakartaRegexpMatcher");
-
- }
- } catch (ClassNotFoundException ce) {
- } catch (NoClassDefFoundError ne) {
- }
-
- if (regexpMatcherClass == null) {
- throw new BuildException("No supported regular expression matcher found");
- }
+ reg = (new RegexpMatcherFactory()).newRegexpMatcher();
}
/**
* Sets the "from" pattern. Required.
*/
public void setFrom(String from) throws BuildException {
- reg = createMatcher(from);
+ try {
+ reg.setPattern(from);
+ } catch (NoClassDefFoundError e) {
+ // depending on the implementation the actual RE won't
+ // get instantiated in the constructor.
+ throw new BuildException("Cannot load regular expression matcher",
+ e);
+ }
}
/**
@@ -144,19 +138,4 @@ public class RegexpPatternMapper implements FileNameMapper {
return result.toString();
}
- /**
- * Create an implementation of RegexpMatcher based on the classes
- * that can be loaded.
- */
- protected RegexpMatcher createMatcher(String pattern)
- throws BuildException {
- try {
- RegexpMatcher rm = (RegexpMatcher) regexpMatcherClass.newInstance();
- rm.setPattern(pattern);
- return rm;
- } catch (Throwable t) {
- throw new BuildException(t);
- }
-
- }
}
diff --git a/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java b/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java
new file mode 100644
index 000000000..76c55361b
--- /dev/null
+++ b/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java
@@ -0,0 +1,102 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+
+package org.apache.tools.ant.util.regexp;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * Simple Factory Class that produces an implementation of
+ * RegexpMatcher based on the system property
+ * ant.regexp.matcherimpl
and the classes
+ * available.
+ *
+ * In a more general framework this class would be abstract and
+ * have a static newInstance method.
+ *
+ * @author Stefan Bodewig
+ */
+public class RegexpMatcherFactory {
+
+ public RegexpMatcherFactory() {}
+
+ public RegexpMatcher newRegexpMatcher() throws BuildException {
+ String systemDefault = System.getProperty("ant.regexp.matcherimpl");
+ if (systemDefault != null) {
+ return createInstance(systemDefault);
+ // XXX should we silently possible exceptions and try to
+ // load a different implementation?
+ }
+
+ try {
+ return createInstance("org.apache.tools.ant.util.regexp.JakartaOroMatcher");
+ } catch (BuildException be) {}
+
+ try {
+ return createInstance("org.apache.tools.ant.util.regexp.JakartaRegexpMatcher");
+ } catch (BuildException be) {}
+
+ throw new BuildException("No supported regular expression matcher found");
+ }
+
+ protected RegexpMatcher createInstance(String className)
+ throws BuildException {
+ try {
+ Class implClass = Class.forName(className);
+ return (RegexpMatcher) implClass.newInstance();
+ } catch (Throwable t) {
+ throw new BuildException(t);
+ }
+ }
+}