org.objectstyle.cayenne.access.util.SelectObserver Maven / Gradle / Ivy
/* ====================================================================
*
* The ObjectStyle Group Software License, version 1.1
* ObjectStyle Group - http://objectstyle.org/
*
* Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
* of the software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if any,
* must include the following acknowlegement:
* "This product includes software developed by independent contributors
* and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
* or promote products derived from this software without prior written
* permission. For written permission, email
* "andrus at objectstyle dot org".
*
* 5. Products derived from this software may not be called "ObjectStyle"
* or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
* names without prior written permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals and hosted on ObjectStyle Group web site. For more
* information on the ObjectStyle Group, please see
* .
*/
package org.objectstyle.cayenne.access.util;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Level;
import org.objectstyle.cayenne.CayenneRuntimeException;
import org.objectstyle.cayenne.access.DataContext;
import org.objectstyle.cayenne.query.Query;
import org.objectstyle.cayenne.query.QueryMetadata;
import org.objectstyle.cayenne.util.Util;
/**
* OperationObserver that accumulates select query results provided by callback methods.
* Later the results can be retrieved via different getResults
methods.
* Also supports instantiating DataObjects within a provided DataContext.
*
* This class is used as a default OperationObserver by DataContext. Also it can serve as
* a helper for classes that work with DataNode directly, bypassing DataContext.
*
*
* If exceptions happen during the execution, they are immediately rethrown.
*
*
* For more information see Cayenne User Guide.
*
*
* @deprecated since 1.2 SelectObserver is no longer used in Cayenne internally. Users
* should switch to QueryResult.
* @author Andrei Adamchik
* @see org.objectstyle.cayenne.access.QueryResult
*/
public class SelectObserver extends DefaultOperationObserver {
protected Map results = new HashMap();
protected int selectCount;
public SelectObserver() {
}
/**
* @deprecated since 1.2
*/
public SelectObserver(Level logLevel) {
super.setLoggingLevel(logLevel);
}
/**
* Returns a count of select queries that returned results since the last time "clear"
* was called, or since this object was created.
*/
public int getSelectCount() {
return selectCount;
}
/**
* Returns a list of result snapshots for the specified query, or null if this query
* has never produced any results.
*/
public List getResults(Query q) {
return (List) results.get(q);
}
/**
* Returns query results accumulated during query execution with this object as an
* operation observer.
*/
public Map getResults() {
return results;
}
/** Clears fetched objects stored in an internal list. */
public void clear() {
selectCount = 0;
results.clear();
}
/**
* Stores all objects in dataRows
in an internal result list.
*/
public void nextDataRows(Query query, List dataRows) {
if (dataRows != null) {
results.put(query, dataRows);
}
selectCount++;
}
/**
* @since 1.1
* @deprecated since 1.2. Note that this implementation no longer resolves prefetches
* properly.
*/
public List getResultsAsObjects(DataContext dataContext, Query rootQuery) {
QueryMetadata info = rootQuery.getMetaData(dataContext.getEntityResolver());
return dataContext.objectsFromDataRows(
info.getObjEntity(),
getResults(rootQuery),
info.isRefreshingObjects(),
info.isResolvingInherited());
}
/**
* Overrides super implementation to rethrow an exception immediately.
*/
public void nextQueryException(Query query, Exception ex) {
super.nextQueryException(query, ex);
throw new CayenneRuntimeException("Query exception.", Util.unwindException(ex));
}
/**
* Overrides superclass implementation to rethrow an exception immediately.
*/
public void nextGlobalException(Exception ex) {
super.nextGlobalException(ex);
throw new CayenneRuntimeException("Global exception.", Util.unwindException(ex));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy