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

src-main.org.awakefw.sql.json.StatementHolderTransportJsonSimple Maven / Gradle / Ivy

Go to download

Awake SQL is an open source framework that allows remote and secure JDBC access through HTTP.

The newest version!
/*
 * This file is part of Awake SQL. 
 * Awake SQL: Remote JDBC access over HTTP.                                    
 * Copyright (C) 2013,  KawanSoft SAS
 * (http://www.kawansoft.com). All rights reserved.                    
 *                                                                         
 * Awake SQL is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.         
 *              
 * Awake SQL 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 General Public License
 * along with this program; if not, see .
 *
 * If you develop commercial activities using Awake SQL, you must: 
 * a) disclose and distribute all source code of your own product,
 * b) license your own product under the GNU General Public License.
 * 
 * You can be released from the requirements of the license by
 * purchasing a commercial license. Buying such a license will allow you 
 * to ship Awake SQL with your closed source products without disclosing 
 * the source code.
 *
 * For more information, please contact KawanSoft SAS at this
 * address: [email protected]
 * 
 * Any modifications to this file must keep this entire header
 * intact.
 */
package org.awakefw.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.awakefw.file.api.util.AwakeDebug;
import org.awakefw.sql.jsontypes.StaParms;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

/**
 * 
 * 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 = AwakeDebug
	    .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("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");
	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.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