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

org.kawanfw.sql.json.StatementHolderTransportJsonSimple Maven / Gradle / Ivy

/*
 * This file is part of AceQL. 
 * AceQL: Remote JDBC access over HTTP.                                     
 * Copyright (C) 2015,  KawanSoft SAS
 * (http://www.kawansoft.com). All rights reserved.                                
 *                                                                               
 * AceQL is free software; you can redistribute it and/or                 
 * modify it under the terms of the GNU Lesser General Public                    
 * License as published by the Free Software Foundation; either                  
 * version 2.1 of the License, or (at your option) any later version.            
 *                                                                               
 * AceQL is distributed in the hope that it will be useful,               
 * but WITHOUT ANY WARRANTY; without even the implied warranty of                
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             
 * Lesser General Public License for more details.                               
 *                                                                               
 * You should have received a copy of the GNU Lesser General Public              
 * License along with this library; if not, write to the Free Software           
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 * 02110-1301  USA
 *
 * Any modifications to this file must keep this entire header
 * intact.
 */
package org.kawanfw.sql.json;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Vector;

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.kawanfw.commons.util.FrameworkDebug;
import org.kawanfw.sql.jsontypes.StaParms;

/**
 * 
 * Method fromJson/toJson to transport with Json a structure with Json Simple
 * 
 * @author Nicolas de Pomereu
 * 
 */
public class StatementHolderTransportJsonSimple {

    private static final String SEPARATOR = "!--sth--!";

    /** Debug flag */
    private static boolean DEBUG = FrameworkDebug
	    .isSet(StatementHolderTransportJsonSimple.class);

    /**
     * Convert to Json a unique of StatementHolder
     * 
     * @return the instance converted to Json
     */
    public static String toJson(StatementHolder statementHolder) {

	int[] stP = statementHolder.getStP();

	List list = new Vector();
	for (int i = 0; i < stP.length; i++) {
	    list.add(stP[i]);
	}

	List columnIndexesAutogenerateKeys = new Vector();
	int[] columnIndexesAutogenerateKeysArray = statementHolder
		.getColumnIndexesAutogenerateKeys();
	for (int i = 0; i < columnIndexesAutogenerateKeysArray.length; i++) {
	    columnIndexesAutogenerateKeys
		    .add(columnIndexesAutogenerateKeysArray[i]);
	}

	List columnNamesAutogenerateKeys = new Vector();
	String[] columnNamesAutogenerateKeysArray = statementHolder
		.getColumnNamesAutogenerateKeys();
	for (int i = 0; i < columnNamesAutogenerateKeysArray.length; i++) {
	    columnNamesAutogenerateKeys
		    .add(columnNamesAutogenerateKeysArray[i]);
	}

	// Put all in map
	Map map = new HashMap();
	map.put("sql", statementHolder.getSql());
	map.put("stP", list);
	map.put("parmsT", statementHolder.getParmsT());
	map.put("parmsV", statementHolder.getParmsV());
	map.put("paramatersEncrypted", statementHolder.isParamatersEncrypted());
	map.put("htmlEncodingOn", statementHolder.isHtmlEncodingOn());
	map.put("joinResultSetMetaData",
		statementHolder.isJoinResultSetMetaData());
	map.put("autoGeneratedKeys", statementHolder.getAutoGeneratedKeys());
	map.put("columnIndexesAutogenerateKeys", columnIndexesAutogenerateKeys);
	map.put("columnNamesAutogenerateKeys", columnNamesAutogenerateKeys);

	String theString = JSONValue.toJSONString(map);

	debug("toJson():");
	debug("sql   : " + statementHolder.getSql());
	debug("stP   : " + list);
	debug("parmsT: " + statementHolder.getParmsT());
	debug("parmsV: " + statementHolder.getParmsV());
	debug("columnIndexesAutogenerateKeys: " + columnIndexesAutogenerateKeys);
	debug("columnNamesAutogenerateKeys  : " + columnNamesAutogenerateKeys);
	debug("");

	// Clean all to release memory for GC
	stP = null;
	statementHolder = null;
	map = null;

	return theString;

    }

    /**
     * Convert from a Json string a List of StatementHolder
     * 
     * @return the StatementHolder list converted from Json
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static StatementHolder fromJson(String jsonString) {

	// Revert it
	Object obj = JSONValue.parse(jsonString);

	JSONObject mapBack = (JSONObject) obj;
	String sql = (String) mapBack.get("sql");
	List stPraw = (List) mapBack.get("stP");
	Map parmsTraw = (Map) mapBack.get("parmsT");
	Map parmsVraw = (Map) mapBack.get("parmsV");
	Boolean paramatersEncrypted = (Boolean) mapBack
		.get("paramatersEncrypted");
	Boolean htmlEncodingOn = (Boolean) mapBack.get("htmlEncodingOn");
	Boolean joinResultSetMetaData = (Boolean) mapBack
		.get("joinResultSetMetaData");
	Long autoGeneratedKeys = (Long) mapBack.get("autoGeneratedKeys");

	List columnIndexesAutogenerateKeys = (List) mapBack
		.get("columnIndexesAutogenerateKeys");
	List columnNamesAutogenerateKeys = (List) mapBack
		.get("columnNamesAutogenerateKeys");

	mapBack = null;

	debug("toJson():");
	debug("stP      : " + stPraw);
	debug("parmsTraw: " + parmsTraw);
	debug("parmsVraw: " + parmsVraw);

	int[] stP = new int[StaParms.NUM_PARMS];

	for (int i = 0; i < stPraw.size(); i++) {
	    long myLong = (Long) stPraw.get(i);
	    stP[i] = (int) myLong;
	}

	Map parmsT = new TreeMap();
	Set set = parmsTraw.keySet();

	for (Iterator iterator = set.iterator(); iterator.hasNext();) {

	    String key = (String) iterator.next();
	    long value = (Long) parmsTraw.get(key);

	    parmsT.put(Integer.parseInt(key), (int) value);
	}

	Map parmsV = new TreeMap();
	set = parmsVraw.keySet();

	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
	    String key = (String) iterator.next();
	    String value = (String) parmsVraw.get(key);
	    parmsV.put(Integer.parseInt(key), value);
	}

	debug("");
	debug("stP  : " + stPraw);
	debug("parmsT:" + parmsT);
	debug("parmsT:" + parmsV);
	debug("columnIndexesAutogenerateKeys: " + columnIndexesAutogenerateKeys);
	debug("columnNamesAutogenerateKeys  : " + columnNamesAutogenerateKeys);

	// Clean all to release memory for GC
	obj = null;

	StatementHolder statementHolder = new StatementHolder();
	statementHolder.setSql(sql);
	statementHolder.setStP(stP);
	statementHolder.setParmsT(parmsT);
	statementHolder.setParmsV(parmsV);
	statementHolder.setParamatersEncrypted(paramatersEncrypted);
	statementHolder.setHtmlEncodingOn(htmlEncodingOn);
	statementHolder.setJoinResultSetMetaData(joinResultSetMetaData);
	statementHolder.setAutoGeneratedKeys(autoGeneratedKeys.intValue());
	statementHolder
		.setColumnIndexesAutogenerateKeys(columnIndexesAutogenerateKeys);
	statementHolder
		.setColumnNamesAutogenerateKeys(columnNamesAutogenerateKeys);

	return statementHolder;

    }

    /**
     * Convert to Json a List of StatementHolder
     * 
     * @return the instance converted to Json
     */
    public static String toJson(
	    List preparedStatementHolderList) {

	debug("in StatementHolderTransport.toJson(List");

	StringBuffer stringBuffer = new StringBuffer();

	for (StatementHolder statementHolder : preparedStatementHolderList) {
	    String jsonString = toJson(statementHolder);
	    stringBuffer.append(SEPARATOR);
	    stringBuffer.append(jsonString);
	}

	String finalJson = stringBuffer.toString();
	debug("finalJson: " + finalJson);

	return finalJson;

    }

    /**
     * Convert to Json a List of StatementHolder
     * 
     * @return the instance converted to Json
     */
    public static List fromJsonList(String jsonString) {

	List statementHolders = new Vector();

	debug("jsonString :" + jsonString + ":");

	String[] result = jsonString.split(SEPARATOR);

	for (int i = 0; i < result.length; i++) {
	    String theJsonString = result[i];

	    if (theJsonString.isEmpty()) {
		continue;
	    }

	    debug("theJsonString :" + theJsonString + ":");
	    statementHolders.add(fromJson(theJsonString));
	}

	return statementHolders;

    }

    /**
     * Debug
     * 
     * @param s
     */
    public static void debug(String s) {
	if (DEBUG) {
	    System.out.println(s);
	}
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy