Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2000, 2008 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - derived implementation Martin Karpisek - bug 195840 /
 
 
 package org.eclipse.ant.internal.ui.editor.utils;
   
 import java.io.File;
 import java.util.Map;
 
 
 import  org.apache.tools.ant.BuildException;
 import  org.apache.tools.ant.Location;
 import  org.apache.tools.ant.Project;
 import  org.apache.tools.ant.RuntimeConfigurable;
 import  org.apache.tools.ant.Target;
 import  org.apache.tools.ant.Task;
 import  org.apache.tools.ant.UnknownElement;
 import  org.apache.tools.ant.helper.AntXMLContext;
 import  org.apache.tools.ant.helper.ProjectHelper2;
 import  org.apache.tools.ant.util.FileUtils;
 import  org.apache.tools.ant.util.JAXPUtils;
Derived from the original Ant ProjectHelper2 with help from the JAXPUtils class. This class provides parsing for using a String as a source and provides handlers that will continue parsing to completion upon hitting errors.
 
 public class ProjectHelper extends ProjectHelper2 {

helper for path -> URI and URI -> path conversions.
 
 	private static FileUtils funull;
    
The buildfile that is to be parsed. Must be set if parsing is to be successful.
 
 	private File buildFilenull;
 	
 	private static String currentEntityNamenull;
 	private static String currentEntityPathnull;
 	
 	private static int currentImportStackSize= 1;

The Ant Model
 
 	private static IAntModel fgAntModel;

The current Ant parsing context
 
 	private static AntXMLContext fgAntContext;
 	
 	private static AntHandler elementHandlernew ElementHandler();
 	private static AntHandler projectHandlernew ProjectHandler();
 	private static AntHandler targetHandlernew TargetHandler();
 	private static AntHandler mainHandlernew MainHandler();
 	private static LexicalHandler lexicalHandlernew LexHandler();
     
     private static XMLReader fgXMLReadernull;
 	
 	public static class ElementHandler extends ProjectHelper2.ElementHandler {
 		
 		private UnknownElement tasknull;
 		private Task currentTasknull;
         
         private Map fNormalizedFileNamesnew HashMap();
 		
 		/* (non-Javadoc)
 		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartChild(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public AntHandler onStartChild(String uriString tagString qnameAttributes attrs, AntXMLContext context) {
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void onStartElement(String uriString tagString qnameAttributes attrs, AntXMLContext context) {
			try {
				RuntimeConfigurable wrappercontext.currentWrapper();
				null;
				if (wrapper != null) {
					= (Task)wrapper.getProxy();
				}
				onStartElement0(uritagqnameattrscontext);
				Locator locatorcontext.getLocator();
				getAntModel().addTask(attrslocator.getLineNumber(), locator.getColumnNumber());
catch (BuildException be) {
				Locator locatorcontext.getLocator();
				getAntModel().addTask(attrslocator.getLineNumber(), locator.getColumnNumber());
			}
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onEndElement(java.lang.String, java.lang.String, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void onEndElement(String uriString tag, AntXMLContext context) {
			super.onEndElement(uritagcontext);
			Locator locatorcontext.getLocator();
			}
		}
		private void onStartElement0(String uriString tagString qnameAttributes attrs, AntXMLContext context) {
			RuntimeConfigurable parentWrapper = context.currentWrapper();
            Object parent = null;
            if (parentWrapper != null) {
                parent = parentWrapper.getProxy();
            }
            /* UnknownElement is used for tasks and data types - with
               delayed eval */
             = new UnknownElement(tag);
            .setProject(context.getProject());
            .setNamespace(uri);
            .setQName(qname);
            .setTaskType(org.apache.tools.ant.ProjectHelper.genComponentName(.getNamespace(), tag));
            .setTaskName(qname);
            Locator contextLocatorcontext.getLocator();
            String fileNamecontextLocator.getSystemId();
            String normalizedFileName= (String.get(fileName);
            if (normalizedFileName == null) {
                if (fileName.startsWith("file:")) { //$NON-NLS-1$
                    normalizedFileNamegetFileUtils().fromURI(fileName);
                    .put(fileNamenormalizedFileName);
                } else {
                    normalizedFileNamefileName;
                }
            }
            
            Target currentTargetcontext.getCurrentTarget();
            Location location = new Location(normalizedFileName,
                    contextLocator.getLineNumber(),
                    contextLocator.getColumnNumber());
            .setLocation(location);
            .setOwningTarget(currentTarget);
            context.configureId(attrs);
            if (parent != null) {
                // Nested element
                ((UnknownElement) parent).addChild();
            }  else {
                // Task included in a target ( including the default one ).
                currentTarget.addTask();
            }
            // container.addTask(task);
            // This is a nop in UE: task.init();
            RuntimeConfigurable wrapper
                = new RuntimeConfigurable(.getTaskName());
            for (int i = 0; i < attrs.getLength(); i++) {
                String attrUri = attrs.getURI(i);
                if (attrUri != null
                    && attrUri.length() != 0 
                    && !attrUri.equals(uri)) {
                    continue// Ignore attributes from unknown uris
                }
                String name = attrs.getLocalName(i);
                String value = attrs.getValue(i);
                // PR: Hack for ant-type value
                //  an ant-type is a component name which can
                // be namespaced, need to extract the name
                // and convert from qualified name to uri/name
                if (name.equals("ant-type")) { //$NON-NLS-1$
                    int index = value.indexOf(':');
                    if (index != -1) {
                        String prefix = value.substring(0, index);
                        String mappedUri = context.getPrefixMapping(prefix);
                        if (mappedUri == null) {
                            throw new BuildException(
                                "Unable to find XML NS prefix " + prefix); //$NON-NLS-1$
                        }
                        value = org.apache.tools.ant.ProjectHelper.genComponentName(mappedUrivalue.substring(index + 1));
                    }
                }
                wrapper.setAttribute(namevalue);
            }
            if (parentWrapper != null) {
                parentWrapper.addChild(wrapper);
            }
            context.pushWrapper(wrapper);
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#characters(char[], int, int, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void characters(char[] bufint startint count, AntXMLContext context) {
			try {
				super.characters(bufstartcountcontext);
catch (SAXParseException e) {
				ErrorHelper.handleErrorFromElementText(startcountcontexte);
catch (BuildException be) {
				ErrorHelper.handleErrorFromElementText(startcountcontextbe);
			}
		}
		public void reset() {
			null;
            .clear();
		}
	}
	public static class MainHandler extends ProjectHelper2.MainHandler {
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartChild(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public AntHandler onStartChild(String uriString nameString qnameAttributes attrs, AntXMLContext contextthrows SAXParseException {
			if (name.equals("project"//$NON-NLS-1$
					&& (uri.length() == 0 || uri.equals(ANT_CORE_URI))) {
			try {
				return super.onStartChild(urinameqnameattrscontext);
catch (SAXParseException e) {
				throw e;
			}
		}
	}
	public static class ProjectHandler extends ProjectHelper2.ProjectHandler {
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartChild(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public AntHandler onStartChild(String uriString nameString qnameAttributes attrs, AntXMLContext context) {
			if (name.equals("target"//$NON-NLS-1$
					&& (uri.length() == 0 || uri.equals(ANT_CORE_URI))) {
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onEndElement(java.lang.String, java.lang.String, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void onEndElement(String uriString tag, AntXMLContext context) {
			super.onEndElement(uritagcontext);
			if ( == 1) {
				Locator locatorcontext.getLocator();
			}
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void onStartElement(String uriString tagString qnameAttributes attrs, AntXMLContext context) {
			try {
				super.onStartElement(uritagqnameattrscontext);
catch (SAXParseException e) {
catch (BuildException be) {
			}
            if (context.getCurrentTarget() == null) {
                //exception occurred creating the project
                context.getProject().addTarget(""context.getImplicitTarget()); //$NON-NLS-1$
                context.setCurrentTarget(context.getImplicitTarget());
            }
			if ( == 1) {
				Locator locatorcontext.getLocator();
				getAntModel().addProject(context.getProject(), locator.getLineNumber(), locator.getColumnNumber());
			}
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#characters(char[], int, int, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void characters(char[] bufint startint count, AntXMLContext context) {
			try {
				super.characters(bufstartcountcontext);
catch (SAXParseException e) {
				ErrorHelper.handleErrorFromElementText(startcountcontexte);
catch (BuildException be) {
				ErrorHelper.handleErrorFromElementText(startcountcontextbe);
			}
		}
	}
	public static class TargetHandler extends ProjectHelper2.TargetHandler {
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartChild(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public AntHandler onStartChild(String uriString nameString qnameAttributes attrs, AntXMLContext context) {
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onStartElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void onStartElement(String uriString tagString qnameAttributes attrs, AntXMLContext context) {
			try {
				super.onStartElement(uritagqnameattrscontext);
				Target newTargetcontext.getCurrentTarget();
				Locator locatorcontext.getLocator();
				getAntModel().addTarget(newTargetlocator.getLineNumber(), locator.getColumnNumber());
catch (SAXParseException e) {
				handleErrorInTarget(contexte);
catch (BuildException be) {
				handleErrorInTarget(contextbe);
			}
		}
		private void handleErrorInTarget(AntXMLContext contextException e) {
			Target newTargetcontext.getCurrentTarget();
			Locator locatorcontext.getLocator();
			getAntModel().addTarget(newTargetlocator.getLineNumber(), locator.getColumnNumber());
			getAntModel().errorFromElement(enulllocator.getLineNumber(), locator.getColumnNumber());
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#onEndElement(java.lang.String, java.lang.String, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void onEndElement(String uriString tag, AntXMLContext context) {
			super.onEndElement(uritagcontext);
			Locator locatorcontext.getLocator();
		}
		/* (non-Javadoc)
		 * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler#characters(char[], int, int, org.apache.tools.ant.helper.AntXMLContext)
		 */
		public void characters(char[] bufint startint count, AntXMLContext context) {
			try {
				super.characters(bufstartcountcontext);
catch (SAXParseException e) {
				ErrorHelper.handleErrorFromElementText(startcountcontexte);
catch (BuildException be) {
				ErrorHelper.handleErrorFromElementText(startcountcontextbe);
			}
		}
	}
	 public static class RootHandler extends ProjectHelper2.RootHandler {
		public RootHandler(AntXMLContext context, AntHandler rootHandler) {
			super(contextrootHandler);
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
		 */
		public void error(SAXParseException e) {
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
		 */
		public void fatalError(SAXParseException e) {
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
		 */
		public void warning(SAXParseException e) {
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String, java.lang.String)
		 */
		public InputSource resolveEntity(String publicIdString systemId) {
			InputSource sourcesuper.resolveEntity(publicIdsystemId);
			if (source != null) {
				String path = getFileUtils().fromURI(source.getSystemId());
				if ( == null) {
else {
				}
			}
			return source;
		}
        
        /* (non-Javadoc)
         * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String)
         */
        public void startPrefixMapping(String prefixString uri) {
       
            super.startPrefixMapping(prefixuri);
            getAntModel().addPrefixMapping(prefixuri);
        }
	 }
	 
	 private static class ErrorHelper {
 		public static void handleErrorFromElementText(int startint count, AntXMLContext contextException e) {
 			Locator locatorcontext.getLocator();
			int columnNumberlocator.getColumnNumber();
			if (columnNumber > -1) {
				int offsetstart;
				try {
					offsetgetAntModel().getOffset(locator.getLineNumber(), 1);
catch (BadLocationException e1) {
				}
else {
				getAntModel().errorFromElementText(estartcount);
			}
		}
	 }
	 
	 private static class LexHandler implements LexicalHandler {
	 	/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#endCDATA()
		 */
		public void endCDATA() throws SAXException {
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#endDTD()
		 */
		public void endDTD() throws SAXException {
		    if (getAntModel().canGetLexicalInfo()) {
				AntXMLContext contextgetContext();
				Locator locatorcontext.getLocator();
		    }
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#startCDATA()
		 */
		public void startCDATA() throws SAXException {
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int)
		 */
		public void comment(char[] chint startint lengththrows SAXException {
		    if (getAntModel().canGetLexicalInfo()) {
				AntXMLContext contextgetContext();
				Locator locatorcontext.getLocator();
				if (locator != null) {
					getAntModel().addComment(locator.getLineNumber(), locator.getColumnNumber(), length);
				}
		    }
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#endEntity(java.lang.String)
		 */
		public void endEntity(String namethrows SAXException {
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#startEntity(java.lang.String)
		 */
		public void startEntity(String namethrows SAXException {
			if ( == null) {
else {
			}
		}
		/* (non-Javadoc)
		 * @see org.xml.sax.ext.LexicalHandler#startDTD(java.lang.String, java.lang.String, java.lang.String)
		 */
		public void startDTD(String nameString publicIdString systemIdthrows SAXException {
		    if (getAntModel().canGetLexicalInfo()) {
		        AntXMLContext contextgetContext();
		        Locator locatorcontext.getLocator();
		        getAntModel().addDTD(namelocator.getLineNumber(), locator.getColumnNumber());
		    }
		}
	 }
	public ProjectHelper(IAntModel model) {
	}

Parses the project file, configuring the project as it goes.

Parameters:
project the current project
source the xml source or a java.io.File
handler the root handler to use (contains the current context)
Throws:
BuildException if the configuration is invalid or cannot be read
    public void parse(Project projectObject source, org.apache.tools.ant.helper.ProjectHelper2.RootHandler handlerthrows BuildException {
    	
    	if (!(source instanceof String) && !(source instanceof File)) {
    		//this should only occur with a source URL and that should not be possible currently
    		//as Antlib hard codes using ProjectHelper2 (bug 152793)
    		super.parse(projectsourcehandler);
    		return;
    	}
    	
    	AntXMLContext context = (AntXMLContext)project.getReference("ant.parsing.context"); //$NON-NLS-1$
		//switch to using "our" handler so parsing will continue on hitting errors.
    	handler = new RootHandler(context);
    	InputStream stream = null;
		try {
        	InputSource inputSourcenull;
        	if ((source instanceof File)) {
        		 = (Filesource;
                 = getFileUtils().normalize(.getAbsolutePath());
                stream = new FileInputStream();
                inputSource = new InputSource(stream);
        	} else if (source instanceof String) {
        		stream = new ByteArrayInputStream(((String)source).getBytes("UTF-8")); //$NON-NLS-1$
        		inputSource = new InputSource(stream);
        	}
        
            
SAX 2 style parser used to parse the given file.
        	//We cannot use the JAXPUtils support here as the underlying parser factory is cached and 
        	//will not reflect classpath changes that effect which XML parser will be returned.
        	//see bug 59764
        	//XMLReader parser = JAXPUtils.getNamespaceXMLReader();
        	XMLReader parser = getNamespaceXMLReader();
        	if (parser == null) {
        		throw new BuildException(.);
        	}
            String uri = null;
            if ( != null) {
                uri = getFileUtils().toURI(.getAbsolutePath());
            }
            if (uri != null) {
                inputSource.setSystemId(uri);
            }
            context.setBuildFile();
            
            parser.setContentHandler(handler);
            parser.setEntityResolver(handler);
            parser.setErrorHandler(handler);
            parser.setDTDHandler(handler);
            parser.setProperty("http://xml.org/sax/properties/lexical-handler"); //$NON-NLS-1$
          
            parser.parse(inputSource);
        } catch (SAXParseException exc) {
        	getAntModel().fatalError(exc);
        } catch (SAXException exc) {
        	//ignore as we will be parsing incomplete source
        } catch (FileNotFoundException exc) {
            throw new BuildException(exc);
        } catch (UnsupportedEncodingException exc) {
              throw new BuildException(exc);
        } catch (IOException exc) {
            throw new BuildException(exc);
        } finally {
            try {
            	if (stream != null) {
            		stream.close();
            	}
            } catch (IOException ioe) {
                // ignore this
            }
        }
    }

Sets the buildfile that is about to be parsed or null if parsing has completed.

Parameters:
file The buildfile about to be parsed
	public void setBuildFile(File file) {
		file;
	}
	/* (non-Javadoc)
	 * We override this method from ProjectHelper2 as we do not want to execute the implicit target or
	 * any other target for that matter as it could hang Eclipse.
	 * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=50795 for more details.
	 * 
	 * @see org.apache.tools.ant.ProjectHelper#parse(org.apache.tools.ant.Project, java.lang.Object)
	 */
	public void parse(Project projectObject sourcethrows BuildException {
		AntXMLContext context = (AntXMLContext) project.getReference("ant.parsing.context"); //$NON-NLS-1$
        if (context == null) {
        	getImportStack().removeAllElements();
            context = new AntXMLContext(project);
            project.addReference("ant.parsing.context"context); //$NON-NLS-1$
            project.addReference("ant.targets"context.getTargets()); //$NON-NLS-1$
            context;
        }
        getImportStack().addElement(source);
        if (getImportStack().size() > 1) {
            // we are in an imported file.
            context.setIgnoreProjectTag(true);
            Target currentTarget = context.getCurrentTarget();
            Target currentImplicit = context.getImplicitTarget();
            Map currentTargets = context.getCurrentTargets();
            
            try {
                Target newCurrent = new Target();
                newCurrent.setProject(project);
                newCurrent.setName(""); //$NON-NLS-1$
                context.setCurrentTarget(newCurrent);
                context.setCurrentTargets(new HashMap());
                context.setImplicitTarget(newCurrent);
                parse(projectsourcenew RootHandler(context));
            } finally {
                context.setCurrentTarget(currentTarget);
                context.setImplicitTarget(currentImplicit);
                context.setCurrentTargets(currentTargets);
            }
        } else {
            // top level file
            context.setCurrentTargets(new HashMap());
            parse(projectsourcenew RootHandler(context));
        }
	}
    public static void reset() {
        null;
        null;
    }
    
	public static void setAntModel(IAntModel antModel) {
		antModel;
		null;
	}
    
	public static IAntModel getAntModel() {
		return ;
	}
	public static AntXMLContext getContext() {
		return ;
	}
	private static FileUtils getFileUtils() {
		if ( == null) {
			= FileUtils.getFileUtils();
		}
		return ;
	}

 
Returns a newly created SAX 2 XMLReader, which is namespace aware

Returns:
a SAX 2 XMLReader.
Since:
Ant 1.6 from org.apache.tools.ant.util.JAXPUtils
    private XMLReader getNamespaceXMLReader() throws BuildException {
        if ( == null) {
            try {
                newSAXParser(getNSParserFactory()).getXMLReader();
            } catch (SAXException e) {
            }
        }
        return ;
    }
    
    
Returns the parser factory to use to create namespace aware parsers.

Returns:
a SAXParserFactory to use which supports manufacture of namespace aware parsers
Since:
Ant 1.6 from org.apache.tools.ant.util.JAXPUtils
    private SAXParserFactory getNSParserFactory() throws BuildException {
    	SAXParserFactory nsParserFactory = JAXPUtils.newParserFactory();
        nsParserFactory.setNamespaceAware(true);
        
        return nsParserFactory;
    }
    
    

Returns:
a new SAXParser instance as helper for getParser and getXMLReader.
Since:
Ant 1.5 from org.apache.tools.ant.util.JAXPUtils
    private SAXParser newSAXParser(SAXParserFactory factory) {
        try {
            return factory.newSAXParser();
        } catch (ParserConfigurationException e) {
        } catch (SAXException e) {
        }
        return null;
    }
New to GrepCode? Check out our FAQ X