// Path: coopr-server/src/main/java/co/cask/coopr/spec/plugin/AutomatorType.java
// public class AutomatorType extends AbstractPluginSpecification {
// 
//   private AutomatorType(BaseEntity.Builder baseBuilder,
//                         Map<ParameterType, ParametersSpecification> parameters,
//                         Map<String, ResourceTypeSpecification> resourceTypes) {
//     super(baseBuilder, parameters, resourceTypes);
//   }
// 
//   /**
//    * Get a builder for creating automator types.
//    *
//    * @return builder for creating automator types
//    */
//   public static Builder builder() {
//     return new Builder();
//   }
// 
//   /**
//    * Builder for creating automator types.
//    */
//   public static class Builder extends AbstractPluginSpecification.Builder<AutomatorType> {
//     @Override
//     public AutomatorType build() {
//       return new AutomatorType(this, parameters, resourceTypes);
//     }
//   }
// }


import java.util.Collection;
import javax.annotation.Nullable;
import co.cask.coopr.common.conf.Constants;
import co.cask.coopr.spec.HardwareType;
import co.cask.coopr.spec.ImageType;
import co.cask.coopr.spec.Provider;
import co.cask.coopr.spec.plugin.AutomatorType;
import co.cask.coopr.spec.plugin.ProviderType;
import co.cask.coopr.spec.service.Service;
import co.cask.coopr.spec.template.ClusterTemplate;
import co.cask.coopr.spec.template.PartialTemplate;
import com.google.common.base.Charsets;
import com.google.common.base.Function;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;
      @Nullable
      @Override
      public Service apply(@Nullable byte[] input) {
        return deserialize(input, Service.class);
      }
    };
  private final Function<byte[], ClusterTemplate> clusterTemplateTransform =
    new Function<byte[], ClusterTemplate>() {
      @Nullable
      @Override
      public ClusterTemplate apply(@Nullable byte[] input) {
        return deserialize(input, ClusterTemplate.class);
      }
    };
  private final Function<byte[], PartialTemplate> partialTemplateTransform =
    new Function<byte[], PartialTemplate>() {
      @Nullable
      @Override
      public PartialTemplate apply(@Nullable byte[] input) {
        return deserialize(input, PartialTemplate.class);
      }
    };
  private final Function<byte[], ProviderType> providerTypeTransform =
    new Function<byte[], ProviderType>() {
      @Nullable
      @Override
      public ProviderType apply(@Nullable byte[] input) {
        return deserialize(input, ProviderType.class);
      }
    };
// Path: coopr-server/src/main/java/co/cask/coopr/spec/plugin/AutomatorType.java
// public class AutomatorType extends AbstractPluginSpecification {
// 
//   private AutomatorType(BaseEntity.Builder baseBuilder,
//                         Map<ParameterType, ParametersSpecification> parameters,
//                         Map<String, ResourceTypeSpecification> resourceTypes) {
//     super(baseBuilder, parameters, resourceTypes);
//   }
// 
//   /**
//    * Get a builder for creating automator types.
//    *
//    * @return builder for creating automator types
//    */
//   public static Builder builder() {
//     return new Builder();
//   }
// 
//   /**
//    * Builder for creating automator types.
//    */
//   public static class Builder extends AbstractPluginSpecification.Builder<AutomatorType> {
//     @Override
//     public AutomatorType build() {
//       return new AutomatorType(this, parameters, resourceTypes);
//     }
//   }
// }


// Path: coopr-server/src/main/java/co/cask/coopr/store/entity/BaseEntityStoreView.java
import java.util.Collection;
import javax.annotation.Nullable;
import co.cask.coopr.common.conf.Constants;
import co.cask.coopr.spec.HardwareType;
import co.cask.coopr.spec.ImageType;
import co.cask.coopr.spec.Provider;
import co.cask.coopr.spec.plugin.AutomatorType;
import co.cask.coopr.spec.plugin.ProviderType;
import co.cask.coopr.spec.service.Service;
import co.cask.coopr.spec.template.ClusterTemplate;
import co.cask.coopr.spec.template.PartialTemplate;
import com.google.common.base.Charsets;
import com.google.common.base.Function;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;

      @Nullable
      @Override
      public Service apply(@Nullable byte[] input) {
        return deserialize(input, Service.class);
      }
    };
  private final Function<byte[], ClusterTemplate> clusterTemplateTransform =
    new Function<byte[], ClusterTemplate>() {
      @Nullable
      @Override
      public ClusterTemplate apply(@Nullable byte[] input) {
        return deserialize(input, ClusterTemplate.class);
      }
    };
  private final Function<byte[], PartialTemplate> partialTemplateTransform =
    new Function<byte[], PartialTemplate>() {
      @Nullable
      @Override
      public PartialTemplate apply(@Nullable byte[] input) {
        return deserialize(input, PartialTemplate.class);
      }
    };
  private final Function<byte[], ProviderType> providerTypeTransform =
    new Function<byte[], ProviderType>() {
      @Nullable
      @Override
      public ProviderType apply(@Nullable byte[] input) {
        return deserialize(input, ProviderType.class);
      }
    };
  private final Function<byte[], AutomatorType> automatorTypeTransform =