001 package sale; 002 003 import java.io.*; 004 005 /** 006 * Helper class that creates the contents of a {@link FormSheet}. 007 * 008 * <p>A FormSheetContentsCreator is used by FormSheets to create their contents, i.e. to set their component 009 * and the buttons in the FormSheet's button bar. Objectifying this process is needed to make FormSheets 010 * persistent as the Swing components' serializability is not reliable. Therefore, whenever you create a 011 * serializable FormSheet, use FormSheetContentsCreators.</p> 012 * 013 * @see FormSheet#addContentCreator 014 * 015 * @author Steffen Zschaler 016 * @version 2.0 17/08/1999 017 * @since v2.0 018 */ 019 public abstract class FormSheetContentCreator extends Object implements Serializable { 020 021 /** 022 * The parent of this FormSheetContentCreator. The parent of a FormSheetContentCreator is the 023 * FormSheetContentCreator that was added to the FormSheet immediately before this FormSheetContentCreator. 024 * 025 * @serial 026 */ 027 private FormSheetContentCreator m_fsccParent; 028 029 /** 030 * Create the FormSheet's contents. 031 * 032 * <p>This method is called in the following circumstances:</p> 033 * 034 * <ol> 035 * <li>On creation of the FormSheet object.</li> 036 * <li>Whenever the FormSheet gets deserialized from a stream.</li> 037 * </ol> 038 * 039 * <p>Although the FormSheet whose contents is to be set is passed as a parameter, a new instance of the 040 * FormSheetContentCreator is needed with every new instance of the FormSheet!</p> 041 * 042 * @override Always 043 * 044 * @param fs the FormSheet whose contents is to be created. 045 */ 046 protected abstract void createFormSheetContent(FormSheet fs); 047 048 /** 049 * Internal communication method called by FormSheet. 050 * 051 * @override Never 052 * 053 * @param fs the FormSheet that needs to be set up. 054 * @param fCallParent if true, the entire chain of FormSheetContentCreators will be called. 055 */ 056 void createFormSheetContent(FormSheet fs, boolean fCallParent) { 057 if ((fCallParent) && (m_fsccParent != null)) { 058 m_fsccParent.createFormSheetContent(fs, true); 059 } 060 createFormSheetContent(fs); 061 } 062 063 /** 064 * Internal communication method called by FormSheet. 065 * 066 * @override Never 067 * 068 * @param fsccParent the new parent of this FormSheetContentCreator 069 */ 070 void setParent(FormSheetContentCreator fsccParent) { 071 m_fsccParent = fsccParent; 072 } 073 }