package data.stdforms.singletableformsheet;

import sale.*;
import sale.stdforms.*;

import data.stdforms.SingleTableFormSheet;

/**
  * <i>Abstract</i> super class for strategies that can be associated with the
  * {@link SingleTableFormSheet#addAddButton &quot;Add&quot;} and the
  * {@link SingleTableFormSheet#addRemoveButton &quot;Remove&quot;} button of a {@link SingleTableFormSheet}.
  *
  * <p>The strategy defines a sub-process that can be integrated into the process that displayed the FormSheet
  * to perform the editing.</p>
  *
  * @author Steffen Zschaler
  * @version 2.0 20/08/1999
  * @since v2.0
  */
public abstract class EditButtonStrategy extends FormSheetStrategy {

  /**
    * Get the first transition of the process that will perform the editing. The process can have any number of
    * {@link Gate Gates} and {@link Transition Transitions} and display any number of {@link FormSheet Form-}
    * and {@link MenuSheet MenuSheets}. Normally, the sub-process should end at the gate at which the
    * SingleTableFormSheet is being displayed, which can be obtained by
    * {@link SingleTableFormSheet#getGate SingleTableFormSheet.getGate()}.
    *
    * @param stfs the SingleTableFormSheet that triggers the sub-process.
    * @param p the process into which the sub-process will be implanted.
    * @param sp the SalesPoint at which the FormSheet is displayed, if any.
    *
    * @override Always.
    */
  public abstract Transition getEditProcess (SingleTableFormSheet stfs, SaleProcess p, SalesPoint sp);
}