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 }