1 /*
2 * Copyright (c) 2007, James Leigh All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * - Redistributions of source code must retain the above copyright notice, this
8 * list of conditions and the following disclaimer.
9 * - Redistributions in binary form must reproduce the above copyright notice,
10 * this list of conditions and the following disclaimer in the documentation
11 * and/or other materials provided with the distribution.
12 * - Neither the name of the openrdf.org nor the names of its contributors may
13 * be used to endorse or promote products derived from this software without
14 * specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29 package org.openrdf.elmo.sesame;
30
31 import java.util.List;
32
33 import org.openrdf.elmo.sesame.iterators.ElmoIteration;
34 import org.openrdf.query.Binding;
35 import org.openrdf.query.BindingSet;
36 import org.openrdf.query.TupleQueryResult;
37
38 /**
39 * Converts the repository result into a single Bean.
40 *
41 * @author James Leigh
42 *
43 */
44 public class ElmoSingleQueryResult extends ElmoIteration<BindingSet, Object> {
45
46 private List<String> bindings;
47
48 private SesameManager manager;
49
50 private int maxResults;
51
52 private int position;
53
54 public ElmoSingleQueryResult(SesameManager manager, TupleQueryResult result, int maxResults) {
55 super(result);
56 bindings = result.getBindingNames();
57 this.manager = manager;
58 this.maxResults = maxResults;
59 }
60
61 @Override
62 protected Object convert(BindingSet sol) {
63 Binding binding = sol.getBinding(bindings.get(0));
64 return manager.getInstance(binding.getValue());
65 }
66
67 @Override
68 public boolean hasNext() {
69 if (maxResults > 0 && position >= maxResults) {
70 close();
71 return false;
72 }
73 return super.hasNext();
74 }
75
76 @Override
77 public Object next() {
78 try {
79 position++;
80 return super.next();
81 } finally {
82 if (maxResults > 0 && position >= maxResults) {
83 close();
84 }
85 }
86 }
87
88 }