/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.mail.reader.mailbox;
import com.liferay.mail.reader.constants.MailPortletKeys;
import com.liferay.mail.reader.model.Account;
import com.liferay.mail.reader.service.AccountLocalService;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.UserLocalService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Scott Lee
*/
@Component(
immediate = true, property = {"javax.portlet.name=" + MailPortletKeys.MAIL},
service = MailboxFactoryUtil.class
)
public class MailboxFactoryUtil {
public static Mailbox getMailbox(
long userId, long accountId, String password)
throws PortalException {
User user = _userLocalService.getUser(userId);
Account account = _accountLocalService.getAccount(accountId);
MailboxFactory mailboxFactory = _mailboxFactories.get(
account.getProtocol());
if (mailboxFactory == null) {
throw new IllegalArgumentException(
"Invalid protocol " + account.getProtocol());
}
return mailboxFactory.getMailbox(user, account, password);
}
public static Mailbox getMailbox(long userId, String protocol)
throws PortalException {
User user = _userLocalService.getUser(userId);
MailboxFactory mailboxFactory = _mailboxFactories.get(protocol);
if (mailboxFactory == null) {
throw new IllegalArgumentException("Invalid protocol " + protocol);
}
return mailboxFactory.getMailbox(user, protocol);
}
public static List<MailboxFactory> getMailboxFactories() {
Set<String> protocols = _mailboxFactories.keySet();
List<MailboxFactory> mailboxFactories = new ArrayList<>();
for (String protocol : protocols) {
mailboxFactories.add(_mailboxFactories.get(protocol));
}
return mailboxFactories;
}
public void setMailboxFactories(
Map<String, MailboxFactory> mailboxFactories) {
_mailboxFactories = mailboxFactories;
}
@Reference(unbind = "-")
protected void setAccountLocalService(
AccountLocalService accountLocalService) {
_accountLocalService = accountLocalService;
}
@Reference(unbind = "-")
protected void setMailboxFactory(MailboxFactory mailboxFactory) {
_addMailboxFactory(
mailboxFactory.getMailboxFactoryName(), mailboxFactory);
}
@Reference(unbind = "-")
protected void setUserLocalService(UserLocalService userLocalService) {
_userLocalService = userLocalService;
}
private void _addMailboxFactory(
String mailboxFactoryName, MailboxFactory mailboxFactory) {
if (_mailboxFactories == null) {
_mailboxFactories = new ConcurrentHashMap<>();
}
_mailboxFactories.put(mailboxFactoryName, mailboxFactory);
}
private static AccountLocalService _accountLocalService;
private static Map<String, MailboxFactory> _mailboxFactories;
private static UserLocalService _userLocalService;
}