Hi smacdonald2008 , this is what we are doing. so you suggest us to write @Activate to get the session & @Deactivate to destroy the session ?
package com.xyz.help.conteenginecore.listener;
import java.util.List;
import java.util.Optional;
import com.adobe.cq.social.community.api.CommunityConstants;
import com.xyz.help.conteenginecore.Constants;
import com.xyz.help.conteenginecore.ContentModel;
import com.xyz.help.conteenginecore.ContentModelService;
import com.google.common.annotations.VisibleForTesting;
import javax.annotation.Nonnull;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.resource.observation.ResourceChange;
import org.apache.sling.api.resource.observation.ResourceChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Listens changing of resources, and in case when was added "articelNo"
* property, adding generated "articleId" property to the same node.
*/
@Component(immediate = true)
@Service
@Properties(value = { @Property(name = ResourceChangeListener.PATHS, value = { CommunityConstants.CONTENT_ROOT_PATH }),
@Property(name = ResourceChangeListener.CHANGES, value = { "ADDED", "CHANGED" }, propertyPrivate = true) })
public class GenerateArticleIdOnAddingArticleNumber implements ResourceChangeListener {
private static final Logger LOG = LoggerFactory.getLogger(GenerateArticleIdOnAddingArticleNumber.class);
@Reference
private ResourceResolverFactory resourceResolverFactory;
@Reference
private ContentModelService contentModelService;
@Override
public void onChange(@Nonnull List<ResourceChange> changes) {
try (ResourceResolver resolver = resourceResolverFactory
.getServiceResourceResolver(Constants.CONTENT_ENGINE_AUTH_INFO)) {
changes.stream().filter(resourceChange -> resourceChange.getAddedPropertyNames() != null)
.filter(resourceChange -> !resourceChange.getAddedPropertyNames().isEmpty())
.filter(resourceChange -> resourceChange.getAddedPropertyNames()
.contains(ContentModel.HelpArticle.PN_ARTICLE_NUMBER))
.forEach(resourceChange -> {
addArticleIdProperty(resourceChange, resolver);
addDefClassificationProperty(resourceChange, resolver);
});
resolver.commit();
} catch (LoginException e) {
LOG.error("Can't perform action", e);
} catch (PersistenceException e) {
LOG.error("Can't perform action", e);
}
}
private void addArticleIdProperty(ResourceChange resourceChange, ResourceResolver resourceResolver) {
Resource resource = resourceResolver.resolve(resourceChange.getPath());
Optional.ofNullable(resource.adaptTo(ModifiableValueMap.class)).ifPresent(valueMap -> valueMap
.put(ContentModel.HelpArticle.PN_ARTICLE_ID, contentModelService.generateArticleId(resource)));
}
private void addDefClassificationProperty(ResourceChange resourceChange, ResourceResolver resourceResolver) {
Resource resource = resourceResolver.resolve(resourceChange.getPath());
Optional.ofNullable(resource.adaptTo(ModifiableValueMap.class)).ifPresent(
valueMap -> valueMap.put(ContentModel.HelpArticle.PN_CLASSIFICATION, "ArticleClassification:help"));
}
@VisibleForTesting
void bindResourceResolverFactory(ResourceResolverFactory resolverFactory) {
this.resourceResolverFactory = resolverFactory;
}
@VisibleForTesting
void bindContentModelService(ContentModelService contentModelService) {
this.contentModelService = contentModelService;
}
}
24.04.2019 09:49:34.993 *INFO* [Background Update com.xyz.help.content-engine-core-bundle (833)] com.xyz.help.conteenginecore.listener.GenerateArticleIdOnAddingArticleNumber activating ExampleObservation
24.04.2019 09:49:35.162 *ERROR* [FelixDispatchQueue] org.apache.sling.resourceresolver FrameworkEvent ERROR (java.lang.NullPointerException)