package fi.pyramus.services;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import javax.annotation.security.RolesAllowed;
import javax.ejb.Stateless;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.base.AcademicTermDAO;
import fi.otavanopisto.pyramus.dao.base.AddressDAO;
import fi.otavanopisto.pyramus.dao.base.ContactTypeDAO;
import fi.otavanopisto.pyramus.dao.base.EducationSubtypeDAO;
import fi.otavanopisto.pyramus.dao.base.EducationTypeDAO;
import fi.otavanopisto.pyramus.dao.base.EducationalTimeUnitDAO;
import fi.otavanopisto.pyramus.dao.base.LanguageDAO;
import fi.otavanopisto.pyramus.dao.base.MunicipalityDAO;
import fi.otavanopisto.pyramus.dao.base.NationalityDAO;
import fi.otavanopisto.pyramus.dao.base.SchoolDAO;
import fi.otavanopisto.pyramus.dao.base.SchoolVariableDAO;
import fi.otavanopisto.pyramus.dao.base.StudyProgrammeDAO;
import fi.otavanopisto.pyramus.dao.base.SubjectDAO;
import fi.otavanopisto.pyramus.domainmodel.base.AcademicTerm;
import fi.otavanopisto.pyramus.domainmodel.base.Address;
import fi.otavanopisto.pyramus.domainmodel.base.ContactType;
import fi.otavanopisto.pyramus.domainmodel.base.EducationSubtype;
import fi.otavanopisto.pyramus.domainmodel.base.EducationType;
import fi.otavanopisto.pyramus.domainmodel.base.EducationalTimeUnit;
import fi.otavanopisto.pyramus.domainmodel.base.Language;
import fi.otavanopisto.pyramus.domainmodel.base.Municipality;
import fi.otavanopisto.pyramus.domainmodel.base.Nationality;
import fi.otavanopisto.pyramus.domainmodel.base.School;
import fi.otavanopisto.pyramus.domainmodel.base.Subject;
import fi.otavanopisto.pyramus.util.StringAttributeComparator;
import fi.pyramus.services.entities.EntityFactoryVault;
import fi.pyramus.services.entities.base.AcademicTermEntity;
import fi.pyramus.services.entities.base.EducationSubtypeEntity;
import fi.pyramus.services.entities.base.EducationTypeEntity;
import fi.pyramus.services.entities.base.EducationalTimeUnitEntity;
import fi.pyramus.services.entities.base.LanguageEntity;
import fi.pyramus.services.entities.base.MunicipalityEntity;
import fi.pyramus.services.entities.base.NationalityEntity;
import fi.pyramus.services.entities.base.SchoolEntity;
import fi.pyramus.services.entities.base.StudyProgrammeEntity;
import fi.pyramus.services.entities.base.SubjectEntity;
@Stateless
@WebService
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
@RolesAllowed("WebServices")
public class BaseService extends PyramusService {
public NationalityEntity getNationalityByCode(@WebParam (name = "code") String code) {
NationalityDAO nationalityDAO = DAOFactory.getInstance().getNationalityDAO();
return EntityFactoryVault.buildFromDomainObject(nationalityDAO.findByCode(code));
}
public NationalityEntity getNationalityById(@WebParam (name = "nationalityId") Long nationalityId) {
NationalityDAO nationalityDAO = DAOFactory.getInstance().getNationalityDAO();
return EntityFactoryVault.buildFromDomainObject(nationalityDAO.findById(nationalityId));
}
public NationalityEntity[] listNationalities() {
NationalityDAO nationalityDAO = DAOFactory.getInstance().getNationalityDAO();
List<Nationality> nationalities = nationalityDAO.listUnarchived();
Collections.sort(nationalities, new StringAttributeComparator("getName"));
return (NationalityEntity[]) EntityFactoryVault.buildFromDomainObjects(nationalities);
}
public LanguageEntity getLanguageByCode(@WebParam (name = "code") String code) {
LanguageDAO languageDAO = DAOFactory.getInstance().getLanguageDAO();
return EntityFactoryVault.buildFromDomainObject(languageDAO.findByCode(code));
}
public LanguageEntity getLanguageById(@WebParam (name = "languageId") Long languageId) {
LanguageDAO languageDAO = DAOFactory.getInstance().getLanguageDAO();
return EntityFactoryVault.buildFromDomainObject(languageDAO.findById(languageId));
}
public LanguageEntity[] listLanguages() {
LanguageDAO languageDAO = DAOFactory.getInstance().getLanguageDAO();
List<Language> languages = languageDAO.listUnarchived();
Collections.sort(languages, new StringAttributeComparator("getName"));
return (LanguageEntity[]) EntityFactoryVault.buildFromDomainObjects(languages);
}
public MunicipalityEntity getMunicipalityByCode(@WebParam (name = "code") String code) {
MunicipalityDAO municipalityDAO = DAOFactory.getInstance().getMunicipalityDAO();
return EntityFactoryVault.buildFromDomainObject(municipalityDAO.findByCode(code));
}
public MunicipalityEntity getMunicipalityById(@WebParam (name = "municipalityId") Long municipalityId) {
MunicipalityDAO municipalityDAO = DAOFactory.getInstance().getMunicipalityDAO();
return EntityFactoryVault.buildFromDomainObject(municipalityDAO.findById(municipalityId));
}
public MunicipalityEntity[] listMunicipalities() {
MunicipalityDAO municipalityDAO = DAOFactory.getInstance().getMunicipalityDAO();
List<Municipality> municipalities = municipalityDAO.listUnarchived();
Collections.sort(municipalities, new StringAttributeComparator("getName"));
return (MunicipalityEntity[]) EntityFactoryVault.buildFromDomainObjects(municipalities);
}
public EducationalTimeUnitEntity getEducationalTimeUnitById(@WebParam (name = "educationalTimeUnitId") Long educationalTimeUnitId) {
EducationalTimeUnitDAO educationalTimeUnitDAO = DAOFactory.getInstance().getEducationalTimeUnitDAO();
EducationalTimeUnit educationalTimeUnit = educationalTimeUnitDAO.findById(educationalTimeUnitId);
return EntityFactoryVault.buildFromDomainObject(educationalTimeUnit);
}
public EducationalTimeUnitEntity[] listEducationalTimeUnits() {
EducationalTimeUnitDAO educationalTimeUnitDAO = DAOFactory.getInstance().getEducationalTimeUnitDAO();
List<EducationalTimeUnit> educationalTimeUnits = educationalTimeUnitDAO.listUnarchived();
Collections.sort(educationalTimeUnits, new StringAttributeComparator("getName"));
return (EducationalTimeUnitEntity[]) EntityFactoryVault.buildFromDomainObjects(educationalTimeUnits);
}
public EducationalTimeUnitEntity createEducationalTimeUnit(@WebParam (name = "baseUnits") Double baseUnits, @WebParam (name = " name") String name) {
EducationalTimeUnitDAO educationalTimeUnitDAO = DAOFactory.getInstance().getEducationalTimeUnitDAO();
EducationalTimeUnit educationalTimeUnit = educationalTimeUnitDAO.create(baseUnits, name, "undefined");
validateEntity(educationalTimeUnit);
return EntityFactoryVault.buildFromDomainObject(educationalTimeUnit);
}
public AcademicTermEntity getAcademicTermById(@WebParam (name = "academicTermId") Long academicTermId) {
AcademicTermDAO academicTermDAO = DAOFactory.getInstance().getAcademicTermDAO();
AcademicTerm academicTerm = academicTermDAO.findById(academicTermId);
return EntityFactoryVault.buildFromDomainObject(academicTerm);
}
public AcademicTermEntity[] listAcademicTerms() {
AcademicTermDAO academicTermDAO = DAOFactory.getInstance().getAcademicTermDAO();
List<AcademicTerm> academicTerms = academicTermDAO.listUnarchived();
Collections.sort(academicTerms, new Comparator<AcademicTerm>() {
public int compare(AcademicTerm o1, AcademicTerm o2) {
return o1.getStartDate() == null ? -1 : o2.getStartDate() == null ? 1 : o1.getStartDate().compareTo(o2.getStartDate());
}
});
return (AcademicTermEntity[]) EntityFactoryVault.buildFromDomainObjects(academicTerms);
}
/*Dateformat: [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] */
public AcademicTermEntity createAcademicTerm(@WebParam (name = "name") String name, @WebParam (name = "startDate") Date startDate, @WebParam (name = "endDate") Date endDate) {
AcademicTermDAO academicTermDAO = DAOFactory.getInstance().getAcademicTermDAO();
AcademicTerm academicTerm = academicTermDAO.create(name, startDate, endDate);
validateEntity(academicTerm);
return EntityFactoryVault.buildFromDomainObject(academicTerm);
}
public void updateAcademicTerm(@WebParam (name = "academicTermId") Long academicTermId, @WebParam (name = "name") String name, @WebParam (name = "startDate") Date startDate, @WebParam (name = "endDate") Date endDate) {
AcademicTermDAO academicTermDAO = DAOFactory.getInstance().getAcademicTermDAO();
AcademicTerm academicTerm = academicTermDAO.findById(academicTermId);
academicTermDAO.update(academicTerm, name, startDate, endDate);
validateEntity(academicTerm);
}
public EducationSubtypeEntity createEducationSubtype(@WebParam (name = "educationTypeId") Long educationTypeId, @WebParam (name = "name") String name, @WebParam (name = "code") String code) {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
EducationSubtypeDAO educationSubtypeDAO = DAOFactory.getInstance().getEducationSubtypeDAO();
EducationType educationType = educationTypeDAO.findById(educationTypeId);
EducationSubtype educationSubtype = educationSubtypeDAO.create(educationType, name, code);
validateEntity(educationSubtype);
return EntityFactoryVault.buildFromDomainObject(educationSubtype);
}
public void updateEducationSubtype(@WebParam (name = "educationSubtypeId") Long educationSubtypeId, @WebParam (name = "name") String name, @WebParam (name = "code") String code) {
EducationSubtypeDAO educationSubtypeDAO = DAOFactory.getInstance().getEducationSubtypeDAO();
EducationSubtype educationSubtype = educationSubtypeDAO.findById(educationSubtypeId);
educationSubtypeDAO.update(educationSubtype, name, code);
validateEntity(educationSubtype);
}
public EducationTypeEntity createEducationType(@WebParam (name = "name") String name, @WebParam (name = "code") String code) {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
EducationType educationType = educationTypeDAO.create(name, code);
validateEntity(educationType);
return EntityFactoryVault.buildFromDomainObject(educationType);
}
public void updateEducationType(@WebParam (name = "educationTypeId") Long educationTypeId, @WebParam (name = "name") String name, @WebParam (name = "code") String code) {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
EducationType educationType = educationTypeDAO.findById(educationTypeId);
educationTypeDAO.update(educationType, name, code);
validateEntity(educationType);
}
public EducationSubtypeEntity getEducationSubtypeById(@WebParam (name = "educationSubtypeId") Long educationSubtypeId) {
EducationSubtypeDAO educationSubtypeDAO = DAOFactory.getInstance().getEducationSubtypeDAO();
return EntityFactoryVault.buildFromDomainObject(educationSubtypeDAO.findById(educationSubtypeId));
}
public EducationSubtypeEntity getEducationSubtypeByCode(@WebParam (name = "code") String code) {
EducationSubtypeDAO educationSubtypeDAO = DAOFactory.getInstance().getEducationSubtypeDAO();
return EntityFactoryVault.buildFromDomainObject(educationSubtypeDAO.findByCode(code));
}
public EducationTypeEntity getEducationTypeById(@WebParam (name = "educationTypeId") Long educationTypeId) {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
return EntityFactoryVault.buildFromDomainObject(educationTypeDAO.findById(educationTypeId));
}
public EducationTypeEntity getEducationTypeByCode(@WebParam (name = "code") String code) {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
return EntityFactoryVault.buildFromDomainObject(educationTypeDAO.findByCode(code));
}
public EducationTypeEntity[] listEducationTypes() {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
List<EducationType> educationTypes = educationTypeDAO.listUnarchived();
Collections.sort(educationTypes, new StringAttributeComparator("getName"));
return (EducationTypeEntity[]) EntityFactoryVault.buildFromDomainObjects(educationTypes);
}
public EducationSubtypeEntity[] listEducationSubtypesByEducationType(@WebParam (name = "educationTypeId") Long educationTypeId) {
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
EducationSubtypeDAO educationSubtypeDAO = DAOFactory.getInstance().getEducationSubtypeDAO();
EducationType educationType = educationTypeDAO.findById(educationTypeId);
List<EducationSubtype> educationSubtypes = educationSubtypeDAO.listByEducationType(educationType);
Collections.sort(educationSubtypes, new StringAttributeComparator("getName"));
return (EducationSubtypeEntity[]) EntityFactoryVault.buildFromDomainObjects(educationSubtypes);
}
public SubjectEntity getSubjectById(@WebParam (name = "subjectId") Long subjectId) {
SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO();
return EntityFactoryVault.buildFromDomainObject(subjectDAO.findById(subjectId));
}
public SubjectEntity getSubjectByCode(@WebParam (name = "code") String code) {
SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO();
return EntityFactoryVault.buildFromDomainObject(subjectDAO.findByCode(code));
}
public SchoolEntity[] listSchools() {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
List<School> schools = schoolDAO.listUnarchived();
Collections.sort(schools, new StringAttributeComparator("getName"));
return (SchoolEntity[]) EntityFactoryVault.buildFromDomainObjects(schools);
}
public SchoolEntity[] listSchoolsByVariable(@WebParam (name = "key") String key, @WebParam (name = "value") String value) {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
List<School> schools = schoolDAO.listByVariable(key, value);
Collections.sort(schools, new StringAttributeComparator("getName"));
return (SchoolEntity[]) EntityFactoryVault.buildFromDomainObjects(schools);
}
public StudyProgrammeEntity[] listStudyProgrammes() {
StudyProgrammeDAO studyProgrammeDAO = DAOFactory.getInstance().getStudyProgrammeDAO();
return (StudyProgrammeEntity[]) EntityFactoryVault.buildFromDomainObjects(studyProgrammeDAO.listUnarchived());
}
public SubjectEntity[] listSubjects() {
SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO();
List<Subject> subjects = subjectDAO.listUnarchived();
Collections.sort(subjects, new StringAttributeComparator("getName"));
return (SubjectEntity[]) EntityFactoryVault.buildFromDomainObjects(subjects);
}
public SubjectEntity createSubject(@WebParam (name = "code") String code, @WebParam (name = "name") String name, @WebParam (name = "educationTypeId") Long educationTypeId) {
SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO();
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
EducationType educationType = educationTypeId != null ? educationTypeDAO.findById(educationTypeId) : null;
Subject subject = subjectDAO.create(code, name, educationType);
validateEntity(subject);
return EntityFactoryVault.buildFromDomainObject(subject);
}
public void updateSubject(@WebParam (name = "subjectId") Long subjectId, @WebParam (name = "code") String code, @WebParam (name = "name") String name, @WebParam (name = "educationTypeId") Long educationTypeId) {
SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO();
EducationTypeDAO educationTypeDAO = DAOFactory.getInstance().getEducationTypeDAO();
Subject subject = subjectDAO.findById(subjectId);
EducationType educationType = educationTypeId != null ? educationTypeDAO.findById(educationTypeId) : null;
subjectDAO.update(subject, code, name, educationType);
validateEntity(subject);
}
public SchoolEntity createSchool(@WebParam (name = "code") String code, @WebParam (name = "name") String name) {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
// TODO: schoolField parameter
School school = schoolDAO.create(code, name, null, null);
validateEntity(school);
return EntityFactoryVault.buildFromDomainObject(school);
}
public SchoolEntity getSchoolById(@WebParam (name = "schoolId") Long schoolId) {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
return EntityFactoryVault.buildFromDomainObject(schoolDAO.findById(schoolId));
}
public void updateSchool(@WebParam (name = "schoolId") Long schoolId, @WebParam (name = "code") String code, @WebParam (name = "name") String name) {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
School school = schoolDAO.findById(schoolId);
// TODO: schoolField parameter
schoolDAO.update(school, code, name, school.getField());
validateEntity(school);
}
public String getSchoolVariable(@WebParam (name = "schoolId") Long schoolId, @WebParam (name = "key") String key) {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
SchoolVariableDAO schoolVariableDAO = DAOFactory.getInstance().getSchoolVariableDAO();
School school = schoolDAO.findById(schoolId);
return schoolVariableDAO.findValueBySchoolAndKey(school, key);
}
public void setSchoolVariable(@WebParam (name = "schoolId") Long schoolId, @WebParam (name = "key") String key, @WebParam (name = "value") String value) {
SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO();
SchoolVariableDAO schoolVariableDAO = DAOFactory.getInstance().getSchoolVariableDAO();
School school = schoolDAO.findById(schoolId);
schoolVariableDAO.setVariable(school, key, value);
}
public void updateAddress(@WebParam (name = "addressId") Long addressId, @WebParam (name = "defaultAddress") Boolean defaultAddress, @WebParam (name = "contactTypeId") Long contactTypeId,
@WebParam (name = "name") String name, @WebParam (name = "streetAddress") String streetAddress, @WebParam (name = "postalCode") String postalCode, @WebParam (name = "city") String city, @WebParam (name = "country") String country) {
AddressDAO addressDAO = DAOFactory.getInstance().getAddressDAO();
ContactTypeDAO contactTypeDAO = DAOFactory.getInstance().getContactTypeDAO();
Address address = addressDAO.findById(addressId);
ContactType contactType = contactTypeDAO.findById(contactTypeId);
addressDAO.update(address, defaultAddress, contactType, name, streetAddress, postalCode, city, country);
}
}