/**
* 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.portal.security.ldap.internal.messaging;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.BaseMessageListener;
import com.liferay.portal.kernel.messaging.Destination;
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.scheduler.SchedulerEngineHelper;
import com.liferay.portal.kernel.scheduler.SchedulerEntry;
import com.liferay.portal.kernel.scheduler.SchedulerEntryImpl;
import com.liferay.portal.kernel.scheduler.TimeUnit;
import com.liferay.portal.kernel.scheduler.Trigger;
import com.liferay.portal.kernel.scheduler.TriggerFactory;
import com.liferay.portal.kernel.service.CompanyLocalService;
import com.liferay.portal.security.ldap.configuration.ConfigurationProvider;
import com.liferay.portal.security.ldap.exportimport.LDAPUserImporter;
import com.liferay.portal.security.ldap.exportimport.configuration.LDAPImportConfiguration;
import com.liferay.portal.security.ldap.internal.constants.LDAPDestinationNames;
import java.util.List;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferencePolicyOption;
/**
* @author Shuyang Zhou
*/
@Component(immediate = true, service = UserImportMessageListener.class)
public class UserImportMessageListener extends BaseMessageListener {
@Activate
@Modified
protected void activate() {
LDAPImportConfiguration ldapImportConfiguration =
_ldapImportConfigurationProvider.getConfiguration(0L);
int interval = ldapImportConfiguration.importInterval();
if (_log.isDebugEnabled()) {
_log.debug(
"LDAP user imports will occur every " + interval + " minutes");
}
Class<?> clazz = getClass();
String className = clazz.getName();
Trigger trigger = _triggerFactory.createTrigger(
className, className, null, null, interval, TimeUnit.MINUTE);
SchedulerEntry schedulerEntry = new SchedulerEntryImpl(
className, trigger);
_schedulerEngineHelper.register(
this, schedulerEntry,
LDAPDestinationNames.SCHEDULED_USER_LDAP_IMPORT);
}
@Deactivate
protected void deactivate() {
_schedulerEngineHelper.unregister(this);
}
@Override
protected void doReceive(Message message) throws Exception {
long time =
System.currentTimeMillis() - _ldapUserImporter.getLastImportTime();
time = Math.round(time / 60000.0);
List<Company> companies = _companyLocalService.getCompanies(false);
for (Company company : companies) {
long companyId = company.getCompanyId();
LDAPImportConfiguration ldapImportConfiguration =
_ldapImportConfigurationProvider.getConfiguration(companyId);
if (!ldapImportConfiguration.importEnabled()) {
continue;
}
if (ldapImportConfiguration.importInterval() <= 0) {
if (_log.isDebugEnabled()) {
_log.debug(
"Skipping LDAP user import for company " + companyId);
}
return;
}
if (time >= ldapImportConfiguration.importInterval()) {
_ldapUserImporter.importUsers(companyId);
}
}
}
@Reference(unbind = "-")
protected void setCompanyLocalService(
CompanyLocalService companyLocalService) {
_companyLocalService = companyLocalService;
}
@Reference(
target = "(destination.name=" + LDAPDestinationNames.SCHEDULED_USER_LDAP_IMPORT + ")",
unbind = "-"
)
protected void setDestination(Destination destination) {
}
@Reference(
target = "(factoryPid=com.liferay.portal.security.ldap.exportimport.configuration.LDAPImportConfiguration)",
unbind = "-"
)
protected void setLDAPImportConfigurationProvider(
ConfigurationProvider<LDAPImportConfiguration>
ldapImportConfigurationProvider) {
_ldapImportConfigurationProvider = ldapImportConfigurationProvider;
}
@Reference(policyOption = ReferencePolicyOption.GREEDY, unbind = "-")
protected void setLdapUserImporter(LDAPUserImporter ldapUserImporter) {
_ldapUserImporter = ldapUserImporter;
}
@Reference(unbind = "-")
protected void setSchedulerEngineHelper(
SchedulerEngineHelper schedulerEngineHelper) {
_schedulerEngineHelper = schedulerEngineHelper;
}
@Reference(unbind = "-")
protected void setTriggerFactory(TriggerFactory triggerFactory) {
}
private static final Log _log = LogFactoryUtil.getLog(
UserImportMessageListener.class);
private CompanyLocalService _companyLocalService;
private ConfigurationProvider<LDAPImportConfiguration>
_ldapImportConfigurationProvider;
private LDAPUserImporter _ldapUserImporter;
private SchedulerEngineHelper _schedulerEngineHelper;
@Reference
private TriggerFactory _triggerFactory;
}