Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.vruum.unstack.norm; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import org.apache.commons.dbutils.RowProcessor; public class CustomBasicRowProcessor implements RowProcessor { private static final CustomBeanProcessor defaultConvert = new CustomBeanProcessor(); private static final CustomBasicRowProcessor instance = new CustomBasicRowProcessor(); @Deprecated public static CustomBasicRowProcessor instance() { return instance; } private final CustomBeanProcessor convert; public CustomBasicRowProcessor() { this(defaultConvert); } public CustomBasicRowProcessor(CustomBeanProcessor convert) { super(); this.convert = convert; } @Override public Object[] toArray(ResultSet rs) throws SQLException { ResultSetMetaData meta = rs.getMetaData(); int cols = meta.getColumnCount(); Object[] result = new Object[cols]; for (int i = 0; i < cols; i++) { result[i] = rs.getObject(i + 1); } return result; } @Override public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException { return this.convert.toBean(rs, type); } // @Override // public <T> List<T> toBeanList(ResultSet rs, Class<T> type) throws SQLException { // return this.convert.toBeanList(rs, type); // } public <T> Map<String, List<T>> toMapOfBeanLists(ResultSet rs, String rowKey, Class<T> type) throws SQLException { return this.convert.toBeanList(rs, rowKey, type); } @Override public Map<String, Object> toMap(ResultSet rs) throws SQLException { Map<String, Object> result = new CaseInsensitiveHashMap(); ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); for (int i = 1; i <= cols; i++) { String columnName = rsmd.getColumnLabel(i); if (null == columnName || 0 == columnName.length()) { columnName = rsmd.getColumnName(i); } result.put(columnName, rs.getObject(i)); } return result; } @Override public <T> List<T> toBeanList(ResultSet rs, Class<T> type) throws SQLException { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } private static class CaseInsensitiveHashMap extends HashMap<String, Object> { private final Map<String, String> lowerCaseMap = new HashMap<String, String>(); private static final long serialVersionUID = -2848100435296897392L; @Override public boolean containsKey(Object key) { Object realKey = lowerCaseMap.get(key.toString().toLowerCase(Locale.ENGLISH)); return super.containsKey(realKey); } @Override public Object get(Object key) { Object realKey = lowerCaseMap.get(key.toString().toLowerCase(Locale.ENGLISH)); return super.get(realKey); } @Override public Object put(String key, Object value) { Object oldKey = lowerCaseMap.put(key.toLowerCase(Locale.ENGLISH), key); Object oldValue = super.remove(oldKey); super.put(key, value); return oldValue; } @Override public void putAll(Map<? extends String, ?> m) { for (Map.Entry<? extends String, ?> entry : m.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); this.put(key, value); } } @Override public Object remove(Object key) { Object realKey = lowerCaseMap.remove(key.toString().toLowerCase(Locale.ENGLISH)); return super.remove(realKey); } } }