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

prerna.reactor.qs.source.TextInputReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.qs.source;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

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

import prerna.query.querystruct.CsvQueryStruct;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.reactor.qs.AbstractQueryStructReactor;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.Constants;
import prerna.util.DIHelper;
import prerna.util.Utility;

public class TextInputReactor extends AbstractQueryStructReactor {
	
	private static final Logger classLogger = LogManager.getLogger(TextInputReactor.class);

	//keys to get inputs from pixel command
	private static final String FILE_INFO = "fileData";
	private static final String DATA_TYPES = "dataTypeMap";
	private static final String DELIMITER = "delim";

	/**
	 * TextInput args 
	 * 
	 * FILE_INFO=["fileInfo"]
	 * DELIMITER = ["delimiter"]
	 * 
	 * to set dataTypes 
	 *     dataTypesMap = [{"column", "type"}]
	 */

	@Override
	protected SelectQueryStruct createQueryStruct() {
		CsvQueryStruct qs = null;

		// get inputs
		Map dataTypes = getDataTypes(); 
		String fileInfo = getFileInfo();

		// write the file on disk
		Date date = new Date();
		String modifiedDate = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSSS").format(date);
		String fileLocation = DIHelper.getInstance().getProperty(Constants.BASE_FOLDER) + DIR_SEPARATOR + "PastedData" + modifiedDate + ".csv";
		File file = new File(fileLocation);
		FileWriter fw = null;
		try {
			fw = new FileWriter(file);
			fw.write(fileInfo);
		} catch (IOException e) {
			classLogger.error(Constants.STACKTRACE, e);
		} finally {
			if(fw != null) {
				try {
					fw.flush();
					fw.close();
				} catch (IOException e) {
					classLogger.error(Constants.STACKTRACE, e);
				}
			}
		}

		// set csv qs
		char delimiter = getDelimiter();
		qs = new CsvQueryStruct();
		qs.setFilePath(fileLocation);
		qs.setDelimiter(delimiter);
		qs.setColumnTypes(dataTypes);
		qs.merge(this.qs);
		return qs;
	}

	/**************************************************************************************************
	 ************************************* INPUT METHODS***********************************************
	 **************************************************************************************************/

	private String getFileInfo() {
		GenRowStruct fGrs = this.store.getNoun(FILE_INFO);
		String fileInfo = null;
		if (fGrs != null && !fGrs.isEmpty()) {
			String encodedString = fGrs.get(0).toString();
			fileInfo = Utility.decodeURIComponent(encodedString);
		} else {
			throw new IllegalArgumentException("Need to specify " + FILE_INFO + "=[\"fileData\"] in pixel command");
		}
		return fileInfo;
	}

	private Map getDataTypes() {
		GenRowStruct dataTypeGRS = this.store.getNoun(DATA_TYPES);
		Map dataTypes = null;
		if (dataTypeGRS != null) {
			NounMetadata dataNoun = dataTypeGRS.getNoun(0);
			dataTypes = (Map) dataNoun.getValue();
		}
		return dataTypes;
	}

	private char getDelimiter() {
		GenRowStruct delimGRS = this.store.getNoun(DELIMITER);
		String delimiter = "";
		char delim = ','; //default
		NounMetadata instanceIndexNoun;

		if (delimGRS != null) {
			instanceIndexNoun = delimGRS.getNoun(0);
			delimiter = (String) instanceIndexNoun.getValue();
		} else {
			throw new IllegalArgumentException("Need to specify " + DELIMITER + "=[delimiter] in pixel command");
		}

		//get char from input string
		if(delimiter.length() > 0) {
			delim = delimiter.charAt(0);
		}

		return delim;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy