content: /*
   * Copyright 2016 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package com.github.alexfalappa.nbspringboot.projects.initializr;
  
  import java.awt.Component;
  import java.util.HashSet;
  import java.util.Set;
  
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  
  import org.openide.WizardDescriptor;
  import org.openide.WizardValidationException;
  import org.openide.util.HelpCtx;
  import org.openide.util.NbBundle;
  
  /**
   * Wizard descriptor for second step in Spring Boot Initializr project wizard.
   *
   * @author Alessandro Falappa
   */
  public class InitializrProjectWizardPanel2 implements WizardDescriptor.Panel, WizardDescriptor.ValidatingPanel, WizardDescriptor.FinishablePanel {
  
      private WizardDescriptor wizardDescriptor;
      private InitializrProjectPanelVisual2 component;
  
      public InitializrProjectWizardPanel2() {
      }
  
      @Override
      public Component getComponent() {
          if (component == null) {
              component = new InitializrProjectPanelVisual2();
              component.setName(NbBundle.getMessage(InitializrProjectWizardPanel2.class, "LBL_DependenciesStep"));
          }
          return component;
      }
  
      @Override
      public HelpCtx getHelp() {
          // Show no Help button for this panel:
          return HelpCtx.DEFAULT_HELP;
          // If you have context help:
          // return new HelpCtx("help.key.here");
      }
  
      @Override
      public boolean isValid() {
          getComponent();
          return component.valid(wizardDescriptor);
      }
  
      private final Set<ChangeListener> listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0
  
      @Override
      public final void addChangeListener(ChangeListener l) {
          synchronized (listeners) {
              listeners.add(l);
          }
      }
  
      @Override
      public final void removeChangeListener(ChangeListener l) {
          synchronized (listeners) {
              listeners.remove(l);
          }
      }
  
      protected final void fireChangeEvent() {
          Set<ChangeListener> ls;
          synchronized (listeners) {
              ls = new HashSet<>(listeners);
          }
          ChangeEvent ev = new ChangeEvent(this);
          for (ChangeListener l : ls) {
              l.stateChanged(ev);
          }
      }
  
      @Override
      public void readSettings(Object settings) {
          wizardDescriptor = (WizardDescriptor) settings;
          component.read(wizardDescriptor);
      }
  
      @Override
      public void storeSettings(Object settings) {
          WizardDescriptor d = (WizardDescriptor) settings;
          component.store(d);
      }
  
      @Override
      public boolean isFinishPanel() {
          return false;
      }
  
      @Override
      public void validate() throws WizardValidationException {
          getComponent();
          component.validate(wizardDescriptor);
      }
  
  }
  