/*******************************************************************************
 * Copyright (c) 2002-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 - Initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.wsi.internal.core.profile;

import java.util.*;

/**
 * A test assertion is one assertion in a profile definition.
 *
 * @version 1.0.1
 * @author Peter Brittenham (peterbr@us.ibm.com)
 */
public interface TestAssertion
{
  public static final String TYPE_INFORMATIONAL = "informational";
  
  /**
   * Get test assertion id.
   * @return test assertion id.
   * @see #setId
   */
  public String getId();

  /**
   * Set test assertion id.
   * @param id test assertion id.
   * @see #getId
   */
  public void setId(String id);

  /**
   * Get test assertion type.
   * @return test assertion type.
   * @see #setType
   */
  public String getType();

  /**
   * Set test assertion type.
   * @param  type test assertion type.
   * @see #getType
   */
  public void setType(String type);

  /**
   * Get test assertion primary entry type name.
   * @return test assertion primary entry type name.
   * @see #setEntryTypeName
   */
  public String getEntryTypeName();

  /**
   * Set test assertion primary entry type name.
   * @param entryTypeName test assertion primary entry type name.
   * @see #getEntryTypeName
   */
  public void setEntryTypeName(String entryTypeName);

  /**
   * Get enabled indicator.
   * @return enabled indicator.
   * @see #setEnabled
   */
  public boolean isEnabled();

  /**
   * Set  enabled indicator.
   * @param enabled enabled indicator.
   * @see #isEnabled
   */
  public void setEnabled(boolean enabled);

  /**
   * Get context.
   * @return context.
   * @see #setContext
   */
  public String getContext();

  /**
   * Set context.
   * @param context context.
   * @see #getContext
   */
  public void setContext(String context);

  /**
   * Get assertion description.
   * @return assertion description.
   * @see #setAssertionDescription
   */
  public String getAssertionDescription();

  /**
   * Set assertion description.
   * @param assertionDescription assertion description.
   * @see #getAssertionDescription
   */
  public void setAssertionDescription(String assertionDescription);

  /**
   * Get failure message.
   * @return failure message.
   * @see #setFailureMessage
   */
  public String getFailureMessage();

  /**
   * Set failure message.
   * @param failureMessage failure message.
   * @see #getFailureMessage
   */
  public void setFailureMessage(String failureMessage);

  /**
   * Get failure detail description.
   * @return failure detail description.
   * @see #setFailureDetailDescription
   */
  public String getFailureDetailDescription();

  /**
   * Set failure detail description.
   * @param failureDetailDescription failure detail description.
   * @see #getFailureDetailDescription
   */
  public void setFailureDetailDescription(String failureDetailDescription);

  /**
   * Get detail description.
   * @return detail description.
   * @see #setDetailDescription
   */
  public String getDetailDescription();

  /**
   * Set detail description.
   * @param detailDescription detail description.
   * @see #getDetailDescription
   */
  public void setDetailDescription(String detailDescription);

  /**
   * Get additional entry type list.
   * @return additional entry type list.
   * @see #setAdditionalEntryTypeList
   */
  public EntryTypeList getAdditionalEntryTypeList();

  /**
   * Set additional entry type list.
   * @param entryTypeList additional entry type list.
   * @see #getAdditionalEntryTypeList
   */
  public void setAdditionalEntryTypeList(EntryTypeList entryTypeList);

  /**
   * Get list of prereq ids.
   * @return list of prereq ids.
   */
  public Vector getPrereqIdList();

  /**
   * Add prereq test assertion id.
   * @param  prereqId prereq test assertion id.
   */
  public void addPrereqId(String prereqId);
}
