/* * #! * Ontopia Navigator * #- * Copyright (C) 2001 - 2013 The Ontopia Project * #- * Licensed 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 net.ontopia.topicmaps.nav2.taglibs.tolog; import java.util.Collection; import java.util.Iterator; import java.util.ArrayList; import net.ontopia.topicmaps.query.core.QueryResultIF; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class BufferedQueryResult implements BufferedQueryResultIF { // initialization of logging facility private static Logger log = LoggerFactory.getLogger(BufferedQueryResult.class .getName()); protected QueryResultIF queryResult; protected Collection buffer; protected Object bufferedRow[]; protected Iterator bufferIt; protected boolean inBuffer; protected String query; public BufferedQueryResult(QueryResultIF queryResult, String query) { this.queryResult = queryResult; this.query = query; buffer = new ArrayList(); bufferIt = buffer.iterator(); bufferedRow = null; inBuffer = true; } public void close() { } public String getColumnName(int ix) { return queryResult.getColumnName(ix); } public String[] getColumnNames() { return queryResult.getColumnNames(); } public int getIndex(String colname) { return queryResult.getIndex(colname); } public Object getValue(int ix) { if (inBuffer) return bufferedRow[ix]; return queryResult.getValue(ix); } public Object getValue(String colname) { return getValue(getIndex(colname)); } public Object[] getValues() { if (inBuffer) return bufferedRow; return queryResult.getValues(); } public Object[] getValues(Object values[]) { values = getValues(); return values; } public int getWidth() { return queryResult.getWidth(); } public boolean next() { // Get all results from buffer (until the end). // Then get results from queryResult, adding them to the buffer. boolean retVal; if (bufferIt != null && bufferIt.hasNext()) { bufferedRow = (Object[])bufferIt.next(); retVal = true; } else { bufferIt = null; retVal = queryResult.next(); if (retVal) buffer.add(queryResult.getValues()); inBuffer = false; } return retVal; } public String getQuery() { return query; } public void restart() { bufferIt = buffer.iterator(); bufferedRow = null; inBuffer = true; } }