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

prerna.reactor.database.upload.PredictExcelRangeMetadataReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.database.upload;

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

import org.apache.poi.ss.usermodel.Sheet;

import prerna.poi.main.helper.FileHelperUtil;
import prerna.poi.main.helper.excel.ExcelParsing;
import prerna.poi.main.helper.excel.ExcelRange;
import prerna.poi.main.helper.excel.ExcelSheetPreProcessor;
import prerna.poi.main.helper.excel.ExcelWorkbookFileHelper;
import prerna.reactor.AbstractReactor;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.execptions.SemossPixelException;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.UploadInputUtility;

public class PredictExcelRangeMetadataReactor extends AbstractReactor {

	public static final String SHEET_RANGE = "sheetRange";
	
	public PredictExcelRangeMetadataReactor() {
		this.keysToGet = new String[]{ReactorKeysEnum.FILE_PATH.getKey(), ReactorKeysEnum.SPACE.getKey(), 
				ReactorKeysEnum.SHEET_NAME.getKey(), SHEET_RANGE, ReactorKeysEnum.PASSWORD.getKey()};
	}
	
	@Override
	public NounMetadata execute() {
		organizeKeys();
		String filePath = UploadInputUtility.getFilePath(this.store, this.insight);
		if(!new File(filePath).exists()) {
			throw new IllegalArgumentException("Unable to locate file");
		}
		String sheetName = this.keyValue.get(this.keysToGet[2]);
		String sheetRange = this.keyValue.get(this.keysToGet[3]);
		String password = this.keyValue.get(this.keysToGet[4]);
		
		// check if file is valid
		if(!ExcelParsing.isExcelFile(filePath)) {
			NounMetadata error = new NounMetadata("Invalid file. Must be .xlsx, .xlsm or .xls", PixelDataType.CONST_STRING, PixelOperationType.ERROR);
			SemossPixelException e = new SemossPixelException(error);
			e.setContinueThreadOfExecution(false);
			throw e;
		}

		ExcelWorkbookFileHelper helper = new ExcelWorkbookFileHelper();
		helper.parse(filePath, password);
		Sheet sheet = helper.getSheet(sheetName);
		
		ExcelSheetPreProcessor sheetProcessor = new ExcelSheetPreProcessor(sheet);
		ExcelRange range = new ExcelRange(sheetRange);
		String[] cleanedHeaders = sheetProcessor.getCleanedRangeHeaders(range);
		String[] origHeaders = sheetProcessor.getCleanedRangeHeaders(range);

		Object[][] prediction = ExcelParsing.predictTypes(sheet, sheetRange);
		
		Map rangeMap = new HashMap();
		rangeMap.put("headers", origHeaders);
		rangeMap.put("cleanHeaders", cleanedHeaders);
		Map[] retMaps = FileHelperUtil.generateDataTypeMapsFromPrediction(cleanedHeaders, prediction);
		rangeMap.put("dataTypes", retMaps[0]);
		rangeMap.put("additionalDataTypes", retMaps[1]);
		
		return new NounMetadata(rangeMap, PixelDataType.MAP);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy