/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.flow.controller; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ConcurrentHashMap; import org.geoserver.flow.FlowController; import org.geoserver.ows.Request; /** * Base class for flow controllers using a queue * * @author Juan Marin, OpenGeo * */ public abstract class QueueController implements FlowController { /** * The size of each queue */ int queueSize; /** * The per request queue collection */ Map<String, TimedBlockingQueue> queues = new ConcurrentHashMap<String, TimedBlockingQueue>(); @Override public boolean requestIncoming(Request request, long timeout) { return false; } @Override public int getPriority() { return queueSize; } @SuppressWarnings("serial") protected static class TimedBlockingQueue extends ArrayBlockingQueue<Request> { long lastModified; public TimedBlockingQueue(int capacity, boolean fair) { super(capacity, fair); } @Override public void put(Request o) throws InterruptedException { super.put(o); lastModified = System.currentTimeMillis(); } @Override public boolean remove(Object o) { lastModified = System.currentTimeMillis(); return super.remove(o); } } }