001    package biweekly.parameter;
002    
003    /*
004     Copyright (c) 2013, Michael Angstadt
005     All rights reserved.
006    
007     Redistribution and use in source and binary forms, with or without
008     modification, are permitted provided that the following conditions are met: 
009    
010     1. Redistributions of source code must retain the above copyright notice, this
011     list of conditions and the following disclaimer. 
012     2. Redistributions in binary form must reproduce the above copyright notice,
013     this list of conditions and the following disclaimer in the documentation
014     and/or other materials provided with the distribution. 
015    
016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
026     */
027    
028    /**
029     * Defines the data type of a property's value.
030     * @author Michael Angstadt
031     * @see <a href="http://tools.ietf.org/html/rfc5545#page-29">RFC 5545
032     * p.29-50</a>
033     */
034    public class Value extends EnumParameterValue {
035            private static final ICalParameterCaseClasses<Value> enums = new ICalParameterCaseClasses<Value>(Value.class);
036    
037            public static final Value BINARY = new Value("BINARY");
038            public static final Value BOOLEAN = new Value("BOOLEAN");
039            public static final Value CAL_ADDRESS = new Value("CAL-ADDRESS");
040            public static final Value DATE = new Value("DATE");
041            public static final Value DATE_TIME = new Value("DATE-TIME");
042            public static final Value DURATION = new Value("DURATION");
043            public static final Value FLOAT = new Value("FLOAT");
044            public static final Value INTEGER = new Value("INTEGER");
045            public static final Value PERIOD = new Value("PERIOD");
046            public static final Value RECUR = new Value("RECUR");
047            public static final Value TEXT = new Value("TEXT");
048            public static final Value TIME = new Value("TIME");
049            public static final Value URI = new Value("URI");
050            public static final Value UTC_OFFSET = new Value("UTC-OFFSET");
051    
052            private Value(String value) {
053                    super(value);
054            }
055    
056            /**
057             * Searches for a parameter value that is defined as a static constant in
058             * this class.
059             * @param value the parameter value
060             * @return the object or null if not found
061             */
062            public static Value find(String value) {
063                    return enums.find(value);
064            }
065    
066            /**
067             * Searches for a parameter value and creates one if it cannot be found. All
068             * objects are guaranteed to be unique, so they can be compared with
069             * <code>==</code> equality.
070             * @param value the parameter value
071             * @return the object
072             */
073            public static Value get(String value) {
074                    return enums.get(value);
075            }
076    }