001 /**
002 * Copyright 2005-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.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/ecl2.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.location.api.county;
017
018 import org.kuali.rice.core.api.CoreConstants;
019 import org.kuali.rice.core.api.criteria.QueryResults;
020 import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
021 import org.kuali.rice.core.api.mo.ModelBuilder;
022 import org.kuali.rice.location.api.country.Country;
023 import org.w3c.dom.Element;
024
025 import javax.xml.bind.annotation.XmlAccessType;
026 import javax.xml.bind.annotation.XmlAccessorType;
027 import javax.xml.bind.annotation.XmlAnyElement;
028 import javax.xml.bind.annotation.XmlElement;
029 import javax.xml.bind.annotation.XmlElementWrapper;
030 import javax.xml.bind.annotation.XmlRootElement;
031 import javax.xml.bind.annotation.XmlType;
032 import java.util.ArrayList;
033 import java.util.Collection;
034 import java.util.Collections;
035 import java.util.List;
036
037 /**
038 * @author Kuali Rice Team (rice.collab@kuali.org)
039 */
040 @XmlRootElement(name = CountyQueryResults.Constants.ROOT_ELEMENT_NAME)
041 @XmlAccessorType(XmlAccessType.NONE)
042 @XmlType(name = CountyQueryResults.Constants.TYPE_NAME, propOrder = {
043 CountyQueryResults.Elements.RESULTS,
044 CountyQueryResults.Elements.TOTAL_ROW_COUNT,
045 CountyQueryResults.Elements.MORE_RESULTS_AVAILALBE,
046 CoreConstants.CommonElements.FUTURE_ELEMENTS })
047 public class CountyQueryResults extends AbstractDataTransferObject implements QueryResults<County> {
048
049 @XmlElementWrapper(name = Elements.RESULTS, required = false)
050 @XmlElement(name = Elements.RESULT_ELEM, required = false)
051 private final List<County> results;
052
053 @XmlElement(name = Elements.TOTAL_ROW_COUNT, required = false)
054 private final Integer totalRowCount;
055
056 @XmlElement(name = Elements.MORE_RESULTS_AVAILALBE, required = true)
057 private final boolean moreResultsAvailable;
058
059 @SuppressWarnings("unused")
060 @XmlAnyElement
061 private final Collection<Element> _futureElements = null;
062
063 private CountyQueryResults() {
064 this.results = null;
065 this.totalRowCount = null;
066 this.moreResultsAvailable = false;
067 }
068
069 private CountyQueryResults(Builder builder) {
070 final List<County> temp = new ArrayList<County>();
071 for (County.Builder b : builder.getResults()) {
072 if (b != null) {
073 temp.add(b.build());
074 }
075 }
076
077 this.results = Collections.unmodifiableList(temp);
078 this.totalRowCount = builder.getTotalRowCount();
079 this.moreResultsAvailable = builder.isMoreResultsAvailable();
080 }
081
082 @Override
083 public List<County> getResults() {
084 return results;
085 }
086
087 @Override
088 public Integer getTotalRowCount() {
089 return totalRowCount;
090 }
091
092 @Override
093 public boolean isMoreResultsAvailable() {
094 return moreResultsAvailable;
095 }
096
097 public static class Builder implements ModelBuilder, QueryResults<County.Builder> {
098
099 private List<County.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<County.Builder>();
109 this.moreResultsAvailable = false;
110 }
111
112 @Override
113 public CountyQueryResults build() {
114 return new CountyQueryResults(this);
115 }
116
117 @Override
118 public List<County.Builder> getResults() {
119 return Collections.unmodifiableList(this.results);
120 }
121
122 public void setResults(List<County.Builder> results) {
123 this.results = new ArrayList<County.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 = "CountyQueryResults";
151 public final static String TYPE_NAME = "CountyQueryResultsType";
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 = "County";
161 public final static String TOTAL_ROW_COUNT = "totalRowCount";
162 public final static String MORE_RESULTS_AVAILALBE = "moreResultsAvailable";
163 }
164
165 }