edu.mayo.cts2.framework.plugin.service.bprdf.util.SparqlUtils.java Source code

Java tutorial

Introduction

Here is the source code for edu.mayo.cts2.framework.plugin.service.bprdf.util.SparqlUtils.java

Source

/*
 * Copyright: (c) 2004-2012 Mayo Foundation for Medical Education and 
 * Research (MFMER). All rights reserved. MAYO, MAYO CLINIC, and the
 * triple-shield Mayo logo are trademarks and service marks of MFMER.
 *
 * Except as contained in the copyright notice above, or as used to identify 
 * MFMER as the author of this software, the trade names, trademarks, service
 * marks, or product names of the copyright holder shall not be used in
 * advertising, promotion or otherwise in connection with this software without
 * prior written authorization of the copyright holder.
 *
 * 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 edu.mayo.cts2.framework.plugin.service.bprdf.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;

import edu.mayo.cts2.framework.model.command.Page;
import edu.mayo.twinkql.template.TwinkqlTemplate;

/**
 * The Class UriUtils.
 *
 * @author <a href="mailto:kevin.peterson@mayo.edu">Kevin Peterson</a>
 */
public final class SparqlUtils {

    private final static int PAGE_SIZE = 100;

    private final static String LIMIT = "limit";
    private final static String OFFSET = "offset";

    /**
     * Instantiates a new uri utils.
     */
    private SparqlUtils() {
        super();
    }

    /**
     * Gets the namespace name tuple.
     * The first element in the array will be the name
     * The seconed element in the array wil be the namespace uri
     *
     * @param uri the uri
     * @return the namespace name tuple
     */
    public static <T> List<T> iterate(TwinkqlTemplate template, String namespace, String query,
            Map<String, Object> parameters, Page page, Class<T> requiredType) {
        int start;
        int end;
        if (parameters == null) {
            parameters = new HashMap<String, Object>();
        }
        if (page == null) {
            start = 0;
            end = Integer.MAX_VALUE;
        } else {
            start = page.getStart();
            end = page.getEnd();
        }

        List<T> totalResults = new ArrayList<T>();

        int currentPos = start;

        while (currentPos < end) {
            setLimitOffsetParams(parameters, currentPos, calculateEnd(currentPos, end));
            List<T> resultPage = template.selectForList(namespace, query, parameters, requiredType);

            if (CollectionUtils.isEmpty(resultPage)) {
                break;
            } else {
                totalResults.addAll(resultPage);
                currentPos += resultPage.size();
            }
        }

        return totalResults;
    }

    private static int calculateEnd(int currentPos, int end) {
        if (currentPos + PAGE_SIZE < end) {
            return currentPos + PAGE_SIZE;
        } else {
            return end;
        }
    }

    public static void setLimitOffsetParams(Map<String, Object> parameters, Page page) {
        parameters.put(LIMIT, page.getMaxToReturn() + 1);
        parameters.put(OFFSET, page.getStart());
    }

    private static void setLimitOffsetParams(Map<String, Object> parameters, int start, int end) {
        parameters.put(LIMIT, end - start);
        parameters.put(OFFSET, start);
    }

}