/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.stanbol.entityhub.core.query; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.apache.stanbol.entityhub.servicesapi.query.FieldQuery; import org.apache.stanbol.entityhub.servicesapi.query.QueryResultList; public class QueryResultListImpl<T> implements Iterable<T>, QueryResultList<T>{ private final Collection<T> results; private final FieldQuery query; private Class<T> type; /** * Constructs an QueryResultList by iterating over all elements in the parsed * {@link Iterator} and storing all elements that are NOT <code>null</code>. * @param query The query uses to select the results * @param resultIterator The Iterator containing the results of the Query * @throws IllegalArgumentException if the parsed {@link FieldQuery} is <code>null</code> */ public QueryResultListImpl(FieldQuery query,Iterator<T> resultIterator,Class<T> type) throws IllegalArgumentException { // if(query == null){ // throw new IllegalArgumentException("Query MUST NOT be NULL"); // } this.query = query; if(type == null){ throw new IllegalArgumentException("The type of the results MUST NOT be NULL"); } this.type = type; if(resultIterator == null || !resultIterator.hasNext()){ this.results = Collections.emptyList(); } else { List<T> resultList = new ArrayList<T>(); while(resultIterator.hasNext()){ resultList.add(resultIterator.next()); } this.results = Collections.unmodifiableList(resultList); } } @Override public final Class<T> getType(){ return type; } /** * Constructs an QueryResultList with the parsed Query and Results * @param query The query uses to select the results * @param results The results of the query * @throws IllegalArgumentException if the parsed {@link FieldQuery} is <code>null</code> */ public QueryResultListImpl(FieldQuery query,Collection<T> results,Class<T> type) throws IllegalArgumentException { // if(query == null){ // throw new IllegalArgumentException("Query MUST NOT be NULL"); // } this.query = query; if(type == null){ throw new IllegalArgumentException("The type of the results MUST NOT be NULL"); } this.type = type; if(results == null){ this.results = Collections.emptyList(); } else { this.results = Collections.unmodifiableCollection(results); } } /* (non-Javadoc) * @see org.apache.stanbol.entityhub.core.query.ResultList#getQuery() */ @Override public final FieldQuery getQuery(){ return query; } /* (non-Javadoc) * @see org.apache.stanbol.entityhub.core.query.ResultList#getSelectedFields() */ @Override public final Set<String> getSelectedFields(){ return query.getSelectedFields(); } /* (non-Javadoc) * @see org.apache.stanbol.entityhub.core.query.ResultList#iterator() */ @Override public final Iterator<T> iterator() { return results.iterator(); } @Override public Collection<T> results() { return results; } /* (non-Javadoc) * @see org.apache.stanbol.entityhub.core.query.ResultList#isEmpty() */ public final boolean isEmpty() { return results.isEmpty(); } /* (non-Javadoc) * @see org.apache.stanbol.entityhub.core.query.ResultList#size() */ public final int size() { return results.size(); //not supported :( } }