All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.contextfw.web.application.internal.service.WebApplicationContextHandler Maven / Gradle / Ivy

package net.contextfw.web.application.internal.service;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

import net.contextfw.web.application.WebApplicationHandle;
import net.contextfw.web.application.configuration.Configuration;
import net.contextfw.web.application.lifecycle.PageFlowFilter;

public class WebApplicationContextHandler {

    // private Logger logger = LoggerFactory.getLogger(WebApplicationContextHandler.class);
    
    private final long maxInactivity;
    
    public WebApplicationContextHandler(Configuration configuration, 
            PageFlowFilter pageFlowFilter) {
        maxInactivity = configuration.get(Configuration.MAX_INACTIVITY);
        this.pageFlowFilter = pageFlowFilter;
    }

    private final PageFlowFilter pageFlowFilter;
    
    private volatile static Map contexts = 
        new HashMap();

    public synchronized int refreshApplication(WebApplicationHandle handle) {
        WebApplicationContext context = contexts.get(handle);
        context.setExpires(System.currentTimeMillis() + maxInactivity);
        context.incrementUpdateCount();
        return context.getUpdateCount();
    }

    public int getContextCount() {
        return contexts.size();
    }
    
    public synchronized WebApplicationContext getContext(WebApplicationHandle handle) {
        return contexts.get(handle);
    }

    public synchronized WebApplicationContext getContext(String handleKey) {
        return contexts.get(new WebApplicationHandle(handleKey));
    }

    public synchronized void addContext(WebApplicationContext context) {
        contexts.put(context.getHandle(), context);
    }

    public synchronized void removeExpiredApplications() {
        long timestamp = System.currentTimeMillis();
        
        Iterator iterator = contexts.values().iterator();

        while (iterator.hasNext()) {
            WebApplicationContext context = iterator.next();
            if (timestamp > context.getExpires()) {
                iterator.remove();
                pageFlowFilter.pageExpired(
                        getContextCount(),
                        context.getRemoteAddr(), 
                        context.getHandle().getKey());
            }
        }
    }

    public synchronized WebApplicationHandle createNewHandle() {
        String key = UUID.randomUUID().toString();

        while (contexts.containsKey(key)) {
            key = UUID.randomUUID().toString();
        }

        WebApplicationHandle handle = new WebApplicationHandle(key);

        return handle;
    }

    public synchronized void removeApplication(WebApplicationHandle handle) {
        contexts.remove(handle);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy