@Override
  public boolean isValid() {
    if (spsError != null) {
      wizard.putProperty(
          WizardDescriptor.PROP_ERROR_MESSAGE, "An error occurred during SPS communication");

      return false;
    }

    final String choosenScenario = component.getSelectedScenario();
    boolean valid = false;

    if (choosenScenario == null) {
      wizard.putProperty(
          WizardDescriptor.PROP_INFO_MESSAGE,
          NbBundle.getMessage(
              RainfallDownscalingWizardPanelScenarios.class,
              "RainfallDownscalingWizardPanelScenarios.isValid().selectScenario")); // NOI18N
    } else {
      wizard.putProperty(WizardDescriptor.PROP_INFO_MESSAGE, null);
      valid = true;
    }

    return valid;
  }
  @Override
  public void readSettings(final Object settings) {
    wizard = (WizardDescriptor) settings;
    spsError = null;
    scenario = (String) wizard.getProperty(RainfallDownscalingWizardAction.PROP_SCENARIO);
    scenarios = new String[] {};

    SudplanConcurrency.getSudplanGeneralPurposePool()
        .execute(
            new Runnable() {

              @Override
              public void run() {
                try {
                  final DataHandler dh =
                      DataHandlerCache.getInstance()
                          .getSPSDataHandler(
                              RainfallDownscalingModelManager.RF_SPS_LOOKUP,
                              RainfallDownscalingModelManager.RF_SPS_URL);
                  final Properties filter = new Properties();
                  filter.put(
                      TimeSeries.PROCEDURE, RainfallDownscalingModelManager.RF_TS_DS_PROCEDURE);
                  final Datapoint dp = dh.createDatapoint(filter, null, DataHandler.Access.READ);
                  final InputDescriptor id =
                      (InputDescriptor)
                          dp.getProperties().get("jaxb_desc:climate_scenario"); // NOI18N
                  final List<String> scenarioList =
                      id.getDefinition()
                          .getCommonData()
                          .getCategory()
                          .getConstraint()
                          .getAllowedTokens()
                          .getValueList()
                          .get(0)
                          .getValue();
                  scenarios = scenarioList.toArray(new String[scenarioList.size()]);
                } catch (final Exception ex) {
                  LOG.error("error during sps communication", ex); // NOI18N
                  spsError = ex;
                } finally {
                  EventQueue.invokeLater(
                      new Runnable() {

                        @Override
                        public void run() {
                          component.init();

                          fireChangeEvent();
                        }
                      });
                }
              }
            });

    component.init();
  }
 @Override
 public void storeSettings(final Object settings) {
   wizard = (WizardDescriptor) settings;
   wizard.putProperty(
       RainfallDownscalingWizardAction.PROP_SCENARIO, component.getSelectedScenario());
 }