/*******************************************************************************
 * Copyright (c) 2001, 2004 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.wst.wsdl.validation.internal;

import org.eclipse.wst.wsdl.validation.internal.resolver.IURIResolver;


/**
 * An interface representing the current validation information.
 * This interface is not meant to be implemented by clients.
 */
public interface ValidationInfo extends ValidationReport
{
  
  /**
   * Add an error message for this file. (Uses the URI from this validation info object.)
   * 
   * @param message The message for the error.
   * @param line The line location of the error in the file.
   * @param column The column location of the error in the file.
   * @deprecated
   */
  public void addError(String message, int line, int column);
  
  /**
   * Add an error message.
   * 
   * @param message The message for the error.
   * @param line The line location of the error in the file.
   * @param column The column location of the error in the file.
   * @param uri The URI of the file that contains the error.
   */
  public void addError(String message, int line, int column, String uri);
  
  /**
   * Add a warning message for this file. (Uses the URI from this validation info object.)
   * 
   * @param message The message for the warning.
   * @param line The line location of the warning in the file.
   * @param column The column location of the warning in the file.
   * @deprecated
   */
  public void addWarning(String message, int line, int column);
  
  /**
   * Add a warning message.
   * 
   * @param message The message for the warning.
   * @param line The line location of the warning in the file.
   * @param column The column location of the warning in the file.
   * @param uri The URI of the file that contains the error.
   */
  public void addWarning(String message, int line, int column, String uri);
  
  /**
   * Get the URI resolver in use for this validation. The URI resolver
   * returned is actually a URI resolver handler that will 
   * iterate through all of the registered URI resolvers.
   * 
   * @return The URI resolver handler.
   */
  public IURIResolver getURIResolver();
  
  /**
   * Get the attribute with the given name. If the attribute
   * has not been registered, return null.
   * 
   * @param name The name of the attribute being requested.
   * @return The attribute value if the attribute has been registered, null otherwise.
   */
  public Object getAttribute(String name);
}
