%@page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*"%> <%@ include file="Connections/library.jsp" %> <%--Copyright (C) 2002 Tony Grant This file is part of lmstoolkit lmstoolkit 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.1 of the License, or (at your option) any later version. lmstoolkit 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 lmstoolkit; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA--%> <% String books__varDoc = "1"; if (request.getParameter("book_id") !=null) {books__varDoc = (String)request.getParameter("book_id") ;} %> <% Driver Driverbooks = (Driver)Class.forName(MM_library_DRIVER).newInstance(); Connection Connbooks = DriverManager.getConnection(MM_library_STRING,MM_library_USERNAME,MM_library_PASSWORD); PreparedStatement Statementbooks = Connbooks.prepareStatement("SELECT * FROM books WHERE books.book_id = '" + books__varDoc + "'"); ResultSet books = Statementbooks.executeQuery(); boolean books_isEmpty = !books.next(); boolean books_hasData = !books_isEmpty; Object books_data; int books_numRows = 0; %> <% String names_authors__varDoc = "1"; if (request.getParameter("book_id") !=null) {names_authors__varDoc = (String)request.getParameter("book_id") ;} %> <% Driver Drivernames_authors = (Driver)Class.forName(MM_library_DRIVER).newInstance(); Connection Connnames_authors = DriverManager.getConnection(MM_library_STRING,MM_library_USERNAME,MM_library_PASSWORD); PreparedStatement Statementnames_authors = Connnames_authors.prepareStatement("SELECT name, first_name, author.author_id, author_of.book_id, books.book_id FROM author, author_of, books WHERE books.book_id = author_of.book_id and author_of.author_id = author.author_id and books.book_id = ('" + names_authors__varDoc + "') ORDER BY name"); ResultSet names_authors = Statementnames_authors.executeQuery(); boolean names_authors_isEmpty = !names_authors.next(); boolean names_authors_hasData = !names_authors_isEmpty; Object names_authors_data; int names_authors_numRows = 0; %> <% String name_artist__varDoc = "1"; if (request.getParameter("book_id") !=null) {name_artist__varDoc = (String)request.getParameter("book_id") ;} %> <% Driver Drivername_artist = (Driver)Class.forName(MM_library_DRIVER).newInstance(); Connection Connname_artist = DriverManager.getConnection(MM_library_STRING,MM_library_USERNAME,MM_library_PASSWORD); PreparedStatement Statementname_artist = Connname_artist.prepareStatement("SELECT artist.artist_id, name, first_name, refers_to.artist_id, refers_to.book_id, books.book_id FROM artist, refers_to, books WHERE books.book_id = refers_to.book_id and refers_to.artist_id = artist.artist_id and books.book_id = ('" + name_artist__varDoc + "') ORDER BY name"); ResultSet name_artist = Statementname_artist.executeQuery(); boolean name_artist_isEmpty = !name_artist.next(); boolean name_artist_hasData = !name_artist_isEmpty; Object name_artist_data; int name_artist_numRows = 0; %> <% String editor__varDoc = "1"; if (request.getParameter("book_id") !=null) {editor__varDoc = (String)request.getParameter("book_id") ;} %> <% Driver Drivereditor = (Driver)Class.forName(MM_library_DRIVER).newInstance(); Connection Conneditor = DriverManager.getConnection(MM_library_STRING,MM_library_USERNAME,MM_library_PASSWORD); PreparedStatement Statementeditor = Conneditor.prepareStatement("SELECT published.book_id, editor.editor_id, editor_name, books.book_id FROM published, editor, books WHERE books.book_id = published.book_id and published.editor_id = editor.editor_id and books.book_id = ('" + editor__varDoc + "')"); ResultSet editor = Statementeditor.executeQuery(); boolean editor_isEmpty = !editor.next(); boolean editor_hasData = !editor_isEmpty; Object editor_data; int editor_numRows = 0; %> <% String loan__varDoc = "1"; if (request.getParameter("book_id") !=null) {loan__varDoc = (String)request.getParameter("book_id");} %> <% Driver Driverloan = (Driver)Class.forName(MM_library_DRIVER).newInstance(); Connection Connloan = DriverManager.getConnection(MM_library_STRING,MM_library_USERNAME,MM_library_PASSWORD); PreparedStatement Statementloan = Connloan.prepareStatement("SELECT loan_id, loan.book_id, out FROM loan WHERE loan.book_id = '" + loan__varDoc + "' AND loan.out = 't'"); ResultSet loan = Statementloan.executeQuery(); boolean loan_isEmpty = !loan.next(); boolean loan_hasData = !loan_isEmpty; Object loan_data; int loan_numRows = 0; %> <% int Repeat2__numRows = -1; int Repeat2__index = 0; names_authors_numRows += Repeat2__numRows; %> <% int Repeat1__numRows = -1; int Repeat1__index = 0; name_artist_numRows += Repeat1__numRows; %> <% // *** Recordset Stats, Move To Record, and Go To Record: declare stats variables int books_first = 1; int books_last = 1; int books_total = -1; if (books_isEmpty) { books_total = books_first = books_last = 0; } //set the number of rows displayed on this page if (books_numRows == 0) { books_numRows = 1; } %> <% String MM_paramName = ""; %> <% // *** Move To Record and Go To Record: declare variables ResultSet MM_rs = books; int MM_rsCount = books_total; int MM_size = books_numRows; String MM_uniqueCol = "book_id"; MM_paramName = "book_id"; int MM_offset = 0; boolean MM_atTotal = false; boolean MM_paramIsDefined = (MM_paramName.length() != 0 && request.getParameter(MM_paramName) != null); %> <% // *** Move To Record: handle 'index' or 'offset' parameter if (!MM_paramIsDefined && MM_rsCount != 0) { //use index parameter if defined, otherwise use offset parameter String r = request.getParameter("index"); if (r==null) r = request.getParameter("offset"); if (r!=null) MM_offset = Integer.parseInt(r); // if we have a record count, check if we are past the end of the recordset if (MM_rsCount != -1) { if (MM_offset >= MM_rsCount || MM_offset == -1) { // past end or move last if (MM_rsCount % MM_size != 0) // last page not a full repeat region MM_offset = MM_rsCount - MM_rsCount % MM_size; else MM_offset = MM_rsCount - MM_size; } } //move the cursor to the selected record int i; for (i=0; books_hasData && (i < MM_offset || MM_offset == -1); i++) { books_hasData = MM_rs.next(); } if (!books_hasData) MM_offset = i; // set MM_offset to the last possible record } %> <% // *** Move To Specific Record: handle detail parameter if (MM_paramIsDefined && MM_rsCount != 0) { // get the value of the parameter String param = request.getParameter(MM_paramName); // find the record with the unique column value equal to the parameter value String colVal; while (books_hasData) { colVal = ((MM_rs.getObject(MM_uniqueCol)!=null)?MM_rs.getObject(MM_uniqueCol).toString():""); if (colVal.equals(param)) break; books_hasData = MM_rs.next(); MM_offset++; } // if not found, set the number of records and reset the cursor if (!books_hasData) { if (MM_rsCount < 0) MM_rsCount = MM_offset; if (MM_size < 0 || MM_size > MM_rsCount) MM_size = MM_rsCount; MM_offset = 0; // reset the cursor to the beginning books.close(); books = Statementbooks.executeQuery(); books_hasData = books.next(); MM_rs = books; } } %> <% // *** Move To Record: if we dont know the record count, check the display range if (MM_rsCount == -1) { // walk to the end of the display range for this page int i; for (i=MM_offset; books_hasData && (MM_size < 0 || i < MM_offset + MM_size); i++) { books_hasData = MM_rs.next(); } // if we walked off the end of the recordset, set MM_rsCount and MM_size if (!books_hasData) { MM_rsCount = i; if (MM_size < 0 || MM_size > MM_rsCount) MM_size = MM_rsCount; } // if we walked off the end, set the offset based on page size if (!books_hasData && !MM_paramIsDefined) { if (MM_offset > MM_rsCount - MM_size || MM_offset == -1) { //check if past end or last if (MM_rsCount % MM_size != 0) //last page has less records than MM_size MM_offset = MM_rsCount - MM_rsCount % MM_size; else MM_offset = MM_rsCount - MM_size; } } // reset the cursor to the beginning books.close(); books = Statementbooks.executeQuery(); books_hasData = books.next(); MM_rs = books; // move the cursor to the selected record for (i=0; books_hasData && i < MM_offset; i++) { books_hasData = MM_rs.next(); } } %> <% // *** Move To Record: update recordset stats // set the first and last displayed record books_first = MM_offset + 1; books_last = MM_offset + MM_size; if (MM_rsCount != -1) { books_first = Math.min(books_first, MM_rsCount); books_last = Math.min(books_last, MM_rsCount); } // set the boolean used by hide region to check if we are on the last record MM_atTotal = (MM_rsCount != -1 && MM_offset + MM_size >= MM_rsCount); %> <% // *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters String MM_keepBoth,MM_keepURL="",MM_keepForm="",MM_keepNone=""; String[] MM_removeList = { "index", MM_paramName }; // create the MM_keepURL string if (request.getQueryString() != null) { MM_keepURL = '&' + request.getQueryString(); for (int i=0; i < MM_removeList.length && MM_removeList[i].length() != 0; i++) { int start = MM_keepURL.indexOf(MM_removeList[i]) - 1; if (start >= 0 && MM_keepURL.charAt(start) == '&' && MM_keepURL.charAt(start + MM_removeList[i].length() + 1) == '=') { int stop = MM_keepURL.indexOf('&', start + 1); if (stop == -1) stop = MM_keepURL.length(); MM_keepURL = MM_keepURL.substring(0,start) + MM_keepURL.substring(stop); } } } // add the Form variables to the MM_keepForm string if (request.getParameterNames().hasMoreElements()) { java.util.Enumeration items = request.getParameterNames(); while (items.hasMoreElements()) { String nextItem = (String)items.nextElement(); boolean found = false; for (int i=0; !found && i < MM_removeList.length; i++) { if (MM_removeList[i].equals(nextItem)) found = true; } if (!found && MM_keepURL.indexOf('&' + nextItem + '=') == -1) { MM_keepForm = MM_keepForm + '&' + nextItem + '=' + java.net.URLEncoder.encode(request.getParameter(nextItem)); } } } // create the Form + URL string and remove the intial '&' from each of the strings MM_keepBoth = MM_keepURL + MM_keepForm; if (MM_keepBoth.length() > 0) MM_keepBoth = MM_keepBoth.substring(1); if (MM_keepURL.length() > 0) MM_keepURL = MM_keepURL.substring(1); if (MM_keepForm.length() > 0) MM_keepForm = MM_keepForm.substring(1); %> <% // *** Move To Record: set the strings for the first, last, next, and previous links String MM_moveFirst,MM_moveLast,MM_moveNext,MM_movePrev; { String MM_keepMove = MM_keepBoth; // keep both Form and URL parameters for moves String MM_moveParam = "index="; // if the page has a repeated region, remove 'offset' from the maintained parameters if (MM_size > 1) { MM_moveParam = "offset="; int start = MM_keepMove.indexOf(MM_moveParam); if (start != -1 && (start == 0 || MM_keepMove.charAt(start-1) == '&')) { int stop = MM_keepMove.indexOf('&', start); if (start == 0 && stop != -1) stop++; if (stop == -1) stop = MM_keepMove.length(); if (start > 0) start--; MM_keepMove = MM_keepMove.substring(0,start) + MM_keepMove.substring(stop); } } // set the strings for the move to links StringBuffer urlStr = new StringBuffer(request.getRequestURI()).append('?').append(MM_keepMove); if (MM_keepMove.length() > 0) urlStr.append('&'); urlStr.append(MM_moveParam); MM_moveFirst = urlStr + "0"; MM_moveLast = urlStr + "-1"; MM_moveNext = urlStr + Integer.toString(MM_offset+MM_size); MM_movePrev = urlStr + Integer.toString(Math.max(MM_offset-MM_size,0)); } %>
© Tony Grant/tgds.net 2002 |