package com.wooki.services.security;
import java.util.Map;
import org.apache.tapestry5.EventContext;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.runtime.Component;
import org.apache.tapestry5.services.ComponentSource;
import org.apache.tapestry5.services.InvalidationListener;
public class ActivationContextManagerImpl implements ActivationContextManager, InvalidationListener
{
@Inject
private ComponentSource source;
/**
* This map store all the activation context definition for a given page
*/
private Map<String, ActivationContextDefinition> definition = CollectionFactory
.newCaseInsensitiveMap();
public boolean checkContext(String pageName, EventContext ctx)
{
Component page = source.getPage(pageName);
ActivationContextDefinition def = getDefinition(pageName, page.getClass());
return def.findMatchingMethod(pageName, ctx);
}
/**
* Get the definition from Map or create it and return it.
*
* @param pageName
* @param clazz
* @return
*/
private ActivationContextDefinition getDefinition(String pageName, Class<?> clazz)
{
synchronized (this.definition)
{
if (definition.containsKey(pageName)) { return definition.get(pageName); }
}
ActivationContextDefinition def = new ActivationContextDefinition(clazz);
synchronized (this.definition)
{
this.definition.put(pageName, def);
}
return def;
}
public synchronized void objectWasInvalidated()
{
this.definition.clear();
}
}