package org.netbeans.gradle.project.filesupport; import java.awt.Component; import java.util.concurrent.atomic.AtomicReference; import javax.swing.event.ChangeListener; import org.jtrim.property.MutableProperty; import org.jtrim.utils.ExceptionHelper; import org.openide.WizardDescriptor; import org.openide.loaders.TemplateWizard; import org.openide.util.HelpCtx; final class GradleTemplateWizardPanelWrapper implements WizardDescriptor.Panel<WizardDescriptor> { private final MutableProperty<GradleTemplateWizardConfig> config; private final TemplateWizard wizard; private final AtomicReference<GradleTemplateWizardPanel> panelRef; public GradleTemplateWizardPanelWrapper(MutableProperty<GradleTemplateWizardConfig> config, TemplateWizard wizard) { ExceptionHelper.checkNotNullArgument(config, "config"); ExceptionHelper.checkNotNullArgument(wizard, "wizard"); this.config = config; this.wizard = wizard; this.panelRef = new AtomicReference<>(null); } private GradleTemplateWizardPanel getPanel() { GradleTemplateWizardPanel result = panelRef.get(); if (result == null) { result = new GradleTemplateWizardPanel(wizard); if (!panelRef.compareAndSet(null, result)) { result = panelRef.get(); } } return result; } @Override public Component getComponent() { return getPanel(); } @Override public HelpCtx getHelp() { return null; } @Override public void readSettings(WizardDescriptor settings) { getPanel().startValidation(); } @Override public void storeSettings(WizardDescriptor settings) { config.setValue(getPanel().getConfig()); } @Override public boolean isValid() { return getPanel().containsValidData(); } @Override public void addChangeListener(ChangeListener listener) { getPanel().addChangeListener(listener); } @Override public void removeChangeListener(ChangeListener listener) { getPanel().removeChangeListener(listener); } }