View Javadoc
1   /**
2    * Copyright 2005-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kim.api.group;
17  
18  import org.kuali.rice.core.api.CoreConstants;
19  import org.kuali.rice.core.api.criteria.QueryResults;
20  import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
21  import org.kuali.rice.core.api.mo.ModelBuilder;
22  import org.w3c.dom.Element;
23  
24  import javax.xml.bind.annotation.XmlAccessType;
25  import javax.xml.bind.annotation.XmlAccessorType;
26  import javax.xml.bind.annotation.XmlAnyElement;
27  import javax.xml.bind.annotation.XmlElement;
28  import javax.xml.bind.annotation.XmlElementWrapper;
29  import javax.xml.bind.annotation.XmlRootElement;
30  import javax.xml.bind.annotation.XmlType;
31  import java.util.ArrayList;
32  import java.util.Collection;
33  import java.util.Collections;
34  import java.util.List;
35  
36  /**
37   * @author Kuali Rice Team (rice.collab@kuali.org)
38   */
39  @XmlRootElement(name = GroupQueryResults.Constants.ROOT_ELEMENT_NAME)
40  @XmlAccessorType(XmlAccessType.NONE)
41  @XmlType(name = GroupQueryResults.Constants.TYPE_NAME, propOrder = {
42  		GroupQueryResults.Elements.RESULTS,
43  		GroupQueryResults.Elements.TOTAL_ROW_COUNT,
44  		GroupQueryResults.Elements.MORE_RESULTS_AVAILALBE,
45  		CoreConstants.CommonElements.FUTURE_ELEMENTS })
46  public class GroupQueryResults extends AbstractDataTransferObject implements QueryResults<Group> {
47  
48  	@XmlElementWrapper(name = Elements.RESULTS, required = false)
49  	@XmlElement(name = Elements.RESULT_ELEM, required = false)
50  	private final List<Group> results;
51  
52  	@XmlElement(name = Elements.TOTAL_ROW_COUNT, required = false)
53  	private final Integer totalRowCount;
54  
55  	@XmlElement(name = Elements.MORE_RESULTS_AVAILALBE, required = true)
56  	private final boolean moreResultsAvailable;
57  
58  	@SuppressWarnings("unused")
59      @XmlAnyElement
60      private final Collection<Element> _futureElements = null;
61  
62  	private GroupQueryResults() {
63  		this.results = null;
64  		this.totalRowCount = null;
65  		this.moreResultsAvailable = false;
66  	}
67  
68  	private GroupQueryResults(Builder builder) {
69  		final List<Group> temp = new ArrayList<Group>();
70          for (Group.Builder b : builder.getResults()) {
71              if (b != null) {
72                  temp.add(b.build());
73              }
74          }
75  
76          this.results = Collections.unmodifiableList(temp);
77  		this.totalRowCount = builder.getTotalRowCount();
78  		this.moreResultsAvailable = builder.isMoreResultsAvailable();
79  	}
80  
81  	@Override
82  	public List<Group> getResults() {
83  		return results;
84  	}
85  	
86  	@Override
87  	public Integer getTotalRowCount() {
88  		return totalRowCount;
89  	}
90  
91  	@Override
92  	public boolean isMoreResultsAvailable() {
93  		return moreResultsAvailable;
94  	}
95  
96  	public static class Builder implements ModelBuilder, QueryResults<Group.Builder> {
97  
98  		private List<Group.Builder> results;
99  		private Integer totalRowCount;
100 		private boolean moreResultsAvailable;
101 
102         public static Builder create() {
103             return new Builder();
104         }
105 
106 		private Builder() {
107 			this.results = new ArrayList<Group.Builder>();
108 			this.moreResultsAvailable = false;
109 		}
110 
111         @Override
112 		public GroupQueryResults build() {
113 			return new GroupQueryResults(this);
114 		}
115 
116         @Override
117 		public List<Group.Builder> getResults() {
118 			return Collections.unmodifiableList(this.results);
119 		}
120 
121 		public void setResults(List<Group.Builder> results) {
122 			this.results = new ArrayList<Group.Builder>(results);
123 		}
124 
125         @Override
126 		public Integer getTotalRowCount() {
127 			return this.totalRowCount;
128 		}
129 
130 		public void setTotalRowCount(Integer totalRowCount) {
131 			this.totalRowCount = totalRowCount;
132 		}
133 
134         @Override
135 		public boolean isMoreResultsAvailable() {
136 			return this.moreResultsAvailable;
137 		}
138 
139 		public void setMoreResultsAvailable(boolean moreResultsAvailable) {
140 			this.moreResultsAvailable = moreResultsAvailable;
141 		}
142 		
143 	}
144 	
145 	/**
146 	 * Defines some internal constants used on this class.
147 	 */
148 	public static class Constants {
149 		public final static String ROOT_ELEMENT_NAME = "GroupQueryResults";
150 		public final static String TYPE_NAME = "GroupQueryResultsType";
151 	}
152 
153 	/**
154 	 * A private class which exposes constants which define the XML element
155 	 * names to use when this object is marshaled to XML.
156 	 */
157 	public static class Elements {
158 		public final static String RESULTS = "results";
159 		public final static String RESULT_ELEM = "Group";
160 		public final static String TOTAL_ROW_COUNT = "totalRowCount";
161 		public final static String MORE_RESULTS_AVAILALBE = "moreResultsAvailable";
162 	}
163 	
164 }