/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.commons.gui.wizard; import org.openide.WizardDescriptor; import org.openide.util.ChangeSupport; import org.openide.util.HelpCtx; import java.awt.Component; import java.util.concurrent.locks.ReentrantLock; import javax.swing.event.ChangeListener; /** * Basic wizard panel implementation to eliminate the tedious task of creating Panel implementations. * * @author martin.scholl@cismet.de * @version 1.0 */ public abstract class AbstractWizardPanel implements WizardDescriptor.Panel { //~ Instance fields -------------------------------------------------------- protected final transient ChangeSupport changeSupport; protected transient WizardDescriptor wizard; private transient volatile Component component; private final transient ReentrantLock componentLock; //~ Constructors ----------------------------------------------------------- /** * Creates a new AbstractWizardPanel object. */ public AbstractWizardPanel() { this.changeSupport = new ChangeSupport(this); this.componentLock = new ReentrantLock(false); } //~ Methods ---------------------------------------------------------------- @Override public Component getComponent() { componentLock.lock(); try { if (component == null) { component = createComponent(); } return component; } finally { componentLock.unlock(); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ protected abstract Component createComponent(); @Override public HelpCtx getHelp() { return HelpCtx.DEFAULT_HELP; } @Override public void readSettings(final Object settings) { this.wizard = (WizardDescriptor)settings; this.read(wizard); } @Override public void storeSettings(final Object settings) { this.wizard = (WizardDescriptor)settings; this.store(wizard); } /** * DOCUMENT ME! * * @param wizard DOCUMENT ME! */ protected abstract void read(final WizardDescriptor wizard); /** * DOCUMENT ME! * * @param wizard DOCUMENT ME! */ protected abstract void store(final WizardDescriptor wizard); @Override public void addChangeListener(final ChangeListener l) { changeSupport.addChangeListener(l); } @Override public void removeChangeListener(final ChangeListener l) { changeSupport.removeChangeListener(l); } @Override public boolean isValid() { return true; } }