/*******************************************************************************
 * 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 IValidationInfo extends IValidationReport
{
  
  /**
   * 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);
}
