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

prerna.util.gson.GsonUtility Maven / Gradle / Ivy

The newest version!
package prerna.util.gson;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;

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

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonReader;

import prerna.date.SemossDate;
import prerna.engine.api.IHeadersDataRow;
import prerna.om.ColorByValueRule;
import prerna.om.HeadersDataRow;
import prerna.om.Pixel;
import prerna.om.PixelList;
import prerna.om.SEMOSSEdge;
import prerna.om.SEMOSSVertex;
import prerna.query.querystruct.CsvQueryStruct;
import prerna.query.querystruct.ExcelQueryStruct;
import prerna.query.querystruct.HardSelectQueryStruct;
import prerna.query.querystruct.ParquetQueryStruct;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.TemporalEngineHardQueryStruct;
import prerna.query.querystruct.filters.AndQueryFilter;
import prerna.query.querystruct.filters.FunctionQueryFilter;
import prerna.query.querystruct.filters.GenRowFilters;
import prerna.query.querystruct.filters.IQueryFilter;
import prerna.query.querystruct.filters.OrQueryFilter;
import prerna.query.querystruct.filters.SimpleQueryFilter;
import prerna.query.querystruct.selectors.IQuerySelector;
import prerna.query.querystruct.selectors.IQuerySort;
import prerna.query.querystruct.selectors.QueryArithmeticSelector;
import prerna.query.querystruct.selectors.QueryColumnOrderBySelector;
import prerna.query.querystruct.selectors.QueryColumnSelector;
import prerna.query.querystruct.selectors.QueryConstantSelector;
import prerna.query.querystruct.selectors.QueryCustomOrderBy;
import prerna.query.querystruct.selectors.QueryFunctionSelector;
import prerna.query.querystruct.selectors.QueryIfSelector;
import prerna.query.querystruct.selectors.QueryOpaqueSelector;
import prerna.query.querystruct.update.UpdateQueryStruct;
import prerna.reactor.export.ClustergramFormatter;
import prerna.reactor.export.GraphFormatter;
import prerna.reactor.export.HierarchyFormatter;
import prerna.reactor.export.IFormatter;
import prerna.reactor.export.JsonFormatter;
import prerna.reactor.export.KeyValueFormatter;
import prerna.reactor.export.TableFormatter;
import prerna.reactor.qs.SubQueryExpression;
import prerna.sablecc2.om.VarStore;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.sablecc2.om.task.BasicIteratorTask;
import prerna.sablecc2.om.task.options.TaskOptions;
import prerna.util.Constants;

public class GsonUtility {

	private static final Logger classLogger = LogManager.getLogger(GsonUtility.class);

	private static boolean testing = false;
	
	private GsonUtility() {
		
	}
	
	public static Gson getDefaultGson(boolean pretty) {
		GsonBuilder gsonBuilder = new GsonBuilder()
				.disableHtmlEscaping()
				.excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT)
				.registerTypeAdapter(Double.class, new NumberAdapter())
				.registerTypeAdapter(SemossDate.class, new SemossDateAdapter())
				
				// qs
				.registerTypeAdapter(TemporalEngineHardQueryStruct.class, new TemporalEngineHardSelectQueryStructAdapter())
				.registerTypeAdapter(HardSelectQueryStruct.class, new HardSelectQueryStructAdapter())
				.registerTypeAdapter(SelectQueryStruct.class, new SelectQueryStructAdapter())
				.registerTypeAdapter(CsvQueryStruct.class, new CsvQueryStructAdapter())
				.registerTypeAdapter(ExcelQueryStruct.class, new ExcelQueryStructAdapter())
				.registerTypeAdapter(ParquetQueryStruct.class, new ParquetQueryStructAdapter())
				.registerTypeAdapter(UpdateQueryStruct.class, new UpdateQueryStructAdapter())
				.registerTypeAdapter(ColorByValueRule.class, new ColorByValueRuleAdapter())
				
				// selectors
				.registerTypeAdapter(IQuerySelector.class, new IQuerySelectorAdapter())
				.registerTypeAdapter(QueryColumnSelector.class, new QueryColumnSelectorAdapter())
				.registerTypeAdapter(QueryFunctionSelector.class, new QueryFunctionSelectorAdapter())
				.registerTypeAdapter(QueryArithmeticSelector.class, new QueryArithmeticSelectorAdapter())
				.registerTypeAdapter(QueryOpaqueSelector.class, new QueryOpaqueSelectorAdapter())
				.registerTypeAdapter(QueryIfSelector.class, new QueryIfSelectorAdapter())
				.registerTypeAdapter(QueryConstantSelector.class, new QueryConstantSelectorAdapter())
				// part of query constants
				.registerTypeAdapter(SubQueryExpression.class, new SubQueryExpressionAdapter())

				// filters
				.registerTypeAdapter(GenRowFilters.class, new GenRowFiltersAdapter())
				.registerTypeAdapter(IQueryFilter.class, new IQueryFilterAdapter())
				.registerTypeAdapter(SimpleQueryFilter.class, new SimpleQueryFilterAdapter())
				.registerTypeAdapter(OrQueryFilter.class, new OrQueryFilterAdapter())
				.registerTypeAdapter(AndQueryFilter.class, new AndQueryFilterAdapter())
				.registerTypeAdapter(FunctionQueryFilter.class, new FunctionQueryFilterAdapter())
				
				// sorts
				.registerTypeAdapter(IQuerySort.class, new IQuerySortAdapter())
				.registerTypeAdapter(QueryColumnOrderBySelector.class, new QueryColumnOrderBySelectorAdapter())
				.registerTypeAdapter(QueryCustomOrderBy.class, new QueryCustomOrderByAdapter())

				// object models
				.registerTypeAdapter(NounMetadata.class, new NounMetadataAdapter())
				.registerTypeAdapter(VarStore.class, new VarStoreAdapter())

				// iterators
				.registerTypeAdapter(BasicIteratorTask.class, new BasicIteratorTaskAdapter())
				.registerTypeAdapter(TaskOptions.class, new TaskOptionsAdapter())
				// formatters
				.registerTypeAdapter(IFormatter.class, new IFormatterAdapter())
				.registerTypeAdapter(TableFormatter.class, new IFormatterAdapter())
				.registerTypeAdapter(GraphFormatter.class, new IFormatterAdapter())
				.registerTypeAdapter(JsonFormatter.class, new IFormatterAdapter())
				.registerTypeAdapter(KeyValueFormatter.class, new IFormatterAdapter())
				.registerTypeAdapter(ClustergramFormatter.class, new IFormatterAdapter())
				.registerTypeAdapter(HierarchyFormatter.class, new IFormatterAdapter())

				// OLD LEGACY STUFF
				.registerTypeAdapter(SEMOSSVertex.class, new SEMOSSVertexAdapter())
				.registerTypeAdapter(SEMOSSEdge.class, new SEMOSSEdgeAdapter())
				
				// cluster
				.registerTypeAdapter(IHeadersDataRow.class, new IHeadersDataRowAdapter())
				.registerTypeAdapter(HeadersDataRow.class, new HeadersDataRowAdapter())
				
				// pixel objects
				.registerTypeAdapter(Pixel.class, new PixelAdapter())
				.registerTypeAdapter(PixelList.class, new PixelListAdapter())
				;
		
		if(pretty) {
			gsonBuilder.setPrettyPrinting();
		}
		
		return gsonBuilder.create();
	}
	
	public static Gson getDefaultGson() {
		return getDefaultGson(testing);
	}

	/**
	 * 
	 * @param filePath
	 * @param typeToken
	 * @throws IOException 
	 */
	public static Object readJsonFileToObject(String filePath, java.lang.reflect.Type type) throws IOException {
		return readJsonFileToObject(new File(filePath), type);
	}
	
	/**
	 * 
	 * @param file
	 * @param typeToken
	 * @throws IOException 
	 */
	public static Object readJsonFileToObject(File file, java.lang.reflect.Type type) throws IOException {
		JsonReader jReader = null;
		BufferedReader fReader = null;
		try {
			Gson gson = new Gson();
			fReader = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8);
			jReader = new JsonReader(fReader);
	        return gson.fromJson(jReader, type);
	    } finally {
	    	if(fReader != null) {
	    		try {
					fReader.close();
				} catch (IOException e) {
					classLogger.error(Constants.STACKTRACE, e);
				}
	    	}
	    	if(jReader != null) {
	    		try {
					jReader.close();
				} catch (IOException e) {
					classLogger.error(Constants.STACKTRACE, e);
				}
	    	}
	    }	
	}
	
	/**
	 * 
	 * @param file
	 * @param gson
	 * @param objToWrite
	 * @throws IOException
	 */
	public static void writeObjectToJsonFile(File file, Gson gson, Object objToWrite) throws IOException {
		FileWriter writer = null;
		try {
			writer = new FileWriter(file);
			gson.toJson(objToWrite, writer);
		} finally {
			if(writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					classLogger.error(Constants.STACKTRACE, e);
				}
			}
		}
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy