001 /*
002 * Copyright 2011-2012 UnboundID Corp.
003 *
004 * This program is free software; you can redistribute it and/or modify
005 * it under the terms of the GNU General Public License (GPLv2 only)
006 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
007 * as published by the Free Software Foundation.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, see <http://www.gnu.org/licenses>.
016 */
017
018 package com.unboundid.scim.sdk;
019
020 import com.unboundid.scim.data.BaseResource;
021 import com.unboundid.scim.marshal.Marshaller;
022
023 import java.io.OutputStream;
024 import java.util.Iterator;
025 import java.util.List;
026
027 /**
028 * Represents a list of SCIM resources returned by the service provider from
029 * a query/listing request.
030 */
031 public class Resources<R extends BaseResource> implements Iterable<R>,
032 SCIMResponse
033 {
034 private final int totalResults;
035 private final int startIndex;
036 private final List<R> resourceList;
037
038 /**
039 * Create a new resources response from the provided list. The number of
040 * total results will be set to the size of the list and the default value of
041 * 1 for start index.
042 *
043 * @param resourceList The list of resources to create the response from.
044 */
045 public Resources(final List<R> resourceList)
046 {
047 this(resourceList, resourceList.size(), 1);
048 }
049
050 /**
051 * Create a new resources response from the provided list.
052 *
053 * @param resourceList The list of resources to create the response from.
054 * @param totalResults The total number of results matching the Consumer query
055 * @param startIndex The 1-based index of the first result in the current set
056 * of search results
057 */
058 public Resources(final List<R> resourceList, final int totalResults,
059 final int startIndex)
060 {
061 this.totalResults = totalResults;
062 this.startIndex = startIndex;
063 this.resourceList = resourceList;
064 }
065
066 /**
067 * Retrieves the 1-based index of the first result in the current set of
068 * search results.
069 *
070 * @return The 1-based index of the first result in the current set of
071 * search results.
072 */
073 public long getStartIndex()
074 {
075 return startIndex;
076 }
077
078 /**
079 * Retrieves the total number of results matching the Consumer query.
080 *
081 * @return The total number of results matching the Consumer query.
082 */
083 public long getTotalResults()
084 {
085 return totalResults;
086 }
087
088 /**
089 * Retrieves the number of search results returned in this query response.
090 *
091 * @return The number of search results returned in this query response.
092 */
093 public int getItemsPerPage()
094 {
095 return resourceList.size();
096 }
097
098 /**
099 * {@inheritDoc}
100 */
101 public Iterator<R> iterator() {
102 return resourceList.iterator();
103 }
104
105 /**
106 * {@inheritDoc}
107 */
108 public void marshal(final Marshaller marshaller,
109 final OutputStream outputStream)
110 throws Exception
111 {
112 marshaller.marshal(this, outputStream);
113 }
114 }