Java tutorial
/* * 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); } } }