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

org.mapfish.print.servlet.registry.BasicRegistry Maven / Gradle / Ivy

There is a newer version: 3.22.0
Show newest version
package org.mapfish.print.servlet.registry;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.json.JSONException;
import org.json.JSONObject;
import org.mapfish.print.ExceptionUtils;

import java.net.URI;
import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;

/**
 * A simple implementation of {@link org.mapfish.print.servlet.registry.Registry} based on a {@link
 * java.util.HashMap}.
 */
public class BasicRegistry implements Registry {
    private static final int TIME_TO_KEEP_AFTER_ACCESS = 30;
    private Cache registry;
    private int timeToKeepAfterAccessInMinutes = TIME_TO_KEEP_AFTER_ACCESS;

    public final void setTimeToKeepAfterAccessInMinutes(final int timeToKeepAfterAccessInMinutes) {
        this.timeToKeepAfterAccessInMinutes = timeToKeepAfterAccessInMinutes;
    }

    @PostConstruct
    private void init() {
        this.registry = CacheBuilder.newBuilder().
                concurrencyLevel(1).
                expireAfterAccess(this.timeToKeepAfterAccessInMinutes, TimeUnit.MINUTES).build();
    }

    @Override
    public final long getTimeToKeepAfterAccessInMillis() {
        return TimeUnit.MINUTES.toMillis(this.timeToKeepAfterAccessInMinutes);
    }

    @Override
    public final synchronized boolean containsKey(final String key) {
        return this.registry.getIfPresent(key) != null;
    }

    @Override
    public final synchronized void put(final String key, final URI value) {
        this.registry.put(key, value);
    }

    @Override
    public final synchronized long incrementLong(final String key, final long amount) {
        long newValue = opt(key, 0L) + amount;
        put(key, newValue);
        return newValue;
    }

    @Override
    public final synchronized int incrementInt(final String key, final int amount) {
        int newValue = opt(key, 0) + amount;
        put(key, newValue);
        return newValue;
    }

    @Override
    public final synchronized URI getURI(final String key) {
        return (URI) this.registry.getIfPresent(key);
    }

    @Override
    public final synchronized void put(final String key, final String value) {
        this.registry.put(key, value);
    }

    @Override
    public final synchronized String getString(final String key) {
        return (String) this.registry.getIfPresent(key);
    }

    @Override
    public final synchronized void put(final String key, final Number value) {
        this.registry.put(key, value);
    }

    @Override
    public final synchronized Number getNumber(final String key) {
        return (Number) this.registry.getIfPresent(key);
    }

    @Override
    public final synchronized  T opt(final String key, final T defaultValue) {
        @SuppressWarnings("unchecked")
        T value = (T) this.registry.getIfPresent(key);
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    @Override
    public final synchronized void put(final String key, final JSONObject value) {
        // convert to string.  We don't want mutable values in the registry
        this.registry.put(key, value.toString());
    }

    @Override
    public final synchronized JSONObject getJSON(final String key) {
        String source;
        synchronized (this) {
            source = (String) this.registry.getIfPresent(key);
        }
        try {
            return new JSONObject(source);
        } catch (JSONException e) {
            throw ExceptionUtils.getRuntimeException(e);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy