org.kawanfw.sql.json.StatementHolderTransportJsonSimple.java Source code

Java tutorial

Introduction

Here is the source code for org.kawanfw.sql.json.StatementHolderTransportJsonSimple.java

Source

/*
 * 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<Integer> list = new Vector<Integer>();
        for (int i = 0; i < stP.length; i++) {
            list.add(stP[i]);
        }

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

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

        // Put all in map
        Map<String, Object> map = new HashMap<String, Object>();
        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("zipResultSet", statementHolder.isZipResultSet());
        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");
        Boolean zipResultSet = (Boolean) mapBack.get("zipResultSet");

        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<Integer, Integer> parmsT = new TreeMap<Integer, Integer>();
        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<Integer, String> parmsV = new TreeMap<Integer, String>();
        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.setZipResultSet(zipResultSet);
        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<StatementHolder> preparedStatementHolderList) {

        debug("in StatementHolderTransport.toJson(List<StatementHolder>");

        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<StatementHolder> fromJsonList(String jsonString) {

        List<StatementHolder> statementHolders = new Vector<StatementHolder>();

        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);
        }
    }

}