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 }