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.prefs;
  
  import java.beans.PropertyChangeListener;
  import java.beans.PropertyChangeSupport;
  
  import javax.swing.JComponent;
  import javax.swing.SwingUtilities;
  
  import org.netbeans.spi.options.OptionsPanelController;
  import org.openide.util.HelpCtx;
  import org.openide.util.Lookup;
  
  /**
   * Plugin option panel controller.
   *
   * @author Alessandro Falappa
   */
  @OptionsPanelController.SubRegistration(
          location = "Java",
          displayName = "#AdvancedOption_DisplayName_BootPrefs",
          keywords = "#AdvancedOption_Keywords_BootPrefs",
          keywordsCategory = "Java/BootPrefs"
  )
  @org.openide.util.NbBundle.Messages({"AdvancedOption_DisplayName_BootPrefs=Spring Boot", "AdvancedOption_Keywords_BootPrefs=springboot, initializr"})
  public final class BootPrefsOptionsPanelController extends OptionsPanelController {
  
      private BootPrefsPanel panel;
      private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
      private boolean changed;
  
      @Override
      public void update() {
          getPanel().load();
          changed = false;
      }
  
      @Override
      public void applyChanges() {
          SwingUtilities.invokeLater(new Runnable() {
              @Override
              public void run() {
                  getPanel().store();
                  changed = false;
              }
          });
      }
  
      @Override
      public void cancel() {
          // need not do anything special, if no changes have been persisted yet
      }
  
      @Override
      public boolean isValid() {
          return getPanel().valid();
      }
  
      @Override
      public boolean isChanged() {
          return changed;
      }
  
      @Override
      public HelpCtx getHelpCtx() {
          // Show no Help button for this panel:
          return HelpCtx.DEFAULT_HELP;
          // If you have context help:
          // return new HelpCtx("help.key.here");
      }
  
      @Override
      public JComponent getComponent(Lookup masterLookup) {
          return getPanel();
      }
  
      @Override
      public void addPropertyChangeListener(PropertyChangeListener l) {
          pcs.addPropertyChangeListener(l);
      }
  
      @Override
      public void removePropertyChangeListener(PropertyChangeListener l) {
          pcs.removePropertyChangeListener(l);
      }
  
      private BootPrefsPanel getPanel() {
          if (panel == null) {
              panel = new BootPrefsPanel(this);
          }
          return panel;
      }
  
      void changed() {
          if (!changed) {
              changed = true;
              pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true);
          }
          pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null);
      }
  
  }
  