/** * 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; }