001    /*
002     * Copyright 2009 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.student.common.dto;
017    
018    import java.io.Serializable;
019    import java.util.ArrayList;
020    import java.util.Collections;
021    import java.util.List;
022    
023    import javax.xml.bind.annotation.XmlAccessType;
024    import javax.xml.bind.annotation.XmlAccessorType;
025    import javax.xml.bind.annotation.XmlAnyElement;
026    import javax.xml.bind.annotation.XmlElement;
027    import javax.xml.bind.annotation.XmlElementWrapper;
028    import javax.xml.bind.annotation.XmlType;
029    
030    import org.kuali.student.common.infc.Comparison;
031    import org.kuali.student.common.infc.Criteria;
032    import org.kuali.student.common.infc.ModelBuilder;
033    import org.w3c.dom.Element;
034    
035    /**
036     * Query to return some information regarding LUI to person relationships.
037     *
038     * @Author KSContractMojo
039     * @Author Kamal
040     * @Since Tue Mar 01 15:54:06 PST 2011
041     * @See <a href="https://wiki.kuali.org/display/KULSTU/luiPersonRelationCriteria+Structure">LuiPersonRelationCriteria</a>
042     */
043    @XmlAccessorType(XmlAccessType.FIELD)
044    @XmlType(name = "CriteriaInfo", propOrder = {"comparisons", "maxResults", "_futureElements"})
045    public class CriteriaInfo implements Criteria, Serializable {
046    
047        private static final long serialVersionUID = 1L;
048        
049        @XmlElementWrapper(name="comparisons")
050        @XmlElement(name="comparison")
051        private final List<ComparisonInfo> comparisons;
052        @XmlElement
053        private final Integer maxResults;
054        @XmlAnyElement
055        private final List<Element> _futureElements;
056        
057        private CriteriaInfo() {
058            comparisons = null;
059            maxResults = null;
060            _futureElements = null;
061        }
062    
063        @Override
064        public List<ComparisonInfo> getComparisons() {
065            return this.comparisons;
066        }
067    
068        @Override
069        public Integer getMaxResults() {
070            return this.maxResults;
071        }
072    
073        private CriteriaInfo(Criteria builder) {
074            if (builder.getComparisons() == null) {
075                this.comparisons = null;
076            } else {
077                List<ComparisonInfo> list = new ArrayList(builder.getComparisons().size());
078                for (Comparison infc : builder.getComparisons()) {
079                    list.add(new ComparisonInfo.Builder(infc).build());
080                }
081                this.comparisons = Collections.unmodifiableList(list);
082            }
083            this.maxResults = builder.getMaxResults();
084            this._futureElements = null;
085        }
086    
087        public static class Builder implements ModelBuilder<CriteriaInfo>, Criteria {
088    
089            private List<? extends Comparison> comparisons;
090            private Integer maxResults;
091    
092            public Builder() {
093            }
094    
095            public Builder(Criteria info) {
096                this.comparisons = info.getComparisons();
097                this.maxResults = info.getMaxResults();
098            }
099    
100            public CriteriaInfo build() {
101                return new CriteriaInfo(this);
102            }
103    
104            @Override
105            public List<? extends Comparison> getComparisons() {
106                return this.comparisons;
107            }
108    
109            @Override
110            public Integer getMaxResults() {
111                return this.maxResults;
112            }
113    
114            public void setComparisons(List<? extends Comparison> comparisons) {
115                this.comparisons = comparisons;
116            }
117    
118            public void setMaxResults(Integer maxResults) {
119                this.maxResults = maxResults;
120            }
121        }
122    }