# IPBaseCallerConfiguration.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.impl.ipbase;

    import org.apache.synapse.commons.throttle.core.CallerConfiguration;
    import org.apache.synapse.commons.throttle.core.ThrottleConstants;

    /**
     * Metadata for controls a caller(IP based) - static data -The data have built form processing
     * policy
     */
    public class IPBaseCallerConfiguration extends CallerConfiguration {

        /* The ID of CallerConfiguration */
        private String ID;
        /* The First part of the iprange - group ip  */
        private String firstPartOfIPRange;
        /* The second part of the iprange - group ip  */
        private String secondPartOfIPRange;

        public IPBaseCallerConfiguration() {
            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 ipRange            - String value which represents IP Range
         */
        public IPBaseCallerConfiguration(long unitTime, int maximumRequest, long prohibitTimePeriod,
                                         String ipRange) {
            super(unitTime, maximumRequest, prohibitTimePeriod, ipRange);
        }

        /**
         * To get IP Range - Group IP
         *
         * @return String value of IP Range
         */
        public String getID() {
            return ID;
        }

        /**
         * To get First Part of IP Range
         *
         * @return String value of First Part Of Ip Range
         */
        public String getFirstPartOfIPRange() {
            return firstPartOfIPRange;
        }

        /**
         * To get Second Part of IP Range
         *
         * @return String value of Second Part Of IP Range
         */
        public String getSecondPartOfIPRange() {
            return secondPartOfIPRange;
        }

        /**
         * To set IP Range
         *
         * @param iprange The string representation of ip (single or group)
         */
        public void setID(String iprange) {
            String ipParts[] = iprange.trim().split("-");
            if (ipParts != null) {
                // if IP Range is unique one IP
                if (ipParts.length == 1) {
                    this.firstPartOfIPRange = ipParts[0];
                }
                // else if IP Range is group IP
                else if (ipParts.length == 2) {
                    this.firstPartOfIPRange = ipParts[0];
                    this.secondPartOfIPRange = ipParts[1];
                }
            }
            this.ID = iprange;
        }

        public int getType() {
            return ThrottleConstants.IP_BASE;
        }

        /**
         * To set First Part of IP Range
         *
         * @param firstPartOfIPRange - String value
         */
        public void setFirstPartOfIPRange(String firstPartOfIPRange) {
            this.firstPartOfIPRange = firstPartOfIPRange;
        }

        /**
         * To set Second Part Of IP Range
         *
         * @param secondPartOfIPRange - String value
         */
        public void setSecondPartOfIPRange(String secondPartOfIPRange) {
            this.secondPartOfIPRange = secondPartOfIPRange;
        }

    }