/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.jdbcconfig.internal; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.logging.Level; import java.util.logging.Logger; import org.geotools.util.logging.Logging; import com.google.common.collect.Maps; public class DbUtils { static final Logger LOGGER = Logging.getLogger(DbUtils.class.getPackage().getName()); public static Map<String, ?> params(Object... kv) { Map<String, Object> params = Maps.newHashMap(); String paramName; Object paramValue; for (int i = 0; i < kv.length; i += 2) { paramName = (String) kv[i]; paramValue = kv[i + 1]; params.put(paramName, paramValue); } return params; } public static void logStatement(CharSequence sql, Map<String, ?> namedParameters) { if (LOGGER.isLoggable(Level.FINER)) { StringBuilder sb = new StringBuilder(sql); for (Entry<String, ?> e : namedParameters.entrySet()) { Object value = e.getValue(); String sval; if (value instanceof Collection) { Collection<?> c = (Collection<?>) value; StringBuilder cv = new StringBuilder(); for (Iterator<?> it = c.iterator(); it.hasNext();) { Object v = it.next(); if (v == null) { cv.append("null"); } else if (v instanceof Number) { cv.append(v); } else { cv.append("'").append(String.valueOf(v)).append("'"); } if (it.hasNext()) { cv.append(", "); } } sval = cv.toString(); } else { sval = value == null ? "null" : (value instanceof Number ? String .valueOf(value) : "'" + String.valueOf(value) + "'"); } String paramName = ":" + e.getKey(); int idx; while ((idx = sb.indexOf(paramName)) > -1) { sb.replace(idx, idx + paramName.length(), sval); } } LOGGER.finer(sb.toString()); } else if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine("querying " + sql + "\n with values: " + namedParameters); } } }