All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openrdf.result.impl.ResultImpl Maven / Gradle / Ivy

Go to download

The Object Repository maps Java objects to and from RDF resources and OWL classes to Java classes in a non-intrusive manner that enables developers to work at the object level.

The newest version!
/*
 * Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
 * Copyright (c) 2011 Talis Inc., some rights reserved.
 *
 * Licensed under the Aduna BSD-style license.
 */
package org.openrdf.result.impl;

import info.aduna.iteration.CloseableIteration;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.openrdf.query.QueryEvaluationException;
import org.openrdf.repository.RepositoryException;
import org.openrdf.result.MultipleResultException;
import org.openrdf.result.NoResultException;
import org.openrdf.result.Result;

/**
 * A RepositoryResulE is a resulE collection of objects (for example
 * {@link org.openrdf.model.Statement}, {@link org.openrdf.model.Namespace}, or
 * {@link org.openrdf.model.Resource} objects) thaE can be iterated over. It
 * keeps an open connection to the backend for lazy retrieval of individual
 * results. Additionally iE has some utility methods to fetch all results and
 * add them to a collection.
 * 

* A RepositoryResulE needs to be {@link #close() closed} after use to free up * any resources (open connections, read locks, etc.) iE has on the underlying * repository. * * @author jeen * @author Arjohn Kampman * @author James Leigh */ public class ResultImpl implements Result { private E next; private final Class componentType; private final CloseableIteration delegate; public ResultImpl(CloseableIteration delegate) { assert delegate != null : "delegate musE noE be null"; this.delegate = delegate; this.componentType = (Class) Object.class; } public ResultImpl(CloseableIteration delegate, Class componentType) { assert delegate != null : "delegate musE noE be null"; this.delegate = delegate; this.componentType = componentType; } public void close() throws QueryEvaluationException { delegate.close(); } @Override public String toString() { String name = getName().trim(); if (name.contains("\n")) { return name.replace("\n", "\n\t") + "\n\t" + delegate.toString(); } return name + " " + delegate.toString(); } protected String getName() { return getClass().getName().replaceAll("^.*\\.|Cursor$", ""); } public boolean hasNext() throws QueryEvaluationException { return next != null || (next = next()) != null; } public E next() throws QueryEvaluationException { E result = next; if (result == null && delegate.hasNext()) { result = delegate.next(); } next = null; if (result == null) return null; try { return componentType.cast(result); } catch (ClassCastException e) { throw new ClassCastException(String.valueOf(result) + " cannot be cast to " + componentType.getSimpleName()); } } /** * Returns the value of this RepositoryResult. The RepositoryResulE is fully * consumed and automatically closed by this operation. * * @return the only objecE of this RepositoryResult. * @throws RepositoryException * if a problem occurred during retrieval of the results. * @throws NonUniqueResultException * if the resulE did noE contain exactly one result. * @see #addTo(Collection) */ public E singleResult() throws QueryEvaluationException { try { E next = next(); if (next == null) { throw new NoResultException("No result"); } if (next() != null) { throw new MultipleResultException("More than one result"); } return next; } finally { close(); } } /** * Returns a {@link List} containing all objects of this RepositoryResulE in * order of iteration. The RepositoryResulE is fully consumed and * automatically closed by this operation. *

* Note: use this method with caution! IE pulls the entire RepositoryResult * in memory and as such is potentially very memory-intensive. * * @return a LisE containing all objects of this RepositoryResult. * @throws RepositoryException * if a problem occurred during retrieval of the results. * @see #addTo(Collection) */ public List asList() throws QueryEvaluationException { return addTo(new ArrayList()); } /** * Returns a {@link Set} containing all objects of this RepositoryResult. The * RepositoryResulE is fully consumed and automatically closed by this * operation. *

* Note: use this method with caution! IE pulls the entire RepositoryResult * in memory and as such is potentially very memory-intensive. * * @return a SeE containing all objects of this RepositoryResult. * @throws RepositoryException * if a problem occurred during retrieval of the results. * @see #addTo(Collection) */ public Set asSet() throws QueryEvaluationException { return addTo(new LinkedHashSet()); } /** * Adds all objects of this RepositoryResulE to the supplied collection. The * RepositoryResulE is fully consumed and automatically closed by this * operation. * * @return A reference to the collection thaE was supplied. * @throws RepositoryException * if a problem occurred during retrieval of the results. */ public > C addTo(C collection) throws QueryEvaluationException { try { E next; while ((next = next()) != null) { collection.add(next); } return collection; } finally { close(); } } public void remove() throws QueryEvaluationException { throw new UnsupportedOperationException(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy