# CallerConfiguration.java

    /*
    * Copyright 2005,2006 WSO2, Inc. http://wso2.com
    *
    * 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.apache.synapse.commons.throttle.core;

    /**
     * All the configuration data for a caller – this data have been defined according to the policy
     */

    public abstract class CallerConfiguration {

        /* The time window */
        private long unitTime;

        /* The maximum number of Request that should have allowed for caller */
        private int maximumRequest;

        /* The Time Period which access of caller should have denied if Maximum Number
        of Request had reached */
        private long prohibitTimePeriod;

        /* The int value that indicate that access is fully denied/allowed or controlled for this IP */
        private int accessState = ThrottleConstants.ACCESS_CONTROLLED;

        protected CallerConfiguration() {
            super();

        }

        /**
         * The Constructor with all configuration data
         *
         * @param unitTime           - long value which represents Unit Time Window
         * @param maximumRequest     - int value which represents Maximum Request
         * @param prohibitTimePeriod - long value which represents Prohibit Time after Max request came
         * @param ID                 - String value which represents ID
         */
        protected CallerConfiguration(long unitTime, int maximumRequest, long prohibitTimePeriod,
                                      String ID) {
            this();
            this.unitTime = unitTime;
            this.maximumRequest = maximumRequest;
            this.prohibitTimePeriod = prohibitTimePeriod;
            setID(ID);
        }

        /**
         * To get access state
         *
         * @return int value indicate access state
         */
        public int getAccessState() {
            return accessState;
        }

        /**
         * To get Maximum Request
         *
         * @return int value of Maximum Request Count
         */
        public int getMaximumRequestPerUnitTime() {
            return maximumRequest;
        }

        /**
         * To get UnitTime
         *
         * @return long value of Unit Time
         */
        public long getUnitTime() {
            return unitTime;

        }

        /**
         * To get prohibit time period
         *
         * @return long value of prohibit time period
         */
        public long getProhibitTimePeriod() {
            return prohibitTimePeriod;
        }

        /**
         * To set Maximum Request
         *
         * @param maximumRequest -int value
         */
        public void setMaximumRequestPerUnitTime(int maximumRequest) {
            this.maximumRequest = maximumRequest;

        }

        /**
         * To set Unit Time
         *
         * @param unitTime - long value
         */
        public void setUnitTime(long unitTime) {
            this.unitTime = unitTime;
        }

        /**
         * To set Prohibit Time Period
         *
         * @param prohibitTimePeriod -long value
         */
        public void setProhibitTimePeriod(long prohibitTimePeriod) {
            this.prohibitTimePeriod = prohibitTimePeriod;
        }

        /**
         * To set access state
         *
         * @param accessState caller access state , allow,deny and control
         */
        public void setAccessState(int accessState) {
            this.accessState = accessState;
        }

        /**
         * To get ID
         *
         * @return String value of ID
         */
        public abstract String getID();

        /**
         * To set ID
         *
         * @param ID The id of caller
         */
        public abstract void setID(String ID);

        /**
         * To get the type of the throttle
         *
         * @return the type of the throttle
         */
        public abstract int getType();

    }