001    /*
002     * Copyright 2012 The Kuali Foundation
003     *
004     * Licensed under the the Educational Community License, Version 1.0
005     * (the "License"); you may not use this file except in compliance
006     * with the License.  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.enrollment.class2.courseoffering.service.impl;
017    
018    import java.util.ArrayList;
019    import java.util.Date;
020    import java.util.HashMap;
021    import java.util.List;
022    import java.util.Map;
023    
024    import javax.annotation.Resource;
025    
026    import org.joda.time.DateTime;
027    import org.kuali.student.common.test.mock.data.AbstractMockServicesAwareDataLoader;
028    import org.kuali.student.common.test.spring.log4j.KSLog4JConfigurer;
029    import org.kuali.student.enrollment.class2.acal.util.AcalTestDataLoader;
030    import org.kuali.student.enrollment.class2.courseoffering.service.CourseOfferingCodeGenerator;
031    import org.kuali.student.enrollment.class2.courseoffering.service.transformer.RegistrationGroupCodeGeneratorFactory;
032    import org.kuali.student.enrollment.courseoffering.dto.ActivityOfferingClusterInfo;
033    import org.kuali.student.enrollment.courseoffering.dto.ActivityOfferingInfo;
034    import org.kuali.student.enrollment.courseoffering.dto.ActivityOfferingSetInfo;
035    import org.kuali.student.enrollment.courseoffering.dto.CourseOfferingInfo;
036    import org.kuali.student.enrollment.courseoffering.dto.FormatOfferingInfo;
037    import org.kuali.student.enrollment.courseoffering.dto.OfferingInstructorInfo;
038    import org.kuali.student.enrollment.courseoffering.service.CourseOfferingService;
039    import org.kuali.student.r2.common.assembler.AssemblyException;
040    import org.kuali.student.r2.common.dto.BulkStatusInfo;
041    import org.kuali.student.r2.common.dto.ContextInfo;
042    import org.kuali.student.r2.common.dto.DtoConstants;
043    import org.kuali.student.r2.common.dto.RichTextInfo;
044    import org.kuali.student.r2.common.exceptions.AlreadyExistsException;
045    import org.kuali.student.r2.common.exceptions.CircularRelationshipException;
046    import org.kuali.student.r2.common.exceptions.DataValidationErrorException;
047    import org.kuali.student.r2.common.exceptions.DependentObjectsExistException;
048    import org.kuali.student.r2.common.exceptions.DoesNotExistException;
049    import org.kuali.student.r2.common.exceptions.InvalidParameterException;
050    import org.kuali.student.r2.common.exceptions.MissingParameterException;
051    import org.kuali.student.r2.common.exceptions.OperationFailedException;
052    import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
053    import org.kuali.student.r2.common.exceptions.ReadOnlyException;
054    import org.kuali.student.r2.common.exceptions.UnsupportedActionException;
055    import org.kuali.student.r2.common.exceptions.VersionMismatchException;
056    import org.kuali.student.r2.common.util.RichTextHelper;
057    import org.kuali.student.r2.common.util.constants.CourseOfferingServiceConstants;
058    import org.kuali.student.r2.common.util.constants.LuServiceConstants;
059    import org.kuali.student.r2.common.util.constants.LuiServiceConstants;
060    import org.kuali.student.r2.common.util.date.DateFormatters;
061    import org.kuali.student.r2.core.acal.dto.TermInfo;
062    import org.kuali.student.r2.core.acal.service.AcademicCalendarService;
063    import org.kuali.student.r2.core.acal.service.TermCodeGenerator;
064    import org.kuali.student.r2.core.acal.service.assembler.TermAssembler;
065    import org.kuali.student.r2.core.acal.service.impl.TermCodeGeneratorImpl;
066    import org.kuali.student.r2.core.atp.dto.AtpInfo;
067    import org.kuali.student.r2.core.atp.service.AtpService;
068    import org.kuali.student.r2.core.constants.AtpServiceConstants;
069    import org.kuali.student.r2.lum.course.dto.ActivityInfo;
070    import org.kuali.student.r2.lum.course.dto.CourseInfo;
071    import org.kuali.student.r2.lum.course.dto.FormatInfo;
072    import org.kuali.student.r2.lum.course.service.CourseService;
073    import org.kuali.student.r2.lum.lrc.dto.ResultValuesGroupInfo;
074    import org.kuali.student.r2.lum.util.constants.LrcServiceConstants;
075    import org.slf4j.Logger;
076    
077    
078    /**
079     * This class is expected to be configured as a spring bean in order to have the resources loaded.
080     * <p/>
081     * The {@link org.kuali.student.common.test.TestAwareDataLoader}  api is used by the TestCourseOfferingServiceMockImpl to coordinate the data clear and load operations.
082     * <p/>
083     * The data modeled here probably should have come from this picture in the CourseOfferingService documentation :
084     * <p/>
085     * <a href="https://wiki.kuali.org/display/STUDENT/KS+ENR+HLDS+-+Seat+Pools+-+Reg+Groups#KSENRHLDS-SeatPools-RegGroups-DiagramofSeatPoolandRegGroupExamples">Documentation</a>
086     * <p/>
087     * We also define some methods that can be used to insert specific kinds of data into various spots for each example CourseOffering.
088     *
089     * @author Kuali Student Team
090     */
091    public class CourseOfferingServiceTestDataLoader extends AbstractMockServicesAwareDataLoader {
092    
093        private static final Logger log = KSLog4JConfigurer.getLogger(CourseOfferingServiceTestDataLoader.class);
094        
095        public static final String CHEM123_COURSE_ID = "CLU-1";
096        
097        public static final String CHEM123_COURSE_OFFERING_ID = "CO-1";
098        
099        public static final String CHEM123_LEC_AND_LAB_FORMAT_OFFERING_ID = "CO-1:LEC-AND-LAB";
100        
101        public static final String ENG101_COURSE_ID = "CLU-2";
102        
103        public static final String ENG101_COURSE_OFFERING_ID = "CO-2";
104        
105        public static final String ENG101_LEC_ONLY_FORMAT_OFFERING_ID = "CO-2:LEC-ONLY";
106        
107        public static final String FALL_2012_TERM_ID = "2012FA";
108        
109        @Resource
110        protected AcademicCalendarService acalService;
111    
112        @Resource
113        protected CourseOfferingService coService;
114    
115        @Resource
116        protected CourseService courseService;
117    
118        @Resource
119        protected AtpService atpService;
120    
121        @Resource
122        protected CourseOfferingCodeGenerator courseCodeGenerator;
123    
124        @Resource
125        protected RegistrationGroupCodeGeneratorFactory registrationGroupCodeGeneratorFactory;
126    
127        
128    
129        protected AcalTestDataLoader acalDataLoader;
130    
131        TermInfo fall2012 = null;
132        TermInfo spring2012 = null;
133    
134        private boolean loadBaseData = true;
135    
136    
137        /**
138         */
139        public CourseOfferingServiceTestDataLoader() {
140            super();
141        }
142        
143        
144    
145    
146        /* (non-Javadoc)
147        * @see org.kuali.student.common.test.mock.data.AbstractMockServicesAwareDataLoader#initializeData()
148        */
149        @Override
150        protected void initializeData() throws Exception {
151    
152            this.acalDataLoader = new AcalTestDataLoader(atpService);
153    
154            acalDataLoader.loadData();
155    
156            // this provides a way for users of the data loader to not to load the base data.
157            // we may want to externalize the base data into the TestCourseOfferingServiceWithClass2Mocks
158            if (!loadBaseData)
159                return;
160            
161            // load in custom dates for use in the courses
162            fall2012 = createTerm(FALL_2012_TERM_ID, "Fall 2012", AtpServiceConstants.ATP_FALL_TYPE_KEY, new DateTime().withDate(2012, 9, 1).toDate(), new DateTime().withDate(2012, 12, 31).toDate(), context);
163    
164            spring2012 = createTerm("2012SP", "Spring 2012", AtpServiceConstants.ATP_SPRING_TYPE_KEY, new DateTime().withDate(2012, 1, 1).toDate(), new DateTime().withDate(2012, 4, 30).toDate(), context);
165    
166            // load the canonical course data
167            
168            createCourse(fall2012, "CHEM", "123", context);
169            createCourseCHEM123(fall2012, context);
170    
171            createCourseENG101(spring2012, context);
172    
173        }
174    
175       
176    
177    
178        public TermInfo createTerm(String id, String name, String atpTypeKey, Date startDate, Date endDate, ContextInfo context) throws OperationFailedException, DataValidationErrorException, InvalidParameterException, MissingParameterException, PermissionDeniedException, ReadOnlyException {
179    
180            AtpInfo atpInfo = new AtpInfo();
181            atpInfo.setId(id);
182            atpInfo.setName(name);
183            atpInfo.setTypeKey(atpTypeKey);
184            atpInfo.setStateKey(AtpServiceConstants.ATP_OFFICIAL_STATE_KEY);
185            atpInfo.setStartDate(startDate);
186            atpInfo.setEndDate(endDate);
187            atpInfo.setDescr(new RichTextHelper().fromPlain(name));
188    
189            try {
190                TermInfo term = new TermAssembler().assemble(atpInfo, context);
191                TermCodeGenerator tcg = new TermCodeGeneratorImpl();
192                atpInfo.setCode(tcg.generateTermCode(term));
193            } catch (AssemblyException e) {
194                throw new OperationFailedException("Assembly of TermInfo failed", e);
195            }
196    
197            AtpInfo saved = atpService.createAtp(atpInfo.getTypeKey(), atpInfo, context);
198            
199            TermInfo term = new TermInfo();
200    
201            term.setId(saved.getId());
202            term.setAttributes(saved.getAttributes());
203            term.setCode(saved.getCode());
204            term.setStartDate(saved.getStartDate());
205            term.setEndDate(saved.getEndDate());
206            term.setMeta(saved.getMeta());
207            term.setDescr(saved.getDescr());
208            term.setStateKey(saved.getStateKey());
209            term.setTypeKey(saved.getTypeKey());
210    
211            return term;
212        }
213    
214    
215        public void createCourseByTemplate(TermInfo term, String subjectCode, String courseNumberCode, ContextInfo context) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DoesNotExistException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
216    
217            String courseCode = subjectCode + courseNumberCode;
218            String courseId = courseCode + "-ID";
219    
220            CourseInfo canonicalCourse = buildCanonicalCourse(courseId, term.getId(), subjectCode, courseCode, subjectCode + " " + courseCode, courseCode + " description 1");
221    
222            FormatInfo canonicalLectureOnlyFormat = buildCanonicalFormat(courseCode + ":LEC-ONLY", canonicalCourse);
223    
224            ActivityInfo canonicalLectureOnlyLectureActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LECTURE_TYPE_KEY, canonicalLectureOnlyFormat);
225    
226            FormatInfo canonicalLectureAndLabFormat = buildCanonicalFormat(courseCode + ":LEC-AND-LAB", canonicalCourse);
227    
228            ActivityInfo canonicalLectureAndLabFormatLectureActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LECTURE_TYPE_KEY, canonicalLectureAndLabFormat);
229            ActivityInfo canonicalLectureAndLabFormatLabActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LAB_TYPE_KEY, canonicalLectureAndLabFormat);
230    
231            courseService.createCourse(canonicalCourse, context);
232    
233    
234            // course offering
235            CourseOfferingInfo courseOffering = CourseOfferingServiceTestDataUtils.createCourseOffering(canonicalCourse, term.getId());
236    
237            courseOffering.setId(courseId);
238    
239            coService.createCourseOffering(canonicalCourse.getId(), term.getId(), LuiServiceConstants.COURSE_OFFERING_TYPE_KEY, courseOffering, new ArrayList<String>(), context);
240    
241            // FO-1: lecture only format
242            FormatOfferingInfo lectureOnlyFormatOffering = CourseOfferingServiceTestDataUtils.createFormatOffering(courseOffering.getId(), canonicalLectureOnlyFormat.getId(), term.getId(), "Lecture", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY);
243    
244            lectureOnlyFormatOffering.setId(courseId + ":LEC-ONLY");
245    
246            coService.createFormatOffering(courseOffering.getId(), canonicalLectureOnlyFormat.getId(), LuiServiceConstants.FORMAT_OFFERING_TYPE_KEY, lectureOnlyFormatOffering, context);
247    
248            // FO-2: lab and lecture format
249            FormatOfferingInfo lectureAndLabFormatOffering = CourseOfferingServiceTestDataUtils.createFormatOffering(courseOffering.getId(), canonicalLectureAndLabFormat.getId(), term.getId(), "Lab & Lecture", new String[]{LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY});
250    
251            lectureAndLabFormatOffering.setId(courseId + ":LEC-AND-LAB");
252    
253            coService.createFormatOffering(courseOffering.getId(), canonicalLectureAndLabFormat.getId(), LuiServiceConstants.FORMAT_OFFERING_TYPE_KEY, lectureAndLabFormatOffering, context);
254    
255            List<OfferingInstructorInfo> instructors = new ArrayList<OfferingInstructorInfo>();
256    
257            instructors.add(CourseOfferingServiceTestDataUtils.createInstructor("p1", "Instructor", 100.00F));
258    
259    
260            // Format 1 Lecture offering A
261            ActivityOfferingInfo lectureOnlyFormatLectureA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureOnlyFormatOffering.getId(), null, canonicalLectureOnlyLectureActivity.getId(), "Lecture A", "A", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
262    
263            lectureOnlyFormatLectureA.setId(courseId + ":LEC-ONLY:LEC-A");
264    
265            coService.createActivityOffering(lectureOnlyFormatOffering.getId(), canonicalLectureOnlyLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureOnlyFormatLectureA, context);
266    
267            // Format 1 Lecture Offering B
268            ActivityOfferingInfo lectureOnlyFormatLectureB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureOnlyFormatOffering.getId(), null, canonicalLectureOnlyLectureActivity.getId(), "Lecture B", "B", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
269    
270            lectureOnlyFormatLectureB.setId(courseId + ":LEC-ONLY:LEC-B");
271    
272            coService.createActivityOffering(lectureOnlyFormatOffering.getId(), canonicalLectureOnlyLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureOnlyFormatLectureB, context);
273    
274            // Format 2:
275    
276            // Lecture A
277            ActivityOfferingInfo lectureAndLabFormatLectureA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLectureActivity.getId(), "Lecture A", "C", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
278    
279            lectureAndLabFormatLectureA.setId(courseId + ":LEC-AND-LAB:LEC-A");
280    
281            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLectureA, context);
282    
283            // Lecture B
284            ActivityOfferingInfo lectureAndLabFormatLectureB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLectureActivity.getId(), "Lecture B", "D", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
285    
286            lectureAndLabFormatLectureB.setId(courseId + ":LEC-AND-LAB:LEC-B");
287    
288            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLectureB, context);
289    
290    
291            // Lab A
292            ActivityOfferingInfo lectureAndLabFormatLabA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLabActivity.getId(), "Lab A", "E", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
293    
294            lectureAndLabFormatLabA.setId(courseId + ":LEC-AND-LAB:LAB-A");
295    
296            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLabActivity.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabA, context);
297    
298    
299            // Lab B
300            ActivityOfferingInfo lectureAndLabFormatLabB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLabActivity.getId(), "Lab B", "F", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
301    
302            lectureAndLabFormatLabB.setId(courseId + ":LEC-AND-LAB:LAB-B");
303    
304            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLabActivity.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabB, context);
305    
306            // Lab C
307    
308    
309            ActivityOfferingInfo lectureAndLabFormatLabC = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLabActivity.getId(), "Lab C", "G", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
310    
311            lectureAndLabFormatLabC.setId(courseId + ":LEC-AND-LAB:LAB-C");
312    
313            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLabActivity.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabC, context);
314    
315    
316        }
317    
318        public String createCourse(TermInfo term, String subjectCode, String courseNumberCode, ContextInfo context) throws AlreadyExistsException, VersionMismatchException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
319    
320            String courseCode = subjectCode + courseNumberCode;
321            String courseId = courseCode + "-ID";
322    
323            CourseInfo canonicalCourse = buildCanonicalCourse(courseId, term.getId(), subjectCode, courseCode, subjectCode + " " + courseCode, courseCode + " description 1");
324            courseService.createCourse(canonicalCourse, context);
325    
326            return courseId;
327        }
328    
329        public void createCourseOffering(TermInfo term, CourseInfo canonicalCourse, ContextInfo context) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DoesNotExistException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
330            // course offering
331            CourseOfferingInfo courseOffering = CourseOfferingServiceTestDataUtils.createCourseOffering(canonicalCourse, term.getId());
332    
333            courseOffering.setId("CO:" + canonicalCourse.getId());
334    
335            coService.createCourseOffering(canonicalCourse.getId(), term.getId(), LuiServiceConstants.COURSE_OFFERING_TYPE_KEY, courseOffering, new ArrayList<String>(), context);
336    
337    
338        }
339    
340        protected void createCourseCHEM123(TermInfo term, ContextInfo context) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DoesNotExistException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
341    
342            CourseInfo canonicalCourse = buildCanonicalCourse("CLU-1", term.getId(), "CHEM", "CHEM123", "Chemistry 123", "description 1");
343    
344            FormatInfo canonicalLectureOnlyFormat = buildCanonicalFormat("CHEM123:LEC-ONLY", canonicalCourse);
345    
346            ActivityInfo canonicalLectureOnlyLectureActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LECTURE_TYPE_KEY, canonicalLectureOnlyFormat);
347    
348            FormatInfo canonicalLectureAndLabFormat = buildCanonicalFormat("CHEM123:LEC-AND-LAB", canonicalCourse);
349    
350            ActivityInfo canonicalLectureAndLabFormatLectureActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LECTURE_TYPE_KEY, canonicalLectureAndLabFormat);
351            ActivityInfo canonicalLectureAndLabFormatLabActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LAB_TYPE_KEY, canonicalLectureAndLabFormat);
352    
353            courseService.createCourse(canonicalCourse, context);
354    
355    
356            // course offering
357            CourseOfferingInfo courseOffering = CourseOfferingServiceTestDataUtils.createCourseOffering(canonicalCourse, term.getId());
358    
359            courseOffering.setId("CO-1");
360    
361            coService.createCourseOffering(canonicalCourse.getId(), term.getId(), LuiServiceConstants.COURSE_OFFERING_TYPE_KEY, courseOffering, new ArrayList<String>(), context);
362    
363            // FO-1: lecture only format
364            FormatOfferingInfo lectureOnlyFormatOffering = CourseOfferingServiceTestDataUtils.createFormatOffering(courseOffering.getId(), canonicalLectureOnlyFormat.getId(), term.getId(), "Lecture", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY);
365    
366            lectureOnlyFormatOffering.setId("CO-1:LEC-ONLY");
367    
368            coService.createFormatOffering(courseOffering.getId(), canonicalLectureOnlyFormat.getId(), LuiServiceConstants.FORMAT_OFFERING_TYPE_KEY, lectureOnlyFormatOffering, context);
369    
370            // FO-2: lab and lecture format
371            FormatOfferingInfo lectureAndLabFormatOffering = CourseOfferingServiceTestDataUtils.createFormatOffering(courseOffering.getId(), canonicalLectureAndLabFormat.getId(), term.getId(), "Lab & Lecture", new String[]{LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY});
372    
373            lectureAndLabFormatOffering.setId("CO-1:LEC-AND-LAB");
374    
375            coService.createFormatOffering(courseOffering.getId(), canonicalLectureAndLabFormat.getId(), LuiServiceConstants.FORMAT_OFFERING_TYPE_KEY, lectureAndLabFormatOffering, context);
376    
377            List<OfferingInstructorInfo> instructors = new ArrayList<OfferingInstructorInfo>();
378    
379            instructors.add(CourseOfferingServiceTestDataUtils.createInstructor("p1", "Instructor", 100.00F));
380    
381    
382            // Format 1 Lecture offering A
383            ActivityOfferingInfo lectureOnlyFormatLectureA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureOnlyFormatOffering.getId(), null, canonicalLectureOnlyLectureActivity.getId(), "Lecture A", "A", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
384    
385            lectureOnlyFormatLectureA.setId("CO-1:LEC-ONLY:LEC-A");
386    
387            coService.createActivityOffering(lectureOnlyFormatOffering.getId(), canonicalLectureOnlyLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureOnlyFormatLectureA, context);
388    
389            // Format 1 Lecture Offering B
390            ActivityOfferingInfo lectureOnlyFormatLectureB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureOnlyFormatOffering.getId(), null, canonicalLectureOnlyLectureActivity.getId(), "Lecture B", "B", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
391    
392            lectureOnlyFormatLectureB.setId("CO-1:LEC-ONLY:LEC-B");
393    
394            coService.createActivityOffering(lectureOnlyFormatOffering.getId(), canonicalLectureOnlyLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureOnlyFormatLectureB, context);
395    
396            // Format 2:
397    
398            // Lecture A
399            ActivityOfferingInfo lectureAndLabFormatLectureA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLectureActivity.getId(), "Lecture A", "C", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
400    
401            lectureAndLabFormatLectureA.setId("CO-1:LEC-AND-LAB:LEC-A");
402    
403            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLectureA, context);
404    
405            // Lecture B
406            ActivityOfferingInfo lectureAndLabFormatLectureB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLectureActivity.getId(), "Lecture B", "D", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
407    
408            lectureAndLabFormatLectureB.setId("CO-1:LEC-AND-LAB:LEC-B");
409    
410            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLectureB, context);
411    
412    
413            // Lab A
414            ActivityOfferingInfo lectureAndLabFormatLabA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLabActivity.getId(), "Lab A", "E", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
415    
416            lectureAndLabFormatLabA.setId("CO-1:LEC-AND-LAB:LAB-A");
417    
418            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLabActivity.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabA, context);
419    
420    
421            // Lab B
422            ActivityOfferingInfo lectureAndLabFormatLabB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLabActivity.getId(), "Lab B", "F", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
423    
424            lectureAndLabFormatLabB.setId("CO-1:LEC-AND-LAB:LAB-B");
425    
426            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLabActivity.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabB, context);
427    
428            // Lab C
429    
430    
431            ActivityOfferingInfo lectureAndLabFormatLabC = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), courseOffering, lectureAndLabFormatOffering.getId(), null, canonicalLectureAndLabFormatLabActivity.getId(), "Lab C", "G", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
432    
433            lectureAndLabFormatLabC.setId("CO-1:LEC-AND-LAB:LAB-C");
434    
435            coService.createActivityOffering(lectureAndLabFormatOffering.getId(), canonicalLectureAndLabFormatLabActivity.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabC, context);
436    
437    
438        }
439    
440        public static interface CourseOfferingCreationDetails {
441    
442            public void storeCourseId(String id);
443            
444            public void storeCourseOfferingId(String id);
445            
446            String getSubjectArea();
447    
448            String getCourseCode();
449    
450            String getCourseTitle();
451    
452            String getCourseDescription();
453    
454            /**
455             * Get the type keys for the format given.
456             * 
457             * @param format
458             * @return
459             */
460            List<String> getCanonicalActivityTypeKeys(int format);
461    
462            String getFormatOfferingName(int format);
463    
464            String[] getFormatOfferingActivityTypeKeys(int format);
465    
466            String getActivityOfferingTypeKey(int format, String activityTypeKey);
467    
468            String getActivityOfferingCode(int format, String activityTypeKey, int activity);
469    
470            String getActivityOfferingName(int format, String activityTypeKey, int activity);
471    
472            int getNumberOfFormats();
473    
474            int getNumberOfActivityOfferings(int format, String activityType);
475    
476            public int getActivityOfferingMaxEnrollment(int i, String typeKey, int j);
477    
478        }
479        
480        public String createCourseOffering(TermInfo term, CourseOfferingCreationDetails details, ContextInfo context) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DoesNotExistException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
481    
482            String courseOfferingId = null;
483            
484            CourseInfo canonicalCourse = buildCanonicalCourse(null, term.getId(), details.getSubjectArea(), details.getCourseCode(), details.getCourseTitle(), details.getCourseDescription());
485            
486            int formats = details.getNumberOfFormats();
487            
488           for (int i = 0; i < formats; i++) {
489            
490                FormatInfo canonicalFormat = buildCanonicalFormat(null, canonicalCourse);
491    
492                for (String canonicalActivityTypeKey : details.getCanonicalActivityTypeKeys(i)) {
493                    
494                   buildCanonicalActivity(canonicalActivityTypeKey, canonicalFormat);
495                
496                }
497            }
498            
499           canonicalCourse = courseService.createCourse(canonicalCourse, context);
500           
501           details.storeCourseId(canonicalCourse.getId());
502    
503    
504            // course offering
505            CourseOfferingInfo courseOffering = CourseOfferingServiceTestDataUtils.createCourseOffering(canonicalCourse, term.getId());
506    
507            CourseOfferingInfo co = coService.createCourseOffering(canonicalCourse.getId(), term.getId(), LuiServiceConstants.COURSE_OFFERING_TYPE_KEY, courseOffering, new ArrayList<String>(), context);
508    
509            courseOfferingId = co.getId();
510            
511            details.storeCourseOfferingId(co.getId());
512            
513            // create format offerings
514            for (int i = 0; i < formats; i++) {
515                
516                FormatInfo canonicalFormat = canonicalCourse.getFormats().get(i);
517                
518                String canonicalFormatId = canonicalCourse.getFormats().get(i).getId();
519                
520                FormatOfferingInfo formatOffering = CourseOfferingServiceTestDataUtils.createFormatOffering(co.getId(), canonicalFormatId, term.getId(), details.getFormatOfferingName (i), details.getFormatOfferingActivityTypeKeys(i));
521    
522                FormatOfferingInfo fo = coService.createFormatOffering(co.getId(), canonicalFormatId, LuiServiceConstants.FORMAT_OFFERING_TYPE_KEY, formatOffering, context);
523                
524                
525                // create activity offerings
526                for (ActivityInfo activity : canonicalFormat.getActivities()) {
527                    
528                    int numberOfEachActivityType = details.getNumberOfActivityOfferings(i, activity.getTypeKey());
529                    
530                    for (int j = 0; j < numberOfEachActivityType; j++) {
531                        
532                        List<OfferingInstructorInfo> instructors = new ArrayList<OfferingInstructorInfo>();
533    
534                        instructors.add(CourseOfferingServiceTestDataUtils
535                                .createInstructor("p1", "Instructor", 100.00F));
536    
537                        ActivityOfferingInfo ao = CourseOfferingServiceTestDataUtils
538                                .createActivityOffering(term.getId(),
539                                        co, fo.getId(),
540                                        null, activity.getId(), details
541                                                .getActivityOfferingName(i,
542                                                        activity.getTypeKey(), j), details
543                                                .getActivityOfferingCode(i,
544                                                        activity.getTypeKey(), j), details
545                                                .getActivityOfferingTypeKey(i,
546                                                        activity.getTypeKey()), instructors);
547                        
548                        int maxEnrollment = details.getActivityOfferingMaxEnrollment(i, activity.getTypeKey(), j);
549    
550                        ao.setMaximumEnrollment(maxEnrollment);
551                        
552                        coService.createActivityOffering(fo.getId(), activity.getId(), details.getActivityOfferingTypeKey(i, activity.getTypeKey()), ao, context);
553    
554                    }
555                    
556                   
557                }
558                
559                // create a default aoc
560                ActivityOfferingClusterInfo aoc = CourseOfferingServiceTestDataUtils.createActivityOfferingCluster(fo.getId(), "Default", coService.getActivityOfferingsByFormatOffering(fo.getId(), context));
561    
562                // add in all AO's
563                List<ActivityOfferingInfo> aos = coService.getActivityOfferingsWithoutClusterByFormatOffering(fo.getId(), context);
564                
565                Map<String, ActivityOfferingSetInfo>aoSetMap = new HashMap<String, ActivityOfferingSetInfo>();
566                
567                for (ActivityOfferingInfo activityOfferingInfo : aos) {
568                
569                    ActivityOfferingSetInfo aoset = aoSetMap.get(activityOfferingInfo.getTypeKey());
570                
571                    if (aoset == null) {
572                        aoset = new ActivityOfferingSetInfo();
573                        aoSetMap.put(activityOfferingInfo.getTypeKey(), aoset);
574                    }
575                    
576                    aoset.getActivityOfferingIds().add(activityOfferingInfo.getId());
577                    
578                    
579                }
580                
581                aoc = coService.createActivityOfferingCluster(fo.getId(), CourseOfferingServiceConstants.AOC_ROOT_TYPE_KEY, aoc, context);
582                
583                
584                // generate reg groups
585                
586                List<BulkStatusInfo> results = coService.generateRegistrationGroupsForFormatOffering(fo.getId(), context);
587                
588                log.debug("generated " + results + " reg groups");
589                
590            }
591            
592            return courseOfferingId;
593        }
594    
595        public void createLabActivityOfferingForCHEM123(String labCode, ContextInfo context) throws DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
596    
597    
598            CourseOfferingInfo co = coService.getCourseOffering("CO-1", context);
599    
600            CourseInfo c = courseService.getCourse(co.getCourseId(), context);
601    
602            // create the new activity offering
603    
604            FormatInfo targetFormat = null;
605    
606            for (FormatInfo format : c.getFormats()) {
607    
608                if (format.getId().equals("CHEM123:LEC-AND-LAB")) {
609                    targetFormat = format;
610                    break;
611                }
612            }
613    
614            List<OfferingInstructorInfo> instructors = new ArrayList<OfferingInstructorInfo>();
615    
616            instructors.add(CourseOfferingServiceTestDataUtils.createInstructor("p1", "Instructor", 100.00F));
617    
618            String canonicalActivityId = CourseOfferingServiceTestDataUtils.createCanonicalActivityId(targetFormat.getId(), LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY);
619    
620            ActivityOfferingInfo lectureAndLabFormatLabC = CourseOfferingServiceTestDataUtils.createActivityOffering(co.getTermId(), co, "CO-1:LEC-AND-LAB", labCode, canonicalActivityId, labCode, "A", LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, instructors);
621    
622            lectureAndLabFormatLabC.setId("CO-1:LEC-AND-LAB:" + labCode);
623    
624    
625            coService.createActivityOffering("CO-1:LEC-AND-LAB", canonicalActivityId, LuiServiceConstants.LAB_ACTIVITY_OFFERING_TYPE_KEY, lectureAndLabFormatLabC, context);
626    
627    
628        }
629    
630    
631        protected void createCourseENG101(TermInfo term, ContextInfo context) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DoesNotExistException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, DoesNotExistException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
632    
633            CourseInfo canonicalCourse = buildCanonicalCourse("CLU-2", term.getId(), "ENG", "ENG101", "Intro English", "Description of Intoroductory English");
634    
635            FormatInfo canonicalLectureOnlyFormat = buildCanonicalFormat("ENG101:LEC-ONLY", canonicalCourse);
636    
637            ActivityInfo canonicalLectureOnlyFormatLectureActivity = buildCanonicalActivity(LuServiceConstants.COURSE_ACTIVITY_LECTURE_TYPE_KEY, canonicalLectureOnlyFormat);
638    
639            courseService.createCourse(canonicalCourse, context);
640    
641            // create offerings
642            CourseOfferingInfo co = CourseOfferingServiceTestDataUtils.createCourseOffering(canonicalCourse, term.getId());
643    
644            co.setId("CO-2");
645    
646            coService.createCourseOffering(canonicalCourse.getId(), term.getId(), LuiServiceConstants.COURSE_OFFERING_TYPE_KEY, co, new ArrayList<String>(), context);
647    
648            // create format offering
649            // FO-1: lecture only format
650            FormatOfferingInfo fo1 = CourseOfferingServiceTestDataUtils.createFormatOffering(co.getId(), canonicalLectureOnlyFormat.getId(), term.getId(), "Lecture", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY);
651    
652            fo1.setId("CO-2:LEC-ONLY");
653    
654            coService.createFormatOffering(co.getId(), canonicalLectureOnlyFormat.getId(), LuiServiceConstants.FORMAT_OFFERING_TYPE_KEY, fo1, context);
655    
656            // create lecture activity
657            List<OfferingInstructorInfo> instructors = new ArrayList<OfferingInstructorInfo>();
658    
659            instructors.add(CourseOfferingServiceTestDataUtils.createInstructor("p2", "Instructor", 100.00F));
660    
661            // Lecture A
662            ActivityOfferingInfo lectureOnlyFormatLectureA = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), co, fo1.getId(), null, canonicalLectureOnlyFormatLectureActivity.getId(), "Lecture", "A", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
663    
664            lectureOnlyFormatLectureA.setId("CO-2:LEC-ONLY:LEC-A");
665    
666            coService.createActivityOffering(fo1.getId(), canonicalLectureOnlyFormatLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureOnlyFormatLectureA, context);
667    
668            // Lecture B
669            ActivityOfferingInfo lectureOnlyFormatLectureB = CourseOfferingServiceTestDataUtils.createActivityOffering(term.getId(), co, fo1.getId(), null, canonicalLectureOnlyFormatLectureActivity.getId(), "Lecture", "B", LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, instructors);
670    
671            lectureOnlyFormatLectureB.setId("CO-2:LEC-ONLY:LEC-B");
672    
673            coService.createActivityOffering(fo1.getId(), canonicalLectureOnlyFormatLectureActivity.getId(), LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY, lectureOnlyFormatLectureB, context);
674    
675            // create a default cluster
676            List<ActivityOfferingInfo> activities = coService.getActivityOfferingsByFormatOffering("CO-2:LEC-ONLY", context);
677    
678            ActivityOfferingClusterInfo defaultAoc = CourseOfferingServiceTestDataUtils.createActivityOfferingCluster("CO-2:LEC-ONLY", "Default Cluster", activities);
679    
680            defaultAoc = coService.createActivityOfferingCluster("CO-2:LEC-ONLY", CourseOfferingServiceConstants.AOC_ROOT_TYPE_KEY, defaultAoc, context);
681    
682            // Create a Registration Group
683            coService.generateRegistrationGroupsForFormatOffering("CO-2:LEC-ONLY", context);
684    
685    
686        }
687    
688    
689      
690    
691    
692    
693       
694        private CourseInfo buildCanonicalCourse(String id, String startTermId, String subjectArea, String code, String title, String description) {
695            CourseInfo info = new CourseInfo();
696            info.setStartTerm(startTermId);
697            info.setEffectiveDate(calcEffectiveDateForTerm(startTermId, id));
698            info.setId(id);
699            info.setSubjectArea(subjectArea);
700            info.setCode(code);
701            info.setCourseNumberSuffix(code.substring(subjectArea.length()));
702            info.setCourseTitle(title);
703            RichTextInfo rt = new RichTextInfo();
704            rt.setPlain(description);
705            info.setDescr(rt);
706            info.setTypeKey(LuServiceConstants.CREDIT_COURSE_LU_TYPE_KEY);
707            info.setStateKey(DtoConstants.STATE_ACTIVE);
708            info.setFormats(new ArrayList<FormatInfo>());
709            ResultValuesGroupInfo rvg = new ResultValuesGroupInfo();
710            rvg.setKey(LrcServiceConstants.RESULT_GROUP_KEY_KUALI_CREDITTYPE_CREDIT_1_0);
711            info.getCreditOptions().add(rvg);
712            info.getGradingOptions().add(LrcServiceConstants.RESULT_GROUP_KEY_GRADE_LETTER);
713            return info;
714        }
715    
716    
717        private ActivityInfo buildCanonicalActivity(String activityTypeKey, FormatInfo format) {
718    
719            ActivityInfo info = new ActivityInfo();
720            info.setId(CourseOfferingServiceTestDataUtils.createCanonicalActivityId(format.getId(), activityTypeKey));
721            info.setTypeKey(activityTypeKey);
722            info.setStateKey(DtoConstants.STATE_ACTIVE);
723    
724            format.getActivities().add(info);
725    
726            return info;
727    
728        }
729    
730        private FormatInfo buildCanonicalFormat(String formatId, CourseInfo course) {
731    
732            FormatInfo info = new FormatInfo();
733            info.setId(formatId);
734            info.setTypeKey(LuServiceConstants.COURSE_FORMAT_TYPE_KEY);
735            info.setStateKey(DtoConstants.STATE_ACTIVE);
736            info.setActivities(new ArrayList<ActivityInfo>());
737    
738            course.getFormats().add(info);
739    
740            return info;
741        }
742    
743        private Date calcEffectiveDateForTerm(String termId, String context) {
744            String year = termId.substring(0, 4);
745            String mmdd = "09-01";
746            if (termId.endsWith("FA")) {
747                mmdd = "09-01";
748            } else if (termId.endsWith("WI")) {
749                mmdd = "01-01";
750            } else if (termId.endsWith("SP")) {
751                mmdd = "03-01";
752            } else if (termId.endsWith("SU")) {
753                mmdd = "06-01";
754            }
755            return str2Date(year + "-" + mmdd + " 00:00:00.0", context);
756        }
757    
758        private Date str2Date(String str, String context) {
759            if (str == null) {
760                return null;
761            }
762            try {
763                Date date = DateFormatters.DEFAULT_YEAR_MONTH_24HOUR_MILLISECONDS_FORMATTER.parse(str);
764                return date;
765            } catch (IllegalArgumentException ex) {
766                throw new IllegalArgumentException("Bad date " + str + " in " + context);
767            }
768        }
769    
770        public TermInfo getFall2012() {
771            return fall2012;
772        }
773    
774        public void setFall2012(TermInfo fall2012) {
775            this.fall2012 = fall2012;
776        }
777    
778        public TermInfo getSpring2012() {
779            return spring2012;
780        }
781    
782        public void setSpring2012(TermInfo spring2012) {
783            this.spring2012 = spring2012;
784        }
785    
786    
787    
788        /**
789         * @param acalService the acalService to set
790         */
791        public void setAcalService(AcademicCalendarService acalService) {
792            this.acalService = acalService;
793        }
794    
795    
796        /**
797         * @param coService the coService to set
798         */
799        public void setCoService(CourseOfferingService coService) {
800            this.coService = coService;
801        }
802    
803    
804        /**
805         * @param courseService the courseService to set
806         */
807        public void setCourseService(CourseService courseService) {
808            this.courseService = courseService;
809        }
810    
811    
812        /**
813         * @param atpService the atpService to set
814         */
815        public void setAtpService(AtpService atpService) {
816            this.atpService = atpService;
817        }
818    
819    
820        /**
821         * @param courseCodeGenerator the courseCodeGenerator to set
822         */
823        public void setCourseCodeGenerator(
824                CourseOfferingCodeGenerator courseCodeGenerator) {
825            this.courseCodeGenerator = courseCodeGenerator;
826        }
827    
828    
829        /**
830         * @param registrationGroupCodeGeneratorFactory the registrationGroupCodeGeneratorFactory to set
831         */
832        public void setRegistrationGroupCodeGeneratorFactory(
833                RegistrationGroupCodeGeneratorFactory registrationGroupCodeGeneratorFactory) {
834            this.registrationGroupCodeGeneratorFactory = registrationGroupCodeGeneratorFactory;
835        }
836    
837    
838        /**
839         * @param acalDataLoader the acalDataLoader to set
840         */
841        public void setAcalDataLoader(AcalTestDataLoader acalDataLoader) {
842            this.acalDataLoader = acalDataLoader;
843        }
844    
845    
846        /**
847         * If set to false then the base data will not be loaded.
848         * 
849         * @param loadBaseData the loadBaseData to set
850         */
851        public void setLoadBaseData(boolean loadBaseData) {
852            this.loadBaseData = loadBaseData;
853        }
854        
855        
856    
857        
858    }