package com.datasift.client.push;

import com.datasift.client.push.connectors.BigQuery;
import com.datasift.client.push.connectors.CouchDB;
import com.datasift.client.push.connectors.DynamoDB;
import com.datasift.client.push.connectors.ElasticSearch;
import com.datasift.client.push.connectors.FTP;
import com.datasift.client.push.connectors.Http;
import com.datasift.client.push.connectors.MongoDB;
import com.datasift.client.push.connectors.Precog;
import com.datasift.client.push.connectors.Redis;
import com.datasift.client.push.connectors.S3;
import com.datasift.client.push.connectors.SFTP;
import com.datasift.client.push.connectors.SplunkEnterprise;
import com.datasift.client.push.connectors.SplunkStorm;
import com.datasift.client.push.connectors.SplunkStormRest;
import com.datasift.client.push.connectors.ZoomData;

/**
 * Represents one of the possible push destinations
 *
 * @author Courtney Robinson <courtney.robinson@datasift.com>
 */
public class OutputType<T> {
    public static final OutputType<BigQuery> BIG_QUERY = new OutputType("bigquery");
    public static final OutputType<CouchDB> COUCH_DB = new OutputType("couchdb");
    public static final OutputType<DynamoDB> DYNAMO_DB = new OutputType("dynamodb");
    public static final OutputType<ElasticSearch> ELASTIC_SEARCH = new OutputType("elasticsearch");
    public static final OutputType<FTP> FTP_TYPE = new OutputType("ftp");
    public static final OutputType<Http> HTTP_TYPE = new OutputType("http");
    public static final OutputType<MongoDB> MONGO_DB = new OutputType("mongodb");
    public static final OutputType<Precog> PRECOG = new OutputType("precog");
    public static final OutputType<Redis> REDIS = new OutputType("redis");
    public static final OutputType<S3> S3_OUTPUT = new OutputType("s3");
    public static final OutputType<SFTP> SFTP_OUTPUT = new OutputType("sftp");
    public static final OutputType<SplunkStormRest> SLUNK_STORM_REST = new OutputType("splunkstormrest");
    public static final OutputType<SplunkStorm> SPLUNK_STORM = new OutputType("splunkstorm");
    public static final OutputType<SplunkEnterprise> SPLUNK_ENTERPRISE = new OutputType("splunk");
    public static final OutputType<ZoomData> ZOOM_DATA = new OutputType("zoomdata");
    private final String value;

    public OutputType(String value) {
        if (value == null) {
            throw new IllegalArgumentException("Output type value cannot be null");
        }
        this.value = value;
    }

    public String value() {
        return value;
    }
}

@@ -1046,16 +1046,26 @@
 tputType
+%3CBigQuery%3E
 (%22bigque
@@ -1139,16 +1139,25 @@
 tputType
+%3CCouchDB%3E
 (%22couchd
@@ -1232,16 +1232,26 @@
 tputType
+%3CDynamoDB%3E
 (%22dynamo
@@ -1337,16 +1337,31 @@
 tputType
+%3CElasticSearch%3E
 (%22elasti
@@ -1436,16 +1436,21 @@
 tputType
+%3CFTP%3E
 (%22ftp%22);
@@ -1517,16 +1517,22 @@
 tputType
+%3CHttp%3E
 (%22http%22)
@@ -1602,16 +1602,25 @@
 tputType
+%3CMongoDB%3E
 (%22mongod
@@ -1690,16 +1690,24 @@
 tputType
+%3CPrecog%3E
 (%22precog
@@ -1774,16 +1774,23 @@
 tputType
+%3CRedis%3E
 (%22redis%22
@@ -1857,16 +1857,20 @@
 tputType
+%3CS3%3E
 (%22s3%22);%0A
@@ -1938,16 +1938,22 @@
 tputType
+%3CSFTP%3E
 (%22sftp%22)
@@ -2024,16 +2024,28 @@
 M_REST =
+%0A           
  new Out
@@ -2043,32 +2043,49 @@
   new OutputType
+%3CSplunkStormRest%3E
 (%22splunkstormres
@@ -2158,32 +2158,45 @@
 = new OutputType
+%3CSplunkStorm%3E
 (%22splunkstorm%22);
@@ -2283,16 +2283,34 @@
 tputType
+%3CSplunkEnterprise%3E
 (%22splunk

fix types