/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive.velocity; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.app.event.EventCartridge; import org.apache.velocity.app.event.ReferenceInsertionEventHandler; import org.apache.velocity.exception.VelocityException; import org.ldaptive.SearchFilter; import org.ldaptive.auth.AbstractSearchDnResolver; import org.ldaptive.auth.User; /** * Base class for {@link Template} based search dn resolvers. * * @author Middleware Services */ public abstract class AbstractTemplateSearchDnResolver extends AbstractSearchDnResolver { /** Template. */ private final Template template; /** Event handler used for escaping. */ private ReferenceInsertionEventHandler eventHandler = new EscapingReferenceInsertionEventHandler(); /** * Creates a new abstract template search DN resolver. * * @param engine velocity engine * @param filter filter template * * @throws VelocityException if velocity is not configured properly or the filter template is invalid */ public AbstractTemplateSearchDnResolver(final VelocityEngine engine, final String filter) throws VelocityException { template = new Template(engine, filter); setUserFilter(filter); } /** * Returns the template. * * @return template */ public Template getTemplate() { return template; } @Override protected SearchFilter createSearchFilter(final User user) { final SearchFilter filter = new SearchFilter(); if (user != null && user.getContext() != null) { final VelocityContext context = (VelocityContext) user.getContext(); final EventCartridge cartridge = new EventCartridge(); cartridge.addEventHandler(eventHandler); cartridge.attachToContext(context); final String result = template.merge(context); if (result != null) { filter.setFilter(result.trim()); } } else { logger.warn("Search filter cannot be created, user input was empty or null"); } return filter; } }