/*******************************************************************************
 * Copyright (c) 2004, 2005 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 - initial API and implementation
 *******************************************************************************/
package org.eclipse.ant.internal.ui.model;

import java.io.File;
import java.net.URLClassLoader;
import java.util.Map;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.text.BadLocationException;
import org.xml.sax.Attributes;

public interface IAntModel {

    /**
     * Returns the project node for this Ant model
     * @return the project node for this Ant model
     */
    AntProjectNode getProjectNode();

    /**
     * Returns the name of the external entity defined by the specified path
     * @param path the path to the entity
     * @return the name or the entity or <code>null</code> if no entity could be resolved
     */
    String getEntityName(String path);

    /**
     * Returns the location provider for this Ant model
     * @return the location provider for this Ant model
     */
    LocationProvider getLocationProvider();

    /**
     * Disposes this Ant model
     */
    void dispose();

    /**
     * Reconciles this Ant model with the buildfile it represents
     */
    void reconcile();

    /**
     * Sets the classloader for this Ant model
     * @param newClassLoader the classloader to use when resolving this Ant model
     */
    void setClassLoader(URLClassLoader newClassLoader);
    
    /**
     * Sets the extra properties to be used for parsing
     * If global settings as defined in the Ant UI preferences are to be used this method does not need to be called.
     * @param properties the properties to ensure are set for parsing.
     */
    void setProperties(Map properties);
    
    /**
     * Sets the property files to be used for parsing
     * If global settings as defined in the Ant UI preferences are to be used this method does not need to be called.
     * @param propertyFiles the file names of the property files to use for parsing
     */
    void setPropertyFiles(String[] propertyFiles);

    /**
     * Returns the Eclipse resource for the buildfile this Ant model represents
     * @return the Eclipse resource or <code>null</null> if the buildfile is not in the workspace
     */
    IFile getFile();

    /**
     * Handles a <code>BuildException</code> that occurred during parsing.
     * @param be the build exception that occurred
     * @param node the node associated with the problem
     * @param severity the severity of the problem
     */
    void handleBuildException(BuildException be, AntElementNode node, int severity);

    /**
     * Returns the project node for this Ant model
     * @param reconcile whether or not to ensure the Ant model is reconciled before retrieving the project node
     * @return the project node for this Ant model
     */
    AntProjectNode getProjectNode(boolean reconcile);

    /**
     * Adds the new target to this Ant model
     * @param newTarget the new Apache Ant target
     * @param lineNumber the line number of the new target
     * @param columnNumber the column number of the new target
     */
    void addTarget(Target newTarget, int lineNumber, int columnNumber);

    /**
     * Adds the new project to this Ant model
     * @param project the new Apache Ant project
     * @param lineNumber the line number of the new target
     * @param columnNumber the column number of the new target
     */
    void addProject(Project project, int lineNumber, int columnNumber);

    /**
     * Return the <code>java.io.File</code> that is the buildfile that this Ant model represents
     * @return the <code>java.io.File</code> that is the buildfile
     */
    //TODO Could this just be getPath().toLocation();
    File getEditedFile();
    
    /**
     * Returns whether this model contains task information
     * @return whether task information is included in this model
     */
    boolean canGetTaskInfo();
    
    /**
     * Returns whether this model contains lexical information
     * @return whether lexical information is included in this model
     */
    boolean canGetLexicalInfo();
    
    /**
     * Returns whether this model contains position information for the elements
     * @return whether position information is included in this model
     */
    boolean canGetPositionInfo();

    /**
     * Adds a comment to the Ant model
     * Only called if <code>canGetLexicalInfo()</code> is <code>true</code>
     * @param lineNumber the line number of the comment
     * @param columnNumber the column number of the comment
     * @param length the length of the comment
     */
    void addComment(int lineNumber, int columnNumber, int length);

    /**
     * Adds a DTD element to the Ant model
     * Only called if <code>canGetLexicalInfo()</code> is <code>true</code>
     * @param name the name of the DTD element
     * @param lineNumber the line number of the comment
     * @param columnNumber the column number of the comment
     */
    void addDTD(String name, int lineNumber, int columnNumber);

    /**
     * Adds the external entity to the Ant model
     * @param name the name of the external entity
     * @param currentEntityPath the path of the entity
     */
    void addEntity(String name, String currentEntityPath);

    /**
     * Adds a task element to the Ant model
     * Only called if <code>canGetTaskInfo()</code>() is <code>true</code>
     * @param task the new Apache Ant task
     * @param parentTask the parent Apache Ant task or <code>null</code>
     * @param attributes the attributes of the new task
     * @param lineNumber the line number of the task
     * @param columnNumber the column number of the task
     */
    void addTask(Task newTask, Task parentTask, Attributes attributes, int lineNumber, int columnNumber);

    /**
     * Sets the length of the current element that was just finished being parsed
     * @param lineNumber the current line number of parsing
     * @param columnNumber the current column number of parsing
     */
    void setCurrentElementLength(int lineNumber, int columnNumber);

    /**
     * Returns the offset in the document associated with this Ant model for the 
     * given line number and position in the line
     * @param lineNumber the line number in the doc
     * @param column the column number in that line
     * @return the offset in the document
     * @throws BadLocationException 
     */
    int getOffset(int lineNumber, int column) throws BadLocationException;

    /**
     * Handles a fatal error from an exception during parsing.
     * @param e the exception that occurred
     */
    void error(Exception e);

    /**
     * Handles a fatal error from an exception during parsing.
     * @param e the exception that occurred
     */
    void fatalError(Exception e);

    /**
     * Handles a warning from an exception during parsing.
     * @param e the exception that occurred
     */
    void warning(Exception e);

    void errorFromElement(Exception e, AntElementNode element, int lineNumber, int columnNumber);

    void errorFromElementText(Exception e, int offset, int columnNumber);

    /**
     * Returns the text in the document of this Ant model for the given offset and length
     * 
     * @param offset the offset within the document
     * @param length the length of text to retrieve
     * @return the text at the given offset of <code>null</code> if not contained within the document range
     */
    String getText(int offset, int length);
    
    /**
     * Caches the text from the provided defining node so that the node definitions are only
     * updated if the text changes on reconciliation
     * @param node the defining task node to cache the associated text
     */
    void setDefiningTaskNodeText(AntDefiningTaskNode node);

    /**
     * Record the prefix-URI Namespace mapping.
     * @param prefix The Namespace prefix being declared.
     * @param uri The Namespace URI the prefix is mapped to.
     */
    void addPrefixMapping(String prefix, String uri);
}
