diff --git a/proposal/sandbox/embed/Import.java b/proposal/sandbox/embed/Import.java
new file mode 100644
index 000000000..3c6c8357c
--- /dev/null
+++ b/proposal/sandbox/embed/Import.java
@@ -0,0 +1,179 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-2002 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.tasks;
+
+import org.apache.tools.ant.*;
+import org.apache.tools.ant.helper.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Hashtable;
+import java.util.Vector;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Stack;
+import org.xml.sax.Locator;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.SAXException;
+import org.xml.sax.DocumentHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.AttributeList;
+import org.xml.sax.helpers.XMLReaderAdapter;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.AttributeListImpl;
+
+import org.apache.tools.ant.util.JAXPUtils;
+
+/**
+ * Import task.
+ *
+ * It must be 'top level'. On execution it'll read another file
+ * into the same Project.
+ *
+ * @author Nicola Ken Barozzi nicolaken@apache.org
+ * @author Dominique Devienne DDevienne@lgc.com
+ * @author Costin Manolache
+ */
+public class Import extends Task {
+ String file;
+
+ public void setFile( String file ) {
+ // I don't think we can use File - different rules
+ // for relative paths.
+ this.file=file;
+ }
+
+ /**
+ * Initialisation routine called after handler creation
+ * with the element name and attributes. The attributes which
+ * this handler can deal with are: "default"
,
+ * "name"
, "id"
and "basedir"
.
+ *
+ * @param tag Name of the element which caused this handler
+ * to be created. Should not be null
.
+ * Ignored in this implementation.
+ * @param attrs Attributes of the element which caused this
+ * handler to be created. Must not be null
.
+ *
+ * @exception SAXParseException if an unexpected attribute is
+ * encountered or if the "default"
attribute
+ * is missing.
+ */
+ public void execute() throws BuildException
+ {
+ if (file == null) {
+ throw new BuildException("import element appears without a file attribute");
+ }
+
+ ProjectHelperImpl2.AntXmlContext context;
+ context=(ProjectHelperImpl2.AntXmlContext)project.getReference("ant.parsing.context");
+
+ context.importlevel++;
+
+ project.log("importlevel: "+(context.importlevel-1)+" -> "+(context.importlevel),
+ Project.MSG_DEBUG);
+ project.log("Importing file "+file+" from "+
+ context.buildFile.getAbsolutePath(),
+ Project.MSG_VERBOSE);
+
+ // Paths are relative to the build file they're imported from,
+ // *not* the current directory (same as entity includes).
+ File importedFile = new File(file);
+ if (!importedFile.isAbsolute()) {
+ importedFile = new File(context.buildFileParent, file);
+ }
+ if (!importedFile.exists()) {
+ throw new BuildException("Cannot find "+file+" imported from "+
+ context.buildFile.getAbsolutePath());
+ }
+
+ // Add parent build file to the map to avoid cycles...
+ String parentFilename = getPath(context.buildFile);
+ if (!context.importedFiles.containsKey(parentFilename)) {
+ context.importedFiles.put(parentFilename, context.buildFile);
+ }
+
+ // Make sure we import the file only once
+ String importedFilename = getPath(importedFile);
+ if (context.importedFiles.containsKey(importedFilename)) {
+ project.log("\nSkipped already imported file:\n "+importedFilename+"\n",
+ Project.MSG_WARN);
+ return;
+ } else {
+ context.importedFiles.put(importedFilename, importedFile);
+ }
+
+ context.ignoreProjectTag=true;
+ context.helper.parse(project, importedFile, new ProjectHelperImpl2.RootHandler(context));
+
+ context.importlevel--;
+ project.log("importlevel: "+context.importlevel+" <- "+
+ (context.importlevel+1) ,Project.MSG_DEBUG);
+ }
+
+ private static String getPath(File file) {
+ try {
+ return file.getCanonicalPath();
+ }
+ catch (IOException e) {
+ return file.getAbsolutePath();
+ }
+ }
+}
diff --git a/proposal/sandbox/embed/ant-sax2.jar b/proposal/sandbox/embed/ant-sax2.jar
index cabbafe24..58f725b24 100644
Binary files a/proposal/sandbox/embed/ant-sax2.jar and b/proposal/sandbox/embed/ant-sax2.jar differ
diff --git a/proposal/sandbox/embed/build.xml b/proposal/sandbox/embed/build.xml
index 2c5c3120c..01babfd1c 100644
--- a/proposal/sandbox/embed/build.xml
+++ b/proposal/sandbox/embed/build.xml
@@ -2,7 +2,7 @@
-
+
@@ -10,6 +10,8 @@
todir="${ant.src}/src/main/org/apache/tools/ant" />
+
+
@@ -44,6 +47,7 @@
+