001    package ezvcard.types;
002    
003    import ezvcard.parameters.TypeParameter;
004    
005    /*
006    Copyright (c) 2012, Michael Angstadt
007    All rights reserved.
008    
009    Redistribution and use in source and binary forms, with or without
010    modification, are permitted provided that the following conditions are met: 
011    
012    1. Redistributions of source code must retain the above copyright notice, this
013       list of conditions and the following disclaimer. 
014    2. Redistributions in binary form must reproduce the above copyright notice,
015       this list of conditions and the following disclaimer in the documentation
016       and/or other materials provided with the distribution. 
017    
018    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
019    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
020    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
025    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028    
029    The views and conclusions contained in the software and documentation are those
030    of the authors and should not be interpreted as representing official policies, 
031    either expressed or implied, of the FreeBSD Project.
032    */
033    
034    /**
035     * Represents a vCard Type that has a TYPE parameter that contains only one
036     * value. For example, the PHOTO type. This class contrasts with the
037     * {@link MultiValuedTypeParameterType} class.
038     * @author Michael Angstadt
039     */
040    public abstract class SingleValuedTypeParameterType<T extends TypeParameter> extends TypeParameterType<T> {
041            public SingleValuedTypeParameterType(String name) {
042                    super(name);
043            }
044    
045            /**
046             * Gets the value of the TYPE parameter.
047             * @return the TYPE value or null if it has no TYPE value
048             */
049            public T getType() {
050                    String type = subTypes.getType();
051                    return (type == null) ? null : buildTypeObj(type);
052            }
053    
054            /**
055             * Sets the value of the TYPE parameter.
056             * @param type the TYPE value to set
057             */
058            public void setType(T type) {
059                    subTypes.setType(type.getValue());
060            }
061    }