001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.hivemind.definition;
016    
017    /**
018     * Identifies the number of contributions allowed to a configuration extension point.
019     * 
020     * @author Howard Lewis Ship
021     */
022    public abstract class Occurances
023    {
024        /**
025         * An unbounded number, zero or more.
026         */
027        public static final Occurances UNBOUNDED = new Occurances("UNBOUNDED")
028        {
029            public boolean inRange(int count)
030            {
031                return true;
032            }
033        };
034    
035        /**
036         * Optional, may be zero or one, but not more.
037         */
038    
039        public static final Occurances OPTIONAL = new Occurances("OPTIONAL")
040        {
041            public boolean inRange(int count)
042            {
043                return count < 2;
044            }
045        };
046    
047        /**
048         * Exactly one is required.
049         */
050    
051        public static final Occurances REQUIRED = new Occurances("REQUIRED")
052        {
053            public boolean inRange(int count)
054            {
055                return count == 1;
056            }
057        };
058    
059        /**
060         * At least one is required.
061         */
062    
063        public static final Occurances ONE_PLUS = new Occurances("ONE_PLUS")
064        {
065            public boolean inRange(int count)
066            {
067                return count > 0;
068            }
069        };
070    
071        public static final Occurances NONE = new Occurances("NONE")
072        {
073            public boolean inRange(int count)
074            {
075                return count == 0;
076            }
077        };
078    
079        private String _name;
080    
081        private Occurances(String name)
082        {
083            _name = name;
084        }
085    
086        public String getName()
087        {
088            return _name;
089        }
090    
091        public String toString()
092        {
093            return "Occurances[" + _name + "]";
094        }
095    
096        /**
097         * Validates that an actual count is in range for the particular Occurances count.
098         * 
099         * @param count
100         *            the number of items to check. Should be zero or greater.
101         * @return true if count is a valid number in accordance to the range, false otherwise
102         */
103        public abstract boolean inRange(int count);
104    
105    }