/*
* #%L
* Course Signup Implementation
* %%
* Copyright (C) 2010 - 2013 University of Oxford
* %%
* Licensed under the Educational Community 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://opensource.org/licenses/ecl2
*
* 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.
* #L%
*/
package uk.ac.ox.oucs.vle;
import java.util.*;
public class CourseGroupImpl implements CourseGroup {
private CourseGroupDAO courseGroupDAO;
private CourseSignupServiceImpl impl;
private List<CourseComponent> components;
private List<CourseCategory> categories;
private List<Person> administrators;
private List<Person> superusers;
private List<String> otherDepartments;
public CourseGroupImpl(CourseGroupDAO courseGroupDAO, CourseSignupServiceImpl impl) {
this.courseGroupDAO = courseGroupDAO;
this.impl = impl;
}
public CourseGroupImpl(CourseGroupDAO courseGroupDAO, CourseSignupServiceImpl impl, List<CourseComponentDAO> courseComponentDAOs) {
this.courseGroupDAO = courseGroupDAO;
this.impl = impl;
setComponents(courseComponentDAOs);
}
public int getMuid() {
return courseGroupDAO.getMuid();
}
public String getDescription() {
return courseGroupDAO.getDescription();
}
public String getCourseId() {
return courseGroupDAO.getCourseId();
}
public String getTitle() {
return courseGroupDAO.getTitle();
}
public String getDepartment() {
return courseGroupDAO.getDepartmentName();
}
public String getDepartmentCode() {
return courseGroupDAO.getDept();
}
public String getSubUnit() {
return courseGroupDAO.getSubunitName();
}
public String getSubUnitCode() {
return courseGroupDAO.getSubunit();
}
public boolean getSupervisorApproval() {
return courseGroupDAO.getSupervisorApproval();
}
public boolean getAdministratorApproval() {
return courseGroupDAO.getAdministratorApproval();
}
/**
* @inheritDoc
*/
public boolean getHideGroup() {
return courseGroupDAO.getHideGroup();
}
public String getContactEmail() {
return courseGroupDAO.getContactEmail();
}
public String getVisibility() {
return courseGroupDAO.getVisibility();
}
public String getPrerequisite() {
return courseGroupDAO.getPrerequisite();
}
public String getRegulations() {
return courseGroupDAO.getRegulations();
}
public String getSource() {
return courseGroupDAO.getSource();
}
public List<CourseComponent> getComponents() {
if (components == null) {
setComponents(courseGroupDAO.getComponents());
}
return components;
}
private void setComponents(Collection<CourseComponentDAO> courseComponentDAOs) {
components = new ArrayList<CourseComponent>();
for (CourseComponentDAO component : courseComponentDAOs) {
components.add(new CourseComponentImpl(component));
}
Collections.sort(components, new Comparator<CourseComponent>() {
public int compare(CourseComponent c1, CourseComponent c2) {
if (null != c1.getStarts() && null != c2.getStarts()) {
return c1.getStarts().compareTo(c2.getStarts());
}
if (null != c1.getCloses() && null != c2.getCloses()) {
return c1.getCloses().compareTo(c2.getCloses());
}
return c1.getPresentationId().compareTo(c2.getPresentationId());
}
});
}
public List<Person> getAdministrators() {
if (administrators == null) {
administrators = new ArrayList<Person>();
for (String component: courseGroupDAO.getAdministrators()) {
UserProxy user = impl.loadUser(component);
if (null != user) {
Person person = new UserProxyPersonImpl(user, impl);
administrators.add(person);
}
}
}
return administrators;
}
public List<Person> getSuperusers() {
if (superusers == null) {
superusers = new ArrayList<Person>();
for (String component: courseGroupDAO.getSuperusers()) {
UserProxy user = impl.loadUser(component);
if (null != user) {
Person person = new UserProxyPersonImpl(user, impl);
superusers.add(person);
}
}
}
return superusers;
}
public List<String> getOtherDepartments() {
if (otherDepartments == null) {
otherDepartments = new ArrayList<String>();
for (String otherDepartment: courseGroupDAO.getOtherDepartments()) {
otherDepartments.add(otherDepartment);
}
}
return otherDepartments;
}
public boolean getIsAdmin() {
return impl.containsCurrentUser(courseGroupDAO.getAdministrators()) ||
impl.containsCurrentUser(courseGroupDAO.getSuperusers());
}
public boolean getIsSuperuser() {
return impl.containsCurrentUser(courseGroupDAO.getSuperusers());
}
public List<CourseCategory> getCategories() {
if (categories == null) {
categories = new ArrayList<CourseCategory>();
for(CourseCategoryDAO category: courseGroupDAO.getCategories()) {
categories.add(new CourseCategoryImpl(category));
}
Collections.sort(categories, new Comparator<CourseCategory>() {
public int compare(CourseCategory c1,CourseCategory c2) {
return c1.getName().compareTo(c2.getName());
}
});
}
return categories;
}
public List<CourseCategory> getCategories(CategoryType categoryType) {
List<CourseCategory> cats = new ArrayList<CourseCategory>();
for(CourseCategory category: getCategories()) {
if (category.getType().equals(categoryType.name())) {
cats.add(category);
}
}
Collections.sort(cats, new Comparator<CourseCategory>() {
public int compare(CourseCategory c1,CourseCategory c2) {
return c1.getName().compareTo(c2.getName());
}
});
return cats;
}
}