View Javadoc

1   /**
2    * Copyright 2005-2012 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.role;
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.kuali.rice.kim.api.common.delegate.DelegateMember;
23  import org.w3c.dom.Element;
24  
25  import javax.xml.bind.annotation.XmlAccessType;
26  import javax.xml.bind.annotation.XmlAccessorType;
27  import javax.xml.bind.annotation.XmlAnyElement;
28  import javax.xml.bind.annotation.XmlElement;
29  import javax.xml.bind.annotation.XmlElementWrapper;
30  import javax.xml.bind.annotation.XmlRootElement;
31  import javax.xml.bind.annotation.XmlType;
32  import java.util.ArrayList;
33  import java.util.Collection;
34  import java.util.Collections;
35  import java.util.List;
36  
37  /**
38   * @author Kuali Rice Team (rice.collab@kuali.org)
39   */
40  @XmlRootElement(name = DelegateMemberQueryResults.Constants.ROOT_ELEMENT_NAME)
41  @XmlAccessorType(XmlAccessType.NONE)
42  @XmlType(name = DelegateMemberQueryResults.Constants.TYPE_NAME, propOrder = {
43  		DelegateMemberQueryResults.Elements.RESULTS,
44  		DelegateMemberQueryResults.Elements.TOTAL_ROW_COUNT,
45  		DelegateMemberQueryResults.Elements.MORE_RESULTS_AVAILALBE,
46  		CoreConstants.CommonElements.FUTURE_ELEMENTS })
47  public class DelegateMemberQueryResults extends AbstractDataTransferObject implements QueryResults<DelegateMember> {
48  
49  	@XmlElementWrapper(name = Elements.RESULTS, required = false)
50  	@XmlElement(name = Elements.RESULT_ELEM, required = false)
51  	private final List<DelegateMember> results;
52  
53  	@XmlElement(name = Elements.TOTAL_ROW_COUNT, required = false)
54  	private final Integer totalRowCount;
55  
56  	@XmlElement(name = Elements.MORE_RESULTS_AVAILALBE, required = true)
57  	private final boolean moreResultsAvailable;
58  
59  	@SuppressWarnings("unused")
60      @XmlAnyElement
61      private final Collection<Element> _futureElements = null;
62  
63  	private DelegateMemberQueryResults() {
64  		this.results = null;
65  		this.totalRowCount = null;
66  		this.moreResultsAvailable = false;
67  	}
68  
69  	private DelegateMemberQueryResults(Builder builder) {
70  		final List<DelegateMember> temp = new ArrayList<DelegateMember>();
71          for (DelegateMember.Builder b : builder.getResults()) {
72              if (b != null) {
73                  temp.add(b.build());
74              }
75          }
76  
77          this.results = Collections.unmodifiableList(temp);
78  		this.totalRowCount = builder.getTotalRowCount();
79  		this.moreResultsAvailable = builder.isMoreResultsAvailable();
80  	}
81  
82  	@Override
83  	public List<DelegateMember> getResults() {
84  		return results;
85  	}
86  	
87  	@Override
88  	public Integer getTotalRowCount() {
89  		return totalRowCount;
90  	}
91  
92  	@Override
93  	public boolean isMoreResultsAvailable() {
94  		return moreResultsAvailable;
95  	}
96  
97  	public static class Builder implements ModelBuilder, QueryResults<DelegateMember.Builder> {
98  
99  		private List<DelegateMember.Builder> results;
100 		private Integer totalRowCount;
101 		private boolean moreResultsAvailable;
102 
103         public static Builder create() {
104             return new Builder();
105         }
106 
107 		private Builder() {
108 			this.results = new ArrayList<DelegateMember.Builder>();
109 			this.moreResultsAvailable = false;
110 		}
111 
112         @Override
113 		public DelegateMemberQueryResults build() {
114 			return new DelegateMemberQueryResults(this);
115 		}
116 
117         @Override
118 		public List<DelegateMember.Builder> getResults() {
119 			return Collections.unmodifiableList(this.results);
120 		}
121 
122 		public void setResults(List<DelegateMember.Builder> results) {
123 			this.results = new ArrayList<DelegateMember.Builder>(results);
124 		}
125 
126         @Override
127 		public Integer getTotalRowCount() {
128 			return this.totalRowCount;
129 		}
130 
131 		public void setTotalRowCount(Integer totalRowCount) {
132 			this.totalRowCount = totalRowCount;
133 		}
134 
135         @Override
136 		public boolean isMoreResultsAvailable() {
137 			return this.moreResultsAvailable;
138 		}
139 
140 		public void setMoreResultsAvailable(boolean moreResultsAvailable) {
141 			this.moreResultsAvailable = moreResultsAvailable;
142 		}
143 		
144 	}
145 	
146 	/**
147 	 * Defines some internal constants used on this class.
148 	 */
149 	public static class Constants {
150 		public final static String ROOT_ELEMENT_NAME = "delegateMemberQueryResults";
151 		public final static String TYPE_NAME = "DelegateMemberQueryResultsType";
152 	}
153 
154 	/**
155 	 * A private class which exposes constants which define the XML element
156 	 * names to use when this object is marshaled to XML.
157 	 */
158 	public static class Elements {
159 		public final static String RESULTS = "results";
160 		public final static String RESULT_ELEM = "delegateMember";
161 		public final static String TOTAL_ROW_COUNT = "totalRowCount";
162 		public final static String MORE_RESULTS_AVAILALBE = "moreResultsAvailable";
163 	}
164 	
165 }