/*******************************************************************************
 * Copyright (c) 2006, 2007 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.util;


import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.resource.Resource;
import org.w3c.dom.Node;


/**
 * Generated by the WSDL model parsing and validation mechanisms.
 * 
 * <p>
 * <b>Note:</b> This class/interface is part of an interim API that is still
 * under development and expected to change significantly before reaching
 * stability. It is being made available at this early stage to solicit feedback
 * from pioneering adopters on the understanding that any code that uses this
 * API will almost certainly be broken (repeatedly) as the API evolves.
 * </p>
 * 
 * This interface is a candidate to becoming a first class WSDL model object.
 */
public interface WSDLDiagnostic extends Resource.Diagnostic
{
  /**
   * Provides this diagnostic's severity.
   * 
   * @return an XSDDiagnosticSeverity
   */
  WSDLDiagnosticSeverity getSeverity();

  /**
   * Sets this diagnostic's severity.
   * 
   * @param severity
   *          the new diagnostic severity.
   */
  void setSeverity(WSDLDiagnosticSeverity severity);

  /**
   * Gets the original message key.
   * 
   * @return a String with the original message key.
   */
  String getKey();

  /**
   * Sets the original message key.
   * @param value the new message key value.
   */
  void setKey(String value);

  /**
   * Gets the DOM Node where the error occurs
   * 
   * @return The DOM node where the error occurs
   */
  Node getNode();

  /**
   * Sets the DOM Node where the error occurs
   * @param node
   */
  void setNode(Node node);

  /**
   * returns the Element where the error occurs
   * @return - Object of type XSDConcreteComponent if the error
   * 			comes from the inline schema of a wsdl file
   * 		 - object of type WSDLElement if the error comes from
   * 			other part of the wsdl file
   */
  Object getContainer();

  /**
   * Sets the Container of the error
   * @param container
   * 			an Object of either XSDConcreteComponent or WSDLElement 
   */
  void setContainer(Object container);

  /**
   * Returns a list with the original message parameters as Strings.
   * @return  a list with the original message parameters as Strings.
   */
  EList getSubstitutions();
}
