
prerna.reactor.algorithms.xray.GetXLSchemaReactor Maven / Gradle / Ivy
The newest version!
package prerna.reactor.algorithms.xray;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import prerna.poi.main.helper.FileHelperUtil;
import prerna.poi.main.helper.XLFileHelper;
import prerna.poi.main.helper.excel.ExcelParsing;
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.Utility;
public class GetXLSchemaReactor extends AbstractReactor {
public GetXLSchemaReactor() {
this.keysToGet = new String[] { ReactorKeysEnum.FILE_PATH.getKey(), ReactorKeysEnum.SHEET_NAME.getKey() };
}
@Override
public NounMetadata execute() {
// get inputs
organizeKeys();
String filePath = this.keyValue.get(this.keysToGet[0]);
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;
}
if(filePath == null) {
throw new IllegalArgumentException("Need to define the " + ReactorKeysEnum.FILE_PATH.getKey());
}
String sheetName = this.keyValue.get(this.keysToGet[1]);;
if(sheetName == null) {
throw new IllegalArgumentException("Need to define the " + ReactorKeysEnum.SHEET_NAME.getKey());
}
HashMap ret = new HashMap();
XLFileHelper helper = new XLFileHelper();
helper.parse(filePath);
ret.put("databaseName", FilenameUtils.getName(filePath).replace(".", "_"));
// store the suggested data types
Map> dataTypes = new Hashtable>();
Map sheetDataMap = new LinkedHashMap();
String[] columnHeaders = helper.getHeaders(sheetName);
String[] predicatedDataTypes = FileHelperUtil.generateDataTypeArrayFromPrediction(helper.predictTypes(sheetName));
HashMap> relationshipMap = new HashMap>();
for (String concept : columnHeaders) {
relationshipMap.put(concept, new ArrayList());
}
ret.put("relationships", relationshipMap);
dataTypes.put(sheetName, sheetDataMap);
HashMap tableDetails = new HashMap();
for (int i = 0; i < columnHeaders.length; i++) {
HashMap colDetails = new HashMap();
colDetails.put("name", columnHeaders[i]);
String dataType = Utility.getCleanDataType(predicatedDataTypes[i]);
colDetails.put("type", dataType);
tableDetails.put(columnHeaders[i], colDetails);
}
ret.put("tables", tableDetails);
return new NounMetadata(ret, PixelDataType.CUSTOM_DATA_STRUCTURE, PixelOperationType.CODE_EXECUTION);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy