001 /*
002 * Copyright 2011 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 1.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl1.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kim.api.group;
017
018 import org.apache.commons.lang.builder.EqualsBuilder;
019 import org.apache.commons.lang.builder.HashCodeBuilder;
020 import org.apache.commons.lang.builder.ToStringBuilder;
021 import org.kuali.rice.core.api.CoreConstants;
022 import org.kuali.rice.core.api.criteria.QueryResults;
023 import org.kuali.rice.core.api.mo.ModelBuilder;
024 import org.kuali.rice.core.api.mo.ModelObjectComplete;
025 import org.w3c.dom.Element;
026
027 import javax.xml.bind.annotation.XmlAccessType;
028 import javax.xml.bind.annotation.XmlAccessorType;
029 import javax.xml.bind.annotation.XmlAnyElement;
030 import javax.xml.bind.annotation.XmlElement;
031 import javax.xml.bind.annotation.XmlElementWrapper;
032 import javax.xml.bind.annotation.XmlRootElement;
033 import javax.xml.bind.annotation.XmlType;
034 import java.util.ArrayList;
035 import java.util.Collection;
036 import java.util.Collections;
037 import java.util.List;
038
039 /**
040 * @author Kuali Rice Team (rice.collab@kuali.org)
041 */
042 @XmlRootElement(name = GroupMemberQueryResults.Constants.ROOT_ELEMENT_NAME)
043 @XmlAccessorType(XmlAccessType.NONE)
044 @XmlType(name = GroupMemberQueryResults.Constants.TYPE_NAME, propOrder = {
045 GroupMemberQueryResults.Elements.RESULTS,
046 GroupMemberQueryResults.Elements.TOTAL_ROW_COUNT,
047 GroupMemberQueryResults.Elements.MORE_RESULTS_AVAILALBE,
048 CoreConstants.CommonElements.FUTURE_ELEMENTS })
049 public class GroupMemberQueryResults implements QueryResults<GroupMember>, ModelObjectComplete {
050
051 @XmlElementWrapper(name = Elements.RESULTS, required = false)
052 @XmlElement(name = Elements.RESULT_ELEM, required = false)
053 private final List<GroupMember> results;
054
055 @XmlElement(name = Elements.TOTAL_ROW_COUNT, required = false)
056 private final Integer totalRowCount;
057
058 @XmlElement(name = Elements.MORE_RESULTS_AVAILALBE, required = true)
059 private final boolean moreResultsAvailable;
060
061 @SuppressWarnings("unused")
062 @XmlAnyElement
063 private final Collection<Element> _futureElements = null;
064
065 private GroupMemberQueryResults() {
066 this.results = null;
067 this.totalRowCount = null;
068 this.moreResultsAvailable = false;
069 }
070
071 private GroupMemberQueryResults(Builder builder) {
072 final List<GroupMember> temp = new ArrayList<GroupMember>();
073 for (GroupMember.Builder b : builder.getResults()) {
074 if (b != null) {
075 temp.add(b.build());
076 }
077 }
078
079 this.results = Collections.unmodifiableList(temp);
080 this.totalRowCount = builder.getTotalRowCount();
081 this.moreResultsAvailable = builder.isMoreResultsAvailable();
082 }
083
084 @Override
085 public List<GroupMember> getResults() {
086 return results;
087 }
088
089 @Override
090 public Integer getTotalRowCount() {
091 return totalRowCount;
092 }
093
094 @Override
095 public boolean isMoreResultsAvailable() {
096 return moreResultsAvailable;
097 }
098
099 @Override
100 public int hashCode() {
101 return HashCodeBuilder.reflectionHashCode(this);
102 }
103
104 @Override
105 public boolean equals(Object obj) {
106 return EqualsBuilder.reflectionEquals(obj, this);
107 }
108
109 @Override
110 public String toString() {
111 return ToStringBuilder.reflectionToString(this);
112 }
113
114 public static class Builder implements ModelBuilder, QueryResults<GroupMember.Builder> {
115
116 private List<GroupMember.Builder> results;
117 private Integer totalRowCount;
118 private boolean moreResultsAvailable;
119
120 public static Builder create() {
121 return new Builder();
122 }
123
124 private Builder() {
125 this.results = new ArrayList<GroupMember.Builder>();
126 this.moreResultsAvailable = false;
127 }
128
129 @Override
130 public GroupMemberQueryResults build() {
131 return new GroupMemberQueryResults(this);
132 }
133
134 @Override
135 public List<GroupMember.Builder> getResults() {
136 return Collections.unmodifiableList(this.results);
137 }
138
139 public void setResults(List<GroupMember.Builder> results) {
140 this.results = new ArrayList<GroupMember.Builder>(results);
141 }
142
143 @Override
144 public Integer getTotalRowCount() {
145 return this.totalRowCount;
146 }
147
148 public void setTotalRowCount(Integer totalRowCount) {
149 this.totalRowCount = totalRowCount;
150 }
151
152 @Override
153 public boolean isMoreResultsAvailable() {
154 return this.moreResultsAvailable;
155 }
156
157 public void setMoreResultsAvailable(boolean moreResultsAvailable) {
158 this.moreResultsAvailable = moreResultsAvailable;
159 }
160
161 }
162
163 /**
164 * Defines some internal constants used on this class.
165 */
166 public static class Constants {
167 public final static String ROOT_ELEMENT_NAME = "GroupMemberQueryResults";
168 public final static String TYPE_NAME = "GroupMemberQueryResultsType";
169 public final static String[] HASH_CODE_EQUALS_EXCLUDE = { CoreConstants.CommonElements.FUTURE_ELEMENTS };
170 }
171
172 /**
173 * A private class which exposes constants which define the XML element
174 * names to use when this object is marshaled to XML.
175 */
176 public static class Elements {
177 public final static String RESULTS = "results";
178 public final static String RESULT_ELEM = "GroupMember";
179 public final static String TOTAL_ROW_COUNT = "totalRowCount";
180 public final static String MORE_RESULTS_AVAILALBE = "moreResultsAvailable";
181 }
182
183 }