/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.controller;
import javax.annotation.Nullable;
import org.dlect.controller.data.DatabaseHandler;
import org.dlect.controller.event.ControllerListenable;
import org.dlect.controller.event.ControllerState;
import org.dlect.controller.event.ControllerType;
import org.dlect.events.EventID;
import org.dlect.exception.DLectException;
import org.dlect.provider.WrappedProvider;
import org.dlect.provider.loader.ProviderDetail;
import static org.dlect.helper.Conditions.checkNonNull;
import static org.dlect.model.helper.CommonSettingNames.*;
/**
*
* @author Lee Symes
*/
public class LoginController extends ControllerListenable<LoginController> {
private final MainController ctl;
public LoginController(MainController ctl) {
this.ctl = ctl;
}
public void configureLoginCredentials(ProviderDetail provider, String username, String password) {
checkNonNull(provider, "Provider");
checkNonNull(username, "Username");
checkNonNull(password, "Password");
DatabaseHandler db = ctl.getDatabaseHandler();
db.addEncryptedSetting(USERNAME, username);
db.addEncryptedSetting(PASSWORD, password);
db.addSetting(PROVIDER_CODE, provider.getCode());
}
public void doLogin() throws DLectException {
event(ControllerType.LOGIN).state(ControllerState.STARTED).fire();
boolean event = false;
try {
WrappedProvider provider = ctl.getProviderHelper().getProvider();
provider.doLogin();
event(ControllerType.LOGIN).state(ControllerState.COMPLETED).fire();
event = true;
} finally {
// Always fire a fail event. Even if a non-DLectException was thrown.
if (!event) {
event(ControllerType.LOGIN).state(ControllerState.FAILED).fire();
}
}
}
@Nullable
public ProviderDetail getSelectedProviderDetail() {
return ctl.getProviderHelper().getProviderDetail();
}
@Nullable
public String getUsername() {
return ctl.getDatabaseHandler().getEncryptedSetting(USERNAME).orNull();
}
@Nullable
public String getPassword() {
return ctl.getDatabaseHandler().getEncryptedSetting(PASSWORD).orNull();
}
@Override
public void init() {
// No Op.
}
public static enum LoginControllerEventID implements EventID {
LOGIN_SUCCEDED;
@Override
public Class<?> getAppliedClass() {
return LoginController.class;
}
@Override
public String getName() {
return name();
}
}
}