/*******************************************************************************
* Copyright 2015 xWic group (http://www.xwic.de)
*
* 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 de.jwic.maildemo.main;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import de.jwic.maildemo.api.AuthenticationFailedException;
import de.jwic.maildemo.api.IMail;
import de.jwic.maildemo.api.IMailServer;
import de.jwic.maildemo.api.ISession;
/**
* The core model for the MailDemo application.
* @author Florian Lippisch
*/
public class MailModel implements Serializable {
private IMailServer mailServer;
private ISession session = null;
private IMail selectedMail = null;
private List listeners = Collections.synchronizedList(new ArrayList());
private final static int EVENT_LOGON = 1;
private final static int EVENT_LOGOUT = 2;
private final static int EVENT_MAILSELECTION = 3;
/**
* Constructor.
* @param mailServer
*/
public MailModel(IMailServer mailServer) {
this.mailServer = mailServer;
}
/**
* Add a MailModelListener.
* @param listener
*/
public void addMailModelListener(IMailModelListener listener) {
listeners.add(listener);
}
/**
* Remove a MailModelListener.
* @param listener
*/
public void removeMailModelListener(IMailModelListener listener) {
listeners.remove(listener);
}
/**
* Fire an event.
* @param eventType
* @param event
*/
private void fireEvent(int eventType, MailModelEvent event) {
Object[] lst = listeners.toArray();
for (int i = 0; i < lst.length; i++) {
IMailModelListener listener = (IMailModelListener)lst[i];
switch (eventType) {
case EVENT_LOGON:
listener.logonSuccess(event);
break;
case EVENT_LOGOUT:
listener.logoutSuccess(event);
break;
case EVENT_MAILSELECTION:
listener.mailSelected(event);
break;
}
}
}
/**
* Logon to the server.
* @param username
* @param password
* @return
* @throws AuthenticationFailedException
*/
public ISession logon(String username, String password) throws AuthenticationFailedException {
session = mailServer.logon(username, password);
fireEvent(EVENT_LOGON, new MailModelEvent(this));
return session;
}
/**
* Logout the current user and close the session.
*/
public void logout() {
session.close();
fireEvent(EVENT_LOGOUT, new MailModelEvent(this));
}
/**
* @return the session
*/
public ISession getSession() {
return session;
}
/**
* @return the selectedMail
*/
public IMail getSelectedMail() {
return selectedMail;
}
/**
* @param selectedMail the selectedMail to set
*/
public void setSelectedMail(IMail selectedMail) {
this.selectedMail = selectedMail;
fireEvent(EVENT_MAILSELECTION, new MailModelEvent(this, selectedMail));
}
}