package com.neverwinterdp.scribengin.storage.sink; import org.apache.hadoop.fs.FileSystem; import com.google.inject.Inject; import com.google.inject.Singleton; import com.neverwinterdp.scribengin.storage.StorageDescriptor; import com.neverwinterdp.scribengin.storage.StreamDescriptor; import com.neverwinterdp.scribengin.storage.hdfs.sink.HDFSSink; import com.neverwinterdp.scribengin.storage.kafka.sink.KafkaSink; import com.neverwinterdp.scribengin.storage.s3.S3Client; import com.neverwinterdp.scribengin.storage.s3.sink.S3Sink; @Singleton public class SinkFactory { @Inject private FileSystem fs; public SinkFactory() { } public SinkFactory(FileSystem fs) { this.fs = fs; } public Sink create(StorageDescriptor descriptor) throws Exception { if("hdfs".equalsIgnoreCase(descriptor.getType())) { return new HDFSSink(fs, descriptor); } else if("kafka".equalsIgnoreCase(descriptor.getType())) { return new KafkaSink(descriptor); }else if("s3".equalsIgnoreCase(descriptor.getType())) { return new S3Sink(descriptor); } throw new Exception("Unknown source type " + descriptor.getType()); } public Sink create(StreamDescriptor descriptor) throws Exception { if("hdfs".equalsIgnoreCase(descriptor.getType())) { return new HDFSSink(fs, descriptor); } else if("kafka".equalsIgnoreCase(descriptor.getType())) { return new KafkaSink(descriptor); }else if("s3".equalsIgnoreCase(descriptor.getType())) { return new S3Sink(descriptor); } throw new Exception("Unknown source type " + descriptor.getType()); } }