Example usage for org.apache.ibatis.executor.result DefaultResultContext DefaultResultContext

List of usage examples for org.apache.ibatis.executor.result DefaultResultContext DefaultResultContext

Introduction

In this page you can find the example usage for org.apache.ibatis.executor.result DefaultResultContext DefaultResultContext.

Prototype

public DefaultResultContext() 

Source Link

Usage

From source file:org.alfresco.ibatis.RollupResultHandler.java

License:Open Source License

public void handleResult(ResultContext context) {
    // Shortcut if we have processed enough results
    if (maxResults > 0 && resultCount >= maxResults) {
        return;/* w w  w  .j a  va 2s  .com*/
    }

    Object valueObject = context.getResultObject();
    MetaObject probe = configuration.newMetaObject(valueObject);

    // Check if the key has changed
    if (lastKeyValues == null) {
        lastKeyValues = getKeyValues(probe);
        resultCount = 0;
    }
    // Check if it has changed
    Object[] currentKeyValues = getKeyValues(probe);
    if (!Arrays.deepEquals(lastKeyValues, currentKeyValues)) {
        // Key has changed, so handle the results
        Object resultObject = coalesceResults(configuration, rawResults, collectionProperty);
        if (resultObject != null) {
            DefaultResultContext resultContext = new DefaultResultContext();
            resultContext.nextResultObject(resultObject);

            resultHandler.handleResult(resultContext);
            resultCount++;
        }
        rawResults.clear();
        lastKeyValues = currentKeyValues;
    }
    // Add the new value to the results for next time
    rawResults.add(valueObject);
    // Done
}

From source file:org.alfresco.ibatis.RollupResultHandler.java

License:Open Source License

/**
 * Client code <b>must</b> call this method once the query returns so that the final results
 * can be passed to the inner RowHandler.  If a query is limited by size, then it is
 * possible that the unprocessed results represent an incomplete final object; in this case
 * it would be best to ignore the last results.  If the query is complete (i.e. all results
 * are returned) then this method should be called.
 * <p>/*from  w w  w.ja  v a2 s. c om*/
 * If you want X results and each result is made up of N rows (on average), then set the query
 * limit to: <br/>
 *   L = X * (N+1)<br/>
 * and don't call this method.
 */
public void processLastResults() {
    // Shortcut if we have processed enough results
    if (maxResults > 0 && resultCount >= maxResults) {
        return;
    }
    // Handle any outstanding results
    Object resultObject = coalesceResults(configuration, rawResults, collectionProperty);
    if (resultObject != null) {
        DefaultResultContext resultContext = new DefaultResultContext();
        resultContext.nextResultObject(resultObject);

        resultHandler.handleResult(resultContext);
        resultCount++;
        rawResults.clear(); // Stop it from being used again
    }
}

From source file:org.alfresco.repo.domain.node.ibatis.NodeDAOImpl.java

License:Open Source License

@Override
public void selectChildAssocs(Long parentNodeId, QName assocTypeQName, QName assocQName, final int maxResults,
        ChildAssocRefQueryCallback resultsCallback) {
    ChildAssocEntity assoc = new ChildAssocEntity();
    // Parent/* w  w w .  ja  va  2  s  .c o  m*/
    NodeEntity parentNode = new NodeEntity();
    parentNode.setId(parentNodeId);
    assoc.setParentNode(parentNode);

    // Type QName
    if (assocTypeQName != null) {
        if (!assoc.setTypeQNameAll(qnameDAO, assocTypeQName, false)) {
            resultsCallback.done();
            return; // Shortcut
        }
    }
    // QName
    if (assocQName != null) {
        if (!assoc.setQNameAll(qnameDAO, assocQName, false)) {
            resultsCallback.done();
            return; // Shortcut
        }
    }
    // Order
    assoc.setOrdered(resultsCallback.orderResults());

    ChildAssocResultHandler resultHandler = new ChildAssocResultHandler(resultsCallback);

    RowBounds rowBounds = new RowBounds(0, maxResults);
    List<?> entities = template.selectList(SELECT_CHILD_ASSOCS_OF_PARENT_LIMITED, assoc, rowBounds);
    final DefaultResultContext resultContext = new DefaultResultContext();
    for (Object entity : entities) {
        resultContext.nextResultObject(entity);
        resultHandler.handleResult(resultContext);
    }

    resultsCallback.done();
}