Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright 2016 - 2024 Acosix GmbH
*
* 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.acosix.alfresco.utility.repo.email.imap;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.util.PropertyCheck;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PlaceholderConfigurerSupport;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.util.PropertyPlaceholderHelper;
/**
* Instances of this class generate job definition and trigger beans for IMAP synchronisation.
*
* @author Axel Faust
*/
public class SynchJobBeanRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor, InitializingBean
{
protected String propertyPrefix;
protected Properties propertiesSource;
protected String placeholderPrefix = PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX;
protected String placeholderSuffix = PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_SUFFIX;
protected String valueSeparator = PlaceholderConfigurerSupport.DEFAULT_VALUE_SEPARATOR;
protected PropertyPlaceholderHelper placeholderHelper;
protected String accessorBeanName;
protected String baseTriggerBeanName;
protected String baseDetailBeanName;
/**
* @param propertyPrefix
* the propertyPrefix to set
*/
public void setPropertyPrefix(final String propertyPrefix)
{
this.propertyPrefix = propertyPrefix;
}
/**
* Sets the properties collection to use when emitting bean definitions.
*
* @param propertiesSource
* the propertiesSource to set
*/
public void setPropertiesSource(final Properties propertiesSource)
{
this.propertiesSource = propertiesSource;
}
/**
* @param placeholderPrefix
* the placeholderPrefix to set
*/
public void setPlaceholderPrefix(final String placeholderPrefix)
{
this.placeholderPrefix = placeholderPrefix;
}
/**
* @param placeholderSuffix
* the placeholderSuffix to set
*/
public void setPlaceholderSuffix(final String placeholderSuffix)
{
this.placeholderSuffix = placeholderSuffix;
}
/**
* @param valueSeparator
* the valueSeparator to set
*/
public void setValueSeparator(final String valueSeparator)
{
this.valueSeparator = valueSeparator;
}
/**
* @param accessorBeanName
* the accessorBeanName to set
*/
public void setAccessorBeanName(final String accessorBeanName)
{
this.accessorBeanName = accessorBeanName;
}
/**
* @param baseTriggerBeanName
* the baseTriggerBeanName to set
*/
public void setBaseTriggerBeanName(final String baseTriggerBeanName)
{
this.baseTriggerBeanName = baseTriggerBeanName;
}
/**
* @param baseDetailBeanName
* the baseDetailBeanName to set
*/
public void setBaseDetailBeanName(final String baseDetailBeanName)
{
this.baseDetailBeanName = baseDetailBeanName;
}
/**
*
* {@inheritDoc}
*/
@Override
public void afterPropertiesSet()
{
PropertyCheck.mandatory(this, "propertiesSource", this.propertiesSource);
PropertyCheck.mandatory(this, "propertyPrefix", this.propertyPrefix);
PropertyCheck.mandatory(this, "accessorBeanName", this.accessorBeanName);
PropertyCheck.mandatory(this, "baseTriggerBeanName", this.baseTriggerBeanName);
PropertyCheck.mandatory(this, "baseDetailBeanName", this.baseDetailBeanName);
this.placeholderHelper = new PropertyPlaceholderHelper(this.placeholderPrefix, this.placeholderSuffix, this.valueSeparator, true);
}
/**
* {@inheritDoc}
*/
@Override
public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException
{
// NO-OP
}
/**
* {@inheritDoc}
*/
@Override
public void postProcessBeanDefinitionRegistry(final BeanDefinitionRegistry registry) throws BeansException
{
final String enabledStr = this.getResolvedProperty(".job.enabled", "false", false);
if (Boolean.parseBoolean(enabledStr))
{
final ManagedList triggerReferences = new ManagedList<>();
final String configNames = this.getResolvedProperty(".configNames", "", false);
final String[] configNamesArr = configNames.split(",");
for (final String configName : configNamesArr)
{
if (!configName.trim().isEmpty())
{
final String triggerBeanName = this.setupJob(registry, configName);
triggerReferences.add(new RuntimeBeanReference(triggerBeanName));
}
}
final BeanDefinition accessorDef = registry.getBeanDefinition(this.accessorBeanName);
accessorDef.getPropertyValues().addPropertyValue("triggersGen", triggerReferences);
}
}
protected String setupJob(final BeanDefinitionRegistry registry, final String configName)
{
final String beanNamePrefix = this.propertyPrefix + "." + configName;
final String detailBeanName = beanNamePrefix + ".jobDetail";
final Config config = this.readImapConfig(configName);
final GenericBeanDefinition detailDef = new GenericBeanDefinition();
detailDef.setParentName(this.baseDetailBeanName);
final ManagedMap