Development Class Java

/*
 * Copyright 2008 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package org.dopdf.utils;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * The class that implements a simple LRU cache.
 *
 * @param  the type of key that will be held by this LRU cache.
 * @param  the type of value held by this LRU cache.
 * @author Deep Shah
 */
public class LRUCache {
    /** The backing linked hash map object that will implement the LRU algorithm for us. */
    private static final LinkedHashMap cache = new LinkedHashMap(Constants.Cache.MAX_CAPACITY,
            Constants.Cache.LOAD_FACTOR, true) {
        /**
         * {@inheritDoc}
         */
        @Override
        protected boolean removeEldestEntry(final Map.Entry eldest) {
            return size() > Constants.Cache.SIZE;
        }
    };
    /**
     * Puts the key value pair in the LinkedHashmap.
     * @param key the key value to put in the map.
     * @param value the value to put in the map.
     */
    public void put(final K key, final V value) {
        cache.put(key, value);
    }
    /**
     * The method that gets the value from the LRU cache for the given key.  If the value is not found null is returned.
     * @param key the key for which we have to find the value in the cache.
     * @return The value matching the passed in key.  Null if no match is found.
     */
    public V get(final K key) {
        return (V) cache.get(key);
    }
    /**
     * The method that returns true if the cache holds the given key.
     * @param key the key which we have to find in the cache.
     * @return true if the value against the given key is found, false otherwise.
     */
    public boolean containsKey(final K key) {
        return cache.containsKey(key);
    }
}
class Constants {
    /**
     * The class that holds constatns for the cache class
     *
     * @author Deep Shah
     */
    public class Cache {
        /**
         * The load factor for the cache.
         */
        public static final float LOAD_FACTOR = 0.75f;
        /**
         * The max size of the cahce.
         */
        public static final int SIZE = 15;
        /**
         * The max capacity of the cahce.
         */
        public static final int MAX_CAPACITY = ((int) (SIZE / LOAD_FACTOR) + 1);
    }
    /**
     * The class that holds the constants for the resources.
     *
     * @author Deep Shah
     */
    public class Resource {
        /**
         * The content type of jpeg images.
         */
        public static final String JPEG_CONTENT_TYPE = "image/jpeg";
        /**
         * The content type of png images.
         */
        public static final String PNG_CONTENT_TYPE = "image/png";
        /**
         * The content type of pdf document.
         */
        public static final String PDF_CONTENT_TYPE = "application/pdf";
        /**
         * The constant that represents the jpeg format.
         */
        public static final String JPEG_FORMAT = "jpeg";
        /**
         * The constant that represents the png format.
         */
        public static final String PNG_FORMAT = "png";
        /**
         * Text plain content type.
         */
        public static final String TEXT_CONTENT_TYPE = "text/plain";
        /**
         * The constant that represents the javascript format.
         */
        public static final String JAVASCRIPT_FORMAT = "js";
        /**
         * The constant that represents the css format.
         */
        public static final String CSS_FORMAT = "css";
        /**
         * The string pattern that identifies that the request is for a static resource.
         */
        public static final String STATIC_RESOURCE_PATTERN = ".+/static/.+(js|css|png)$";
        /**
         * The string pattern that identifies the download request.
         */
        public static final String DOWNLOAD_RESOURCE_PATTERN = ".+download/document*";
        /**
         * The pattern that identifies the pdf page request.
         */
        public static final String PDF_PAGE_RESOURCE_PATTERN = ".+/page/show*";
    }
    /**
     * The class that holds he PDFPage related constants.
     */
    public class PDFPage {
        /**
         * The constant representing the id key.
         */
        public static final String ID_KEY = "id";
        /**
         * The constant representing the strategy key.
         */
        public static final String STRATEGY_KEY = "strategy";
        /**
         * The constant representing the Page key.
         */
        public static final String PAGE_KEY = "page";
        /**
         * The size of the page to be rendered.
         */
        public static final String SIZE_KEY = "size";
    }
    /**
     * The constants for the DocumentHashingStrategy.
     *
     * @author Deep Shah
     */
    public enum PDFFetchingStrategy {
        /**
         * The constant that represents the LRU strategy.
         */
        LRU,
        /**
         * The constant that represents the SESSION strategy.
         */
        SESSION;
        /**
         * The method that returns an instance of PDFFetchingStrategy based on the strategy name passed as argument.
         *
         * @param pdfFetchingStrategyName the name of the strategy to use.  If null or empty is passed LRU will be returned.
         * @return The reference of PDFFetchingStrategy that matches the name passed.
         */
        public static PDFFetchingStrategy parse(final String pdfFetchingStrategyName) {
            if (pdfFetchingStrategyName == null
                    || pdfFetchingStrategyName.equals("")
                    || pdfFetchingStrategyName.equalsIgnoreCase(Constants.General.UNDEFINED)) return LRU;
            return valueOf(pdfFetchingStrategyName.toUpperCase());
        }
    }
    /**
     * The enum that holds various page sizes.
     *
     * @author Deep Shah
     */
    public enum PageSize {
        /**
         * The small page size.
         */
        SMALL(392, 554),
        /**
         * The medium page size.
         */
        MEDIUM(617, 873),
        /**
         * The large page size.
         */
        LARGE(853, 1207);
        /**
         * The width represented by this size.
         */
        private int width;
        /**
         * The height represented by this size.
         */
        private int height;
        /**
         * The constructor that takes in width and height as argument.
         *
         * @param width  the width.
         * @param height the height.
         */
        private PageSize(final int width, final int height) {
            this.width = width;
            this.height = height;
        }
        /**
         * The method that will return an instance of page size based on the string value of size passed.
         * If null of empty string is passed medium will be returned.
         *
         * @param size the string value of size to use.
         * @return the PageSize reference that matches the size passed in.
         */
        public static PageSize parse(final String size) {
            if (null == size || size.equals("") || size.equalsIgnoreCase(Constants.General.UNDEFINED)) return MEDIUM;
            return valueOf(size.toUpperCase());
        }
        /**
         * The getter for the width.
         *
         * @return the value held.
         */
        public int getWidth() {
            return width;
        }
        /**
         * The getter for the height.
         *
         * @return the value held.
         */
        public int getHeight() {
            return height;
        }
    }
    /**
     * The class that holds information about the general constants.
     *
     * @author Deep Shah
     */
    public class General {
        /**
         * The undefined value constant.
         */
        public static final String UNDEFINED = "UNDEFINED";
    }
}