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

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

The newest version!
package prerna.util.gson;

import static prerna.util.gson.IHeadersDataRowAdapter.deserializeValues;
import static prerna.util.gson.IHeadersDataRowAdapter.serializeValues;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

import prerna.om.HeadersDataRow;
import prerna.util.gson.IHeadersDataRowAdapter.SerializedValuesAndTypes;

public class HeadersDataRowAdapter extends AbstractSemossTypeAdapter {

	@Override
	public HeadersDataRow read(JsonReader in) throws IOException {
		if (in.peek() == JsonToken.NULL) {
			in.nextNull();
			return null;
		}
				
		List headers = new ArrayList<>();
		List rawHeaders = new ArrayList<>();
		List values = new ArrayList<>();
		List valueTypes = new ArrayList<>();
		List rawValues = new ArrayList<>();
		List rawValueTypes = new ArrayList<>();
		
		if (in.peek() != JsonToken.NAME || !in.nextName().equals("row")) {
			throw new IllegalArgumentException("Header is not serialized properly. Must contain row object.");
		}
		in.beginObject();
				
		while(in.hasNext()) {
			if(in.peek() == JsonToken.NAME){
				String key = in.nextName();
				if(key.equals("headers")) {
					in.beginArray();
					while(in.hasNext()) {
						headers.add(in.nextString());
					}
					in.endArray();
				} else if(key.equals("rawHeaders")) {
					in.beginArray();
					while(in.hasNext()) {
						rawHeaders.add(in.nextString());
					}
					in.endArray();
				} else if(key.equals("values")) {
					in.beginArray();
					while(in.hasNext()) {
						if (in.peek() == JsonToken.NULL) {
							values.add(null);
							in.nextNull();
						} else {
							values.add(in.nextString());
						}
					}
					in.endArray();				
				} else if(key.equals("valueTypes")) {
					in.beginArray();
					while(in.hasNext()) {
						valueTypes.add(in.nextString());
					}
					in.endArray();	
				} else if (key.equals("rawValues")) {
					in.beginArray();
					while(in.hasNext()) {
						if (in.peek() == JsonToken.NULL) {
							rawValues.add(null);
							in.nextNull();
						} else {
							rawValues.add(in.nextString());
						}
					}
					in.endArray();	
				} else if(key.equals("rawValueTypes")) {
					in.beginArray();
					while(in.hasNext()) {
						rawValueTypes.add(in.nextString());
					}
					in.endArray();	
				}
			}
		}
		in.endObject();
		
		Object[] deserializedValues = deserializeValues(values.toArray(new String[0]), valueTypes.toArray(new String[0]));
		Object[] deserializedRawValues = deserializeValues(rawValues.toArray(new String[0]), rawValueTypes.toArray(new String[0]));
		HeadersDataRow value = new HeadersDataRow(headers.toArray(new String[0]), rawHeaders.toArray(new String[0]), deserializedValues, deserializedRawValues);
		return value;
	}
	
	@Override
	public void write(JsonWriter out, HeadersDataRow value) throws IOException {
		if (value == null) {
			out.nullValue();
			return;
		}
		
		out.beginObject();

		// always start with the type of the header
		out.name("type").value(value.getHeaderType().toString());
		
		out.name("row").beginObject();

		// headers
		out.name("headers");
		out.beginArray();
		for (String header : value.getHeaders()) {
			out.value(header);
		}
		out.endArray();

		// rawHeaders
		out.name("rawHeaders");
		out.beginArray();
		for (String rawHeader : value.getRawHeaders()) {
			out.value(rawHeader);
		}
		out.endArray();

		// values
		SerializedValuesAndTypes result = serializeValues(value.getValues());
		String[] serializedValues = result.getSerializedValues();
		String[] serializedValueTypes = result.getSerializedValueTypes();

		out.name("values");
		out.beginArray();
		for (String serializedValue : serializedValues) {
			out.value(serializedValue);
		}
		out.endArray();

		out.name("valueTypes");
		out.beginArray();
		for (String serializedValueType : serializedValueTypes) {
			out.value(serializedValueType);
		}
		out.endArray();

		// rawValues
		SerializedValuesAndTypes rawResult = serializeValues(value.getRawValues());
		String[] rawSerializedValues = rawResult.getSerializedValues();
		String[] rawSerializedValueTypes = rawResult.getSerializedValueTypes();

		out.name("rawValues");
		out.beginArray();
		for (String rawSerializedValue : rawSerializedValues) {
			out.value(rawSerializedValue);
		}
		out.endArray();

		out.name("rawValueTypes");
		out.beginArray();
		for (String rawSerializedValueType : rawSerializedValueTypes) {
			out.value(rawSerializedValueType);
		}
		out.endArray();
		
		out.endObject();
	
		out.endObject();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy