/* * Copyright 2008 University of Prince Edward Island * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ca.upei.ic.timetable.client; import java.util.Map; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.ui.Widget; /** * Find Course controller * * Controller for find a course. * * @author felix * */ public class FindCourseViewController implements ViewController { private ApplicationController app_; private FindCourseView view_; private final DepartmentModelView department_; private final LevelModelView level_; private final SemesterModelView semester_; private final CourseStartTimeModelView startTime_; private boolean departmentLoaded_ = false; private boolean levelLoaded_ = false; private boolean semesterLoaded_ = false; /** * Initialize find course dialog */ public FindCourseViewController(ApplicationController app) { this.app_ = app; department_ = new DepartmentModelView(this); level_ = new LevelModelView(this); semester_ = new SemesterModelView(this); startTime_ = new CourseStartTimeModelView(this); // app_.getCourseCalendarController().setCellClickListener(new CellClickListener() { // // private Map<String,Integer> params; // // public void setContext(Object context) { // params = (Map<String,Integer>) context; // } // // public void onClick(Widget sender) { // startTime_.setDay(params.get("day") + 1); // startTime_.setHour(params.get("hour") + 1); // app_.getFindCourseController().getView().show(); // } // // }); } /** * Get the department model * * @return the department model */ public DepartmentModelView getDepartmentModel() { if (!departmentLoaded_) { Service.defaultInstance().askDepartments(new RequestCallback(){ public void onError(Request request, Throwable exception) { app_.error(ApplicationController.OOPS, exception); } public void onResponseReceived(Request request, Response response) { JSONValue value = JSONParser.parse(response.getText()); department_.loadJSON(value); departmentLoaded_ = true; } }); } return department_; } /** * Get the level model * * @return the level model */ public LevelModelView getLevelModel() { if (!levelLoaded_) { Service.defaultInstance().askCourseLevels(new RequestCallback() { public void onError(Request request, Throwable exception) { app_.error(ApplicationController.OOPS, exception); } public void onResponseReceived(Request request, Response response) { JSONValue value = JSONParser.parse(response.getText()); level_.loadJSON(value); levelLoaded_ = true; } }); } return level_; } public SemesterModelView getSemesterModel() { if (!semesterLoaded_) { Service.defaultInstance().askSemesters(new RequestCallback() { public void onError(Request request, Throwable exception) { app_.error(ApplicationController.OOPS, exception); } public void onResponseReceived(Request request, Response response) { try { String text = response.getText(); JSONValue value = JSONParser.parse(text); semester_.loadJSON(value); semesterLoaded_ = true; } catch (Exception e) { app_.error("Error: " + response.getText(), e); } } }); } return semester_; } public CourseStartTimeModelView getStartTimeModel() { return startTime_; } public void setSemesterCriteria(String name, boolean included) { app_.getCourseController().setSemesterCriteria(name, included); } public void setLevelCriteria(String name, boolean included) { app_.getCourseController().setLevelCriteria(name, included); } public void setDepartmentCriteria(String name, boolean included) { app_.getCourseController().setDepartmentCriteria(name, included); } public void setStartTimeCriteria(String day, String startTime) { app_.getCourseController().setCourseStartTimeCriteria(day, startTime); } public void search() { app_.getCourseController().search(); } public FindCourseView getView() { if (null == view_) { view_ = new FindCourseView(this); } return view_; } }