package org.openswing.swing.util.server; import java.util.*; import org.openswing.swing.message.receive.java.*; import org.openswing.swing.message.send.java.*; import com.ibatis.sqlmap.client.*; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Helper class containing an utility method useful when retrieving a block of data for a grid, using iBatis.</p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * * <p> This file is part of OpenSwing Framework. * This library 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 library 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 IBatisUtils { /** * Read a block of records from the result set, starting from a Query object. * @param action fetching versus: PREVIOUS_BLOCK_ACTION, NEXT_BLOCK_ACTION or LAST_BLOCK_ACTION * @param startPos start position of data fetching in result set * @param blockSize number of records to read * @param sqlMap SQL mapping used by iBatis * @param id select identifier in XML mapping */ public static Response getBlockFromQuery( int action, int startIndex, int blockSize, SqlMapClient sqlMap, String id, IBatisParamsWrapper gridParams ) throws Exception { // read a block of records... ArrayList gridList = new ArrayList(); boolean moreRows = false; int resultSetLength = -1; int rowCount = 0; List list = null; if (action==GridParams.LAST_BLOCK_ACTION) { // last block requested: the whole result set will be loaded, to determine the result set length list = sqlMap.queryForList(id,gridParams); resultSetLength = list.size(); startIndex = Math.max(rowCount-blockSize,0); for(int i=startIndex;i<resultSetLength;i++) gridList.add(list.get(i)); return new VOListResponse(gridList,false,resultSetLength); } else { if (action==GridParams.PREVIOUS_BLOCK_ACTION) { action = GridParams.NEXT_BLOCK_ACTION; startIndex = Math.max(startIndex-blockSize,0); } } // read a block of data... list = sqlMap.queryForList(id,gridParams,startIndex,blockSize+1); gridList.addAll(list); if (gridList.size()>blockSize) { gridList.remove(gridList.size() - 1); moreRows = true; } if (resultSetLength==-1) resultSetLength = gridList.size(); return new VOListResponse(gridList,moreRows,resultSetLength); } }