001    package org.kuali.student.enrollment.class1.lu.termresolver;
002    
003    import org.kuali.rice.krms.api.engine.TermResolutionException;
004    import org.kuali.rice.krms.api.engine.TermResolver;
005    
006    import org.kuali.student.common.util.krms.RulesExecutionConstants;
007    import org.kuali.student.r2.common.dto.ContextInfo;
008    import org.kuali.student.r2.lum.clu.service.CluService;
009    
010    import javax.annotation.Resource;
011    import java.util.Collection;
012    import java.util.Collections;
013    import java.util.List;
014    import java.util.Map;
015    import java.util.Set;
016    import org.kuali.student.r2.common.exceptions.DoesNotExistException;
017    import org.kuali.student.r2.common.exceptions.InvalidParameterException;
018    import org.kuali.student.r2.common.exceptions.MissingParameterException;
019    import org.kuali.student.r2.common.exceptions.OperationFailedException;
020    import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
021    
022    public class CourseSetResolver implements TermResolver<Collection<String>> {
023    
024        @Resource
025        private CluService cluService;
026    
027        @Override
028        public Set<String> getPrerequisites() {
029            return Collections.singleton(RulesExecutionConstants.CONTEXT_INFO_TERM_NAME);
030        }
031    
032        @Override
033        public String getOutput() {
034            return RulesExecutionConstants.COURSE_SET_TERM_NAME;
035        }
036    
037        @Override
038        public Set<String> getParameterNames() {
039            return Collections.singleton(RulesExecutionConstants.COURSE_SET_ID_TERM_PROPERTY);
040        }
041    
042        @Override
043        public int getCost() {
044            // TODO analyze for a relevant cost
045            return 0;
046        }
047    
048        @Override
049        public Collection<String> resolve(Map<String, Object> resolvedPrereqs, Map<String, String> parameters) throws TermResolutionException {
050            String courseSetId = parameters.get(RulesExecutionConstants.COURSE_SET_ID_TERM_PROPERTY);
051            ContextInfo context = (ContextInfo) resolvedPrereqs.get(RulesExecutionConstants.CONTEXT_INFO_TERM_NAME);
052            
053            if(courseSetId == null) {
054                throw new TermResolutionException("No parameter found with name: " + RulesExecutionConstants.COURSE_SET_ID_TERM_PROPERTY, this, parameters);
055            }
056    
057            List<String> results = null;
058            try {
059                results = cluService.getCluIdsFromCluSet(courseSetId, context);
060            } catch (DoesNotExistException e) {
061                throw new TermResolutionException("", this, parameters, e);
062            } catch (InvalidParameterException e) {
063                throw new TermResolutionException("", this, parameters, e);
064            } catch (MissingParameterException e) {
065                throw new TermResolutionException("", this, parameters, e);
066            } catch (OperationFailedException e) {
067                throw new TermResolutionException("", this, parameters, e);
068            } catch (PermissionDeniedException e) {
069                throw new TermResolutionException("", this, parameters, e);
070            }
071    
072            return results;
073            
074        }
075    
076    }