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