/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.provider.base.blackboard;
import org.dlect.exception.DLectException;
import org.dlect.exception.DLectExceptionCause;
import org.dlect.logging.ProviderLogger;
import org.dlect.provider.DownloadProvider;
import org.dlect.provider.LectureProvider;
import org.dlect.provider.LoginProvider;
import org.dlect.provider.Provider;
import org.dlect.provider.SubjectProvider;
import org.dlect.provider.base.blackboard.download.BlackboardDownloadProvider;
import org.dlect.provider.base.blackboard.helper.BlackboardXmlParser;
import org.dlect.provider.base.blackboard.helper.BlackboardXmlParserImpl;
import org.dlect.provider.base.blackboard.helper.httpclient.BlackboardHttpClient;
import org.dlect.provider.base.blackboard.helper.httpclient.BlackboardHttpClientImpl;
import org.dlect.provider.base.blackboard.helper.provider.BlackboardProviderDetails;
import org.dlect.provider.base.blackboard.helper.provider.BlackboardProviderInformation;
import org.dlect.provider.base.blackboard.helper.provider.BlackboardProviderInitiliser;
import org.dlect.provider.base.blackboard.helper.provider.BlackboardProviderInitiliserImpl;
import org.dlect.provider.base.blackboard.helper.provider.BlackboardProviderInitiliserWithBackupImpl;
import org.dlect.provider.base.blackboard.lecture.BlackboardLectureProvider;
import org.dlect.provider.base.blackboard.login.BlackboardSslFormLoginProvider;
import org.dlect.provider.base.blackboard.subject.BlackboardSubjectProvider;
/**
*
* @author lee
*/
public class BlackboardBaseProvider implements Provider {
private final BlackboardSubjectCustomiser subjectCustomiser;
private final BlackboardLectureCustomiser lectureCustomiser;
private final BlackboardProviderInitiliser providerInitiliser;
private final BlackboardHttpClient httpClient;
private final BlackboardXmlParser xmlParser;
private LoginProvider loginProvider = null;
private SubjectProvider subjectProvider = null;
private LectureProvider lectureProvider = null;
private DownloadProvider downloadProvider = null;
public BlackboardBaseProvider(int providerCode, BlackboardSubjectCustomiser subjectCustomiser, BlackboardLectureCustomiser lectureCustomiser) {
this(subjectCustomiser, lectureCustomiser, new BlackboardProviderInitiliserImpl(providerCode),
new BlackboardHttpClientImpl(), new BlackboardXmlParserImpl());
}
public BlackboardBaseProvider(BlackboardProviderInformation providerInformation, BlackboardSubjectCustomiser subjectCustomiser, BlackboardLectureCustomiser lectureCustomiser) {
this(subjectCustomiser, lectureCustomiser, new BlackboardProviderInitiliserWithBackupImpl(providerInformation),
new BlackboardHttpClientImpl(), new BlackboardXmlParserImpl());
}
public BlackboardBaseProvider(BlackboardSubjectCustomiser subjectCustomiser,
BlackboardLectureCustomiser lectureCustomiser,
BlackboardProviderInitiliser providerInitiliser,
BlackboardHttpClient httpClient,
BlackboardXmlParser xmlParser) {
this.subjectCustomiser = subjectCustomiser;
this.lectureCustomiser = lectureCustomiser;
this.providerInitiliser = providerInitiliser;
this.httpClient = httpClient;
this.xmlParser = xmlParser;
}
@Override
public DownloadProvider getDownloadProvider() {
return downloadProvider;
}
@Override
public LectureProvider getLectureProvider() {
return lectureProvider;
}
@Override
public LoginProvider getLoginProvider() {
return loginProvider;
}
@Override
public SubjectProvider getSubjectProvider() {
return subjectProvider;
}
@Override
public void init() throws DLectException {
BlackboardProviderDetails u = providerInitiliser.getProviderDetails();
if (!u.isHttpAuth() && u.isSsl()) {
loginProvider = new BlackboardSslFormLoginProvider(u, httpClient, xmlParser);
} else {
ProviderLogger.LOGGER.error("Failed to load provider. DLect does not support the login type.");
throw new DLectException(DLectExceptionCause.ILLEGAL_PROVIDER_STATE, "The current implementation does not support the provider with the following details: " + u);
}
subjectProvider = new BlackboardSubjectProvider(u.getBaseUrl(), subjectCustomiser, httpClient, xmlParser);
lectureProvider = new BlackboardLectureProvider(u.getBaseUrl(), lectureCustomiser, httpClient, xmlParser);
downloadProvider = new BlackboardDownloadProvider(httpClient);
}
}