001package ezvcard.parameter; 002 003import java.util.Objects; 004 005import ezvcard.SupportedVersions; 006import ezvcard.VCardVersion; 007import ezvcard.util.SupportedVersionsHelper; 008 009/* 010 Copyright (c) 2012-2026, Michael Angstadt 011 All rights reserved. 012 013 Redistribution and use in source and binary forms, with or without 014 modification, are permitted provided that the following conditions are met: 015 016 1. Redistributions of source code must retain the above copyright notice, this 017 list of conditions and the following disclaimer. 018 2. Redistributions in binary form must reproduce the above copyright notice, 019 this list of conditions and the following disclaimer in the documentation 020 and/or other materials provided with the distribution. 021 022 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 023 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 024 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 025 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 026 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 027 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 028 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 029 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 030 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 031 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 032 033 The views and conclusions contained in the software and documentation are those 034 of the authors and should not be interpreted as representing official policies, 035 either expressed or implied, of the FreeBSD Project. 036 */ 037 038/** 039 * Represents a vCard parameter (aka "sub type") whose values are pre-defined. 040 * @author Michael Angstadt 041 */ 042public class VCardParameter { 043 /** 044 * The value (for example, "home"). 045 */ 046 protected final String value; 047 048 /** 049 * Creates a new parameter. 050 * @param value the value 051 */ 052 public VCardParameter(String value) { 053 this(value, false); 054 } 055 056 /** 057 * Creates a new parameter. 058 * @param value the value 059 * @param preserveCase true to preserve the case of the value, false convert 060 * it to lower-case 061 */ 062 protected VCardParameter(String value, boolean preserveCase) { 063 this.value = (value == null || preserveCase) ? value : value.toLowerCase(); 064 } 065 066 /** 067 * Gets the value of the parameter. 068 * @return the value of the parameter (e.g. "home") 069 */ 070 public String getValue() { 071 return value; 072 } 073 074 /** 075 * <p> 076 * Gets the vCard versions that support this parameter value. 077 * </p> 078 * <p> 079 * The supported versions are defined by assigning a 080 * {@link SupportedVersions} annotation to the parameter value's static 081 * field (for example, {@link AddressType#DOM}). Dynamically-created 082 * parameter values (i.e. non-standard values) are considered to be 083 * supported by all versions. 084 * </p> 085 * @return the vCard versions that support this parameter. 086 */ 087 public VCardVersion[] getSupportedVersions() { 088 return SupportedVersionsHelper.getSupportedVersions(this); 089 } 090 091 /** 092 * <p> 093 * Determines if this parameter value is supported by the given vCard 094 * version. 095 * </p> 096 * <p> 097 * The supported versions are defined by assigning a 098 * {@link SupportedVersions} annotation to the parameter value's static 099 * field (for example, {@link AddressType#DOM}). Dynamically-created 100 * parameter values (i.e. non-standard values) are considered to be 101 * supported by all versions. 102 * </p> 103 * @param version the vCard version 104 * @return true if it is supported, false if not 105 */ 106 public boolean isSupportedBy(VCardVersion version) { 107 return SupportedVersionsHelper.isSupportedBy(version, this); 108 } 109 110 @Override 111 public String toString() { 112 return value; 113 } 114 115 @Override 116 public int hashCode() { 117 return Objects.hash(value); 118 } 119 120 @Override 121 public boolean equals(Object obj) { 122 if (this == obj) return true; 123 if (obj == null) return false; 124 if (getClass() != obj.getClass()) return false; 125 VCardParameter other = (VCardParameter) obj; 126 return Objects.equals(value, other.value); 127 } 128}