001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.location.impl.campus;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.core.api.criteria.CriteriaLookupService;
020import org.kuali.rice.core.api.criteria.GenericQueryResults;
021import org.kuali.rice.core.api.criteria.LookupCustomizer;
022import org.kuali.rice.core.api.criteria.QueryByCriteria;
023import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
024import org.kuali.rice.kim.api.group.GroupQueryResults;
025import org.kuali.rice.krad.service.BusinessObjectService;
026import org.kuali.rice.location.api.campus.Campus;
027import org.kuali.rice.location.api.campus.CampusQueryResults;
028import org.kuali.rice.location.api.campus.CampusService;
029import org.kuali.rice.location.api.campus.CampusType;
030import org.kuali.rice.location.api.campus.CampusTypeQueryResults;
031
032import javax.jws.WebParam;
033import java.util.ArrayList;
034import java.util.Collections;
035import java.util.List;
036
037import static java.util.Collections.singletonMap;
038
039public class CampusServiceImpl implements CampusService {
040
041        private BusinessObjectService boService;
042    private CriteriaLookupService criteriaLookupService;
043        
044        /**
045     * @see org.kuali.rice.location.api.campus.CampusService#getCampus(String code)
046     */
047        @Override
048        public Campus getCampus(String code) {
049                if (StringUtils.isBlank(code)) {
050            throw new RiceIllegalArgumentException("code is blank");
051        }
052
053        CampusBo campusBo = boService.findByPrimaryKey(CampusBo.class, singletonMap("code", code));
054
055        return CampusBo.to(campusBo);
056        }
057
058        /**
059     * @see org.kuali.rice.location.api.campus.CampusService#findAllCampuses
060     */
061        @Override
062        public List<Campus> findAllCampuses() {
063                List<CampusBo> campusBos = (List<CampusBo>) boService.findMatching(CampusBo.class, singletonMap("active", "true"));
064
065        return this.convertListOfCampusBosToImmutables(campusBos);
066        }
067
068        /**
069     * @see org.kuali.rice.location.api.campus.CampusService#getCampusType(String code)
070     */
071        @Override
072        public CampusType getCampusType(String code) {
073                if (StringUtils.isBlank(code)) {
074            throw new RiceIllegalArgumentException("code is blank");
075        }
076
077                CampusTypeBo campusTypeBo = boService.findByPrimaryKey(CampusTypeBo.class, singletonMap("code", code));
078
079        return CampusTypeBo.to(campusTypeBo);
080        }
081
082        /**
083     * @see org.kuali.rice.location.api.campus.CampusService#findAllCampusTypes
084     */
085        @Override
086        public List<CampusType> findAllCampusTypes() {
087                List<CampusTypeBo> campusTypeBos = (List<CampusTypeBo>)boService.findMatching(CampusTypeBo.class, singletonMap("active", "true"));
088                return this.convertListOfCampusTypesBosToImmutables(campusTypeBos);
089        }
090
091    @Override
092    public CampusQueryResults findCampuses(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException {
093        incomingParamCheck(queryByCriteria, "queryByCriteria");
094
095        GenericQueryResults<CampusBo> results = criteriaLookupService.lookup(CampusBo.class, queryByCriteria);
096
097        CampusQueryResults.Builder builder = CampusQueryResults.Builder.create();
098        builder.setMoreResultsAvailable(results.isMoreResultsAvailable());
099        builder.setTotalRowCount(results.getTotalRowCount());
100
101        final List<Campus.Builder> ims = new ArrayList<Campus.Builder>();
102        for (CampusBo bo : results.getResults()) {
103            ims.add(Campus.Builder.create(bo));
104        }
105
106        builder.setResults(ims);
107        return builder.build();
108    }
109
110    @Override
111    public CampusTypeQueryResults findCampusTypes(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException {
112        incomingParamCheck(queryByCriteria, "query");
113
114        GenericQueryResults<CampusTypeBo> results = criteriaLookupService.lookup(CampusTypeBo.class, queryByCriteria);
115
116        CampusTypeQueryResults.Builder builder = CampusTypeQueryResults.Builder.create();
117        builder.setMoreResultsAvailable(results.isMoreResultsAvailable());
118        builder.setTotalRowCount(results.getTotalRowCount());
119
120        final List<CampusType.Builder> ims = new ArrayList<CampusType.Builder>();
121        for (CampusTypeBo bo : results.getResults()) {
122            ims.add(CampusType.Builder.create(bo));
123        }
124
125        builder.setResults(ims);
126        return builder.build();
127    }
128
129    public void setBusinessObjectService(BusinessObjectService boService) {
130        this.boService = boService;
131    }
132
133    private List<Campus> convertListOfCampusBosToImmutables(List<CampusBo> campusBos) {
134        ArrayList<Campus> campuses = new ArrayList<Campus>();
135        for (CampusBo bo : campusBos) {
136            Campus campus = CampusBo.to(bo);
137            campuses.add(campus) ;
138        }
139        return Collections.unmodifiableList(campuses);
140    }
141    
142    private List<CampusType> convertListOfCampusTypesBosToImmutables(List<CampusTypeBo> campusTypeBos) {
143        ArrayList<CampusType> campusTypes = new ArrayList<CampusType>();
144        for (CampusTypeBo bo : campusTypeBos) {
145            CampusType campusType = CampusTypeBo.to(bo);
146            campusTypes.add(campusType) ;
147        }
148        return Collections.unmodifiableList(campusTypes);
149    }
150
151    private void incomingParamCheck(Object object, String name) {
152        if (object == null) {
153            throw new RiceIllegalArgumentException(name + " was null");
154        } else if (object instanceof String
155                && StringUtils.isBlank((String) object)) {
156            throw new RiceIllegalArgumentException(name + " was blank");
157        }
158    }
159
160    /**
161     * Sets the criteriaLookupService attribute value.
162     *
163     * @param criteriaLookupService The criteriaLookupService to set.
164     */
165    public void setCriteriaLookupService(final CriteriaLookupService criteriaLookupService) {
166        this.criteriaLookupService = criteriaLookupService;
167    }
168}