All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prerna.aws.s3.S3FileRetrieverReactor Maven / Gradle / Ivy

The newest version!
package prerna.aws.s3;

import java.io.File;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.GetObjectRequest;

import prerna.poi.main.helper.CSVFileHelper;
import prerna.poi.main.helper.FileHelperUtil;
import prerna.query.querystruct.AbstractQueryStruct;
import prerna.query.querystruct.CsvQueryStruct;
import prerna.reactor.qs.AbstractQueryStructReactor;
import prerna.util.Constants;
import prerna.util.Utility;

/**
 * Deprecated on March 21st 2025. Please use StorageEngine Directly
 */
@Deprecated
public class S3FileRetrieverReactor extends AbstractQueryStructReactor {
	
	private static final Logger logger = LogManager.getLogger(S3FileRetrieverReactor.class);

	private static final String BUCKET = "bucket";
	private static final String PATH = "path";
	
	public S3FileRetrieverReactor() {
		this.keysToGet = S3Utils.addCommonS3Keys(new String[] { BUCKET, PATH });
	}
	
	@Override
	public String getDescriptionForKey(String key) {
		if(key.equals(BUCKET)) {
			return "S3 bucket name";
		} else if(key.equals(PATH)) {
			return "S3 path to download from";
		} else {
			String commonDescription = S3Utils.getDescriptionForCommonS3Key(key);
			if(commonDescription != null) {
				return commonDescription;
			}
		}
		return super.getDescriptionForKey(key);
	}
	
	@Override
	public String getReactorDescription() {
		return "Download and load a csv file from an S3 bucket. Credentials can be optionally set via a profile path/name, or with an explicit access key and secret. Otherwise, credentials from environment variables or social properties are used.";
	}
	
	@Override
	protected AbstractQueryStruct createQueryStruct() {
		organizeKeys();
		String bucketName = this.keyValue.get(this.keysToGet[0]);
		String path = this.keyValue.get(this.keysToGet[1]);

		if (bucketName == null || bucketName.length() <= 0) {
			throw new IllegalArgumentException("Need to specify bucket name");
		}	
		if (path == null || path.length() <= 0) {
			throw new IllegalArgumentException("Need to give file path on s3");
		}

		String filePath = Utility.getInsightCacheDir() + DIR_SEPARATOR + Utility.getCsvInsightCacheDir();
		filePath += DIR_SEPARATOR + Utility.getRandomString(10) + ".csv";

		try {
			AmazonS3 s3Client = S3Utils.getInstance().getS3Client(this.keyValue);

			File localFile = new File(filePath);
			s3Client.getObject(new GetObjectRequest(bucketName, path), localFile);
		} catch (SdkClientException e) {
			// The call was transmitted successfully, but Amazon S3 couldn't process 
			// it, so it returned an error response.
			logger.error(Constants.STACKTRACE, e);
		}
		
		CSVFileHelper helper = new CSVFileHelper();
		helper.setDelimiter(',');
		helper.parse(filePath);
		Map[] predictionMaps = FileHelperUtil.generateDataTypeMapsFromPrediction(helper.getHeaders(), helper.predictTypes());
		Map dataTypes = predictionMaps[0];
		Map additionalDataTypes = predictionMaps[1];
		CsvQueryStruct qs = new CsvQueryStruct();
		for (String keys : dataTypes.keySet()) {
			qs.addSelector("DND", keys);
		}
		helper.clear();
		qs.merge(this.qs);
		qs.setFilePath(filePath);
		qs.setDelimiter(',');
		qs.setColumnTypes(dataTypes);
		qs.setAdditionalTypes(additionalDataTypes);
		
		return qs;
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy