/* * Copyright (C) 2006-2008 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program 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 General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * As a special exception to the terms and conditions of version 2.0 of * the GPL, you may redistribute this Program in connection with Free/Libre * and Open Source Software ("FLOSS") applications as described in Alfresco's * FLOSS exception. You should have recieved a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ package org.alfresco.jlan.server.filesys.db; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.alfresco.jlan.debug.Debug; import org.alfresco.jlan.server.filesys.FileInfo; import org.alfresco.jlan.server.filesys.SearchContext; import org.alfresco.jlan.util.WildCard; /** * Database Disk Search Context Class * * @author gkspencer */ public abstract class DBSearchContext extends SearchContext { // Search resultset and statement protected ResultSet m_rs; protected Statement m_stmt; // Complex wildcard filter protected WildCard m_filter; // Mark files as offline, optional file size of files to be marked as offline protected boolean m_offlineFiles; protected long m_offlineFileSize; /** * Class constructor * * @param rs ResultSet */ public DBSearchContext(ResultSet rs) { super(); m_rs = rs; } /** * Class constructor * * @param rs ResultSet * @param filter WildCard */ public DBSearchContext(ResultSet rs, WildCard filter) { super(); m_rs = rs; m_filter = filter; } /** * Class constructor * * @param rs ResultSet * @param stmt Statement * @param filter WildCard */ public DBSearchContext(ResultSet rs, Statement stmt, WildCard filter) { super(); m_rs = rs; m_stmt = stmt; m_filter = filter; } /** * Return the resume id for the current file/directory in the search. * * @return int */ public int getResumeId() { int resumeId = -1; try { resumeId = m_rs.getRow(); } catch (SQLException ex) { Debug.println(ex); } return resumeId; } /** * Determine if there are more files for the active search. * * @return boolean */ public boolean hasMoreFiles() { // Check if the resultset is valid if ( m_rs == null) return false; boolean moreFiles = true; // Check if we have reached the end of the resultset try { moreFiles = m_rs.isAfterLast() ? false : true; } catch (SQLException ex) { } return moreFiles; } /** * Return the next file from the search, or return false if there are no more files * * @param info FileInfo * @return boolean */ public abstract boolean nextFileInfo(FileInfo info); /** * Return the file name of the next file in the active search. Returns * null if the search is complete. * * @return String */ public abstract String nextFileName(); /** * Restart a search at the specified resume point. * * @param resumeId Resume point id. * @return true if the search can be restarted, else false. */ public boolean restartAt( int resumeId) { boolean result = true; // Skip to the required record, relative to the start of the resultset try { m_rs.beforeFirst(); m_rs.absolute( resumeId); } catch ( SQLException ex) { result = false; } // Return status return result; } /** * Restart the current search at the specified file. * * @param info File to restart the search at. * @return true if the search can be restarted, else false. */ public boolean restartAt(FileInfo info) { // Skip to the previous record try { m_rs.previous(); } catch (SQLException ex) { } return true; } /** * Return the total number of file entries for this search if known, else return -1 * * @return int */ public int numberOfEntries() { // Get the number of entries in the resultset int rows = -1; try { m_rs.last(); rows = m_rs.getRow(); m_rs.beforeFirst(); } catch ( SQLException ex) { } // Return the entry count for this search return rows; } /** * Close the search */ public void closeSearch() { // Check if the resultset is valid, if so then close it if ( m_rs != null) { try { m_rs.close(); if ( m_stmt != null) m_stmt.close(); } catch (Exception ex) { Debug.println(ex); } m_rs = null; m_stmt = null; } // Call the base class super.closeSearch(); } /** * Determine if files should be marked as offline * * @return boolean */ public final boolean hasMarkAsOffline() { return m_offlineFiles; } /** * Return the offline file size limit * * @return long */ public final long getOfflineFileSize() { return m_offlineFileSize; } /** * Set/clear the mark files as offline setting * * @param offline boolean */ public final void setMarkAsOffline(boolean offline) { m_offlineFiles = offline; } /** * Set the file size for offline files * * @param fsize long */ public final void setOfflineFileSize( long fsize) { m_offlineFileSize = fsize; } }