package com.airlock.iam.plugin.configeditor.data;

import com.airlock.iam.plugin.api.config.ConfigurationContext;
import com.airlock.iam.plugin.api.config.ConfigurationEnvironment;
import com.airlock.iam.plugin.api.exception.PluginClassLoadingException;
import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import com.vaadin.v7.data.util.PropertysetItem;
import java.util.Collections;
import java.util.List;

public class PluginFieldsFormItem extends PropertysetItem {
   public PluginFieldsFormItem(MutablePluginConfiguration pc, ConfigurationEnvironment env, ConfigurationContext context) {
      this.addConfigurableProperties(pc, env, context);
   }

   private void addConfigurableProperties(MutablePluginConfiguration pc, ConfigurationEnvironment env, ConfigurationContext context) {
      List<ConfigurableProperty> configurableProperties;
      try {
         configurableProperties = ConfigurablePropertyFactory.getInstance().createProperties(pc, env, context);
      } catch (PluginClassLoadingException e) {
         configurableProperties = Collections.emptyList();
      }

      for (ConfigurableProperty configurableProperty : configurableProperties) {
         if (configurableProperty.isPluginProperty() && !configurableProperty.hasValue()) {
            configurableProperty.setDefaultValue();
         }

         this.addItemProperty(configurableProperty.getConfigPropertyName(), configurableProperty);
      }
   }
}
