Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
prerna.om.HeadersDataRow Maven / Gradle / Ivy
package prerna.om;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import com.google.gson.Gson;
import prerna.engine.api.IHeadersDataRow;
import prerna.util.gson.GsonUtility;
import prerna.util.sql.AbstractSqlQueryUtil;
public class HeadersDataRow implements IHeadersDataRow{
/**
* Base components corresponding to a header row
*/
private String[] headers;
private String[] rawHeaders;
private Object[] values;
private Object[] rawValues;
private int recordLength;
private Vector vecValues = null;
private Vector vecHeaders = null;
private String query;
public HeadersDataRow(String[] headers, Object[] values) {
this(headers, headers, values, values);
}
public HeadersDataRow(String[] headers, String[] rawHeaders, Object[] values) {
this(headers, rawHeaders, values, values);
}
public HeadersDataRow(String[] headers, Object[] values, Object[] rawValues) {
this(headers, headers, values, rawValues);
}
public HeadersDataRow(String[] headers, String[] rawHeaders, Object[] values, Object[] rawValues) {
if(headers.length != values.length && values.length != rawValues.length) {
throw new IllegalArgumentException("Length of parameters not equal");
}
this.headers = headers;
this.rawHeaders = rawHeaders;
if(this.rawHeaders == null) {
this.rawHeaders = this.headers;
}
this.values = values;
this.rawValues = rawValues;
this.recordLength = headers.length;
}
@Override
public int getRecordLength() {
return this.recordLength;
}
@Override
public String[] getHeaders() {
return headers;
}
@Override
public Object[] getValues() {
return values;
}
@Override
public Object[] getRawValues() {
return rawValues;
}
@Override
public String toString() {
StringBuilder ret = new StringBuilder();
int size = headers.length;
int index = 0;
ret.append("START ROW\n");
for(; index < size; index++) {
ret.append("\tHEADER=").append(headers[index]).append("\tVALUE=").append(values[index]).append("\n");
}
ret.append("END ROW\n");
return ret.toString();
}
@Override
public String toRawString() {
StringBuilder ret = new StringBuilder();
int size = headers.length;
int index = 0;
ret.append("START ROW\n");
for(; index < size; index++) {
ret.append("\tHEADER=").append(headers[index]).append("\tVALUE=").append(rawValues[index]).append("\n");
}
ret.append("END ROW\n");
return ret.toString();
}
@Override
public void addFields(String[] addHeaders, Object[] addValues) {
int newValuesLength = addHeaders.length;
if(newValuesLength != addValues.length) {
throw new IllegalArgumentException("Length of parameters not equal");
}
// we will make new arrays and copy over the values
int totalLength = this.recordLength + newValuesLength;
String[] newHeaders = new String[totalLength];
Object[] newValues = new Object[totalLength];
System.arraycopy(this.headers, 0, newHeaders, 0, this.recordLength);
System.arraycopy(this.values, 0, newValues, 0, this.recordLength);
// add the new values into the new headers / values
int counter = 0;
for(int i = 0; i < newValuesLength; i++) {
newHeaders[this.recordLength + i] = addHeaders[counter];
newValues[this.recordLength + i] = addValues[counter];
counter++;
}
// adjust references
this.headers = newHeaders;
this.values = newValues;
// TODO: expose raw headers and raw values as well
this.rawHeaders = this.headers;
this.rawValues = this.values;
}
@Override
public void addFields(String addHeader, Object addValues) {
// we will make new arrays and copy over the values
int totalLength = this.recordLength + 1;
String[] newHeaders = new String[totalLength];
Object[] newValues = new Object[totalLength];
System.arraycopy(this.headers, 0, newHeaders, 0, this.recordLength);
System.arraycopy(this.values, 0, newValues, 0, this.recordLength);
// add the new values into the new headers / values
newHeaders[this.recordLength] = addHeader;
newValues[this.recordLength] = addValues;
// adjust references
this.headers = newHeaders;
this.values = newValues;
// TODO: expose raw headers and raw values as well
this.rawHeaders = this.headers;
this.rawValues = this.values;
}
@Override
public IHeadersDataRow copy() {
// convert the main portions and return new
Gson gson = GsonUtility.getDefaultGson();
String[] cHeaders = gson.fromJson(gson.toJson(this.headers), String[].class);
String[] cRawHeaders = gson.fromJson(gson.toJson(this.rawHeaders), String[].class);
Object[] cValues = gson.fromJson(gson.toJson(this.values), Object[].class);
Object[] cRawValues = gson.fromJson(gson.toJson(this.rawValues), Object[].class);
return new HeadersDataRow(cHeaders, cRawHeaders, cValues, cRawValues);
}
@Override
public Map flushRowToMap() {
Map map = new HashMap();
for(int i = 0; i < headers.length; i++) {
if(values[i] instanceof java.sql.Clob) {
String value = AbstractSqlQueryUtil.flushClobToString((java.sql.Clob) values[i]);
map.put(headers[i], value);
} else {
map.put(headers[i], values[i]);
}
}
return map;
}
/////////////////////////////////////////////
@Override
public String toJson() {
return null;
}
@Override
public void open() {
vecHeaders = new Vector();
vecValues = new Vector();
vecHeaders.addAll(Arrays.asList(headers));
vecValues.addAll(Arrays.asList(values));
}
@Override
public void addField(String fieldName, Object value) {
vecHeaders.add(fieldName);
vecValues.add(value);
}
public boolean isValue(String fieldName) {
return vecHeaders.indexOf(fieldName) >= 0;
}
@Override
public Object getField(String fieldName) {
int fieldIndex = vecHeaders.indexOf(fieldName);
if(fieldIndex >= 0) {
return vecValues.elementAt(fieldIndex);
}
return null;
}
@Override
public String[] getRawHeaders() {
return rawHeaders;
}
@Override
public HEADERS_DATA_ROW_TYPE getHeaderType() {
return IHeadersDataRow.HEADERS_DATA_ROW_TYPE.HEADERS_DATA_ROW;
}
@Override
public String getQuery() {
// TODO Auto-generated method stub
return query;
}
@Override
public void setQuery(String query) {
// TODO Auto-generated method stub
this.query = query;
}
}