package org.openswing.swing.customvo.server; import java.sql.*; import java.util.*; import org.openswing.swing.customvo.java.*; import org.openswing.swing.message.receive.java.*; import org.openswing.swing.message.send.java.*; import org.openswing.swing.server.*; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Utility class used to insert/update/delete records using java.sql.Connection object and a * dynamic description of value objects to manage.</p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * * <p> This file is part of JAllInOne ERP/CRM application. * This application is free software; you can redistribute it and/or * modify it under the terms of the (LGPL) Lesser General Public * License as published by the Free Software Foundation; * * GNU LESSER GENERAL PUBLIC LICENSE * Version 2.1, February 1999 * * This application 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * The author may be contacted at: * maurocarniel@tin.it</p> * * @author Mauro Carniel * @version 1.0 */ public class CustomValueObjectUtils { /** * Insert rows, starting from the list of maps provided. * @param customFields list of CustomFieldVO objects * @return Response */ public static final ArrayList getCustomFields( Connection conn, String sql, ArrayList values ) throws Exception { PreparedStatement pstmt = null; ResultSet rset = null; CustomFieldVO vo = null; ArrayList fields = new ArrayList(); try { HashSet tables = new HashSet(); HashMap map = new HashMap(); pstmt = conn.prepareStatement(sql); for(int i=0;i<values.size();i++) pstmt.setObject(i+1,values.get(i)); rset = pstmt.executeQuery(); ResultSetMetaData meta = rset.getMetaData(); int sAttr = 0; int dAttr = 0; int nAttr = 0; StringBuffer aux = null; for(int i=0;i<meta.getColumnCount();i++) { vo = new CustomFieldVO(); switch (meta.getColumnType(i+1)) { case Types.BIGINT: case Types.DECIMAL: case Types.DOUBLE: case Types.FLOAT: case Types.INTEGER: case Types.NUMERIC: case Types.REAL: case Types.SMALLINT: vo.setAttributeName("attributeNameN"+nAttr); vo.setAttributeType(vo.TYPE_NUM); vo.setDecimals(meta.getScale(i+1)); vo.setIntegers(meta.getPrecision(i+1)-meta.getScale(i+1)); nAttr++; break; case Types.CHAR: vo.setAttributeName("attributeNameS"+sAttr); vo.setAttributeType(vo.TYPE_CHAR); vo.setMaxChars(meta.getPrecision(i+1)); sAttr++; break; case Types.DATE: vo.setAttributeName("attributeNameD"+dAttr); vo.setAttributeType(vo.TYPE_DATE); dAttr++; break; case Types.TIME: vo.setAttributeName("attributeNameD"+dAttr); vo.setAttributeType(vo.TYPE_TIME); dAttr++; break; case Types.TIMESTAMP: vo.setAttributeName("attributeNameD"+dAttr); vo.setAttributeType(vo.TYPE_DATE_TIME); dAttr++; break; default: vo.setAttributeName("attributeNameS"+sAttr); vo.setAttributeType(vo.TYPE_TEXT); if (meta.getPrecision(i+1)>2000) vo.setMaxChars(2000); else vo.setMaxChars(meta.getPrecision(i+1)); sAttr++; } if (meta.getColumnDisplaySize(i+1)>20) vo.setColumnWidth(200); else if (meta.getColumnType(i+1)==Types.DATE || meta.getColumnType(i+1)==Types.TIME) vo.setColumnWidth(100); else if (meta.getColumnType(i+1)==Types.TIMESTAMP) vo.setColumnWidth(150); else vo.setColumnWidth(meta.getColumnDisplaySize(i+1)*20); aux = new StringBuffer(meta.getColumnName(i+1).replace('_',' ').toLowerCase()); for(int t=0;t<aux.length();t++) if (t==0 || aux.charAt(t-1)==' ') aux.setCharAt(t,String.valueOf(aux.charAt(t)).toUpperCase().charAt(0)); vo.setDescription(aux.toString()); vo.setFieldName(meta.getColumnName(i+1)); vo.setRequired(meta.isNullable(i+1)==meta.columnNoNulls); vo.setTableName(meta.getTableName(i+1)); vo.setEditableOnInsert(true); vo.setEditableOnEdit(true); vo.setFilterable(true); vo.setSortable(true); tables.add(vo.getTableName()); map.put(vo.getTableName()+"."+vo.getFieldName(),vo); fields.add(vo); } // searching for pk... ResultSet r = null; try { Iterator it = tables.iterator(); String tableName = null; while (it.hasNext()) { tableName = it.next().toString(); r = conn.getMetaData().getPrimaryKeys(null, null, tableName); while(r.next()) { vo = (CustomFieldVO)map.get(r.getString(3)+"."+r.getString(4)); if (vo!=null) { vo.setPk(true); vo.setEditableOnEdit(false); } } r.close(); } } catch (Exception ex2) { try { r.close(); } catch (Exception ee) {} } } catch (Exception ex) { } finally { try { rset.close(); } catch (Exception ex1) { } try { pstmt.close(); } catch (Exception ex1) { } } return fields; } /** * Insert rows, starting from the list of maps provided. * @param customFields list of CustomFieldVO objects * @return Response */ public static final Response getQuery( Connection conn, String baseSQL, ArrayList values, int action, int startIndex, Map filteredColumns, ArrayList currentSortedColumns, ArrayList currentSortedVersusColumns, ArrayList customFields, int blockSize, boolean logQuery ) throws Exception { HashMap attribute2dbField = new HashMap(); CustomFieldVO vo = null; for(int i=0;i<customFields.size();i++) { vo = (CustomFieldVO)customFields.get(i); attribute2dbField.put(vo.getAttributeName(),vo.getTableName()+"."+vo.getFieldName()); attribute2dbField.put(vo.getAttributeName(),vo.getFieldName()); } return QueryUtil.getQuery( conn, baseSQL, values, attribute2dbField, CustomValueObject.class, "Y", "N", new GridParams( action, startIndex, filteredColumns, currentSortedColumns, currentSortedVersusColumns, new HashMap() ), blockSize, logQuery ); } /** * Insert rows, starting from the list of maps provided. * @param customFields list of CustomFieldVO objects * @return Response */ public static final Response getQuery( Connection conn, String baseSQL, ArrayList values, int action, int startIndex, Map filteredColumns, ArrayList currentSortedColumns, ArrayList currentSortedVersusColumns, ArrayList customFields, boolean logQuery ) throws Exception { HashMap attribute2dbField = new HashMap(); CustomFieldVO vo = null; for(int i=0;i<customFields.size();i++) { vo = (CustomFieldVO)customFields.get(i); attribute2dbField.put(vo.getAttributeName(),vo.getTableName()+"."+vo.getFieldName()); } return QueryUtil.getQuery( conn, baseSQL, values, attribute2dbField, CustomValueObject.class, "Y", "N", new GridParams( action, startIndex, filteredColumns, currentSortedColumns, currentSortedVersusColumns, new HashMap() ), logQuery ); } }