001package biweekly.property; 002 003import java.util.List; 004 005import biweekly.Warning; 006import biweekly.component.ICalComponent; 007 008/* 009 Copyright (c) 2013, Michael Angstadt 010 All rights reserved. 011 012 Redistribution and use in source and binary forms, with or without 013 modification, are permitted provided that the following conditions are met: 014 015 1. Redistributions of source code must retain the above copyright notice, this 016 list of conditions and the following disclaimer. 017 2. Redistributions in binary form must reproduce the above copyright notice, 018 this list of conditions and the following disclaimer in the documentation 019 and/or other materials provided with the distribution. 020 021 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 022 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 023 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 024 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 025 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 026 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 027 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 028 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 029 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 030 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 031 */ 032 033/** 034 * <p> 035 * Defines the min/max iCalendar versions a consumer must support in order to 036 * successfully parse the iCalendar object. 037 * </p> 038 * <p> 039 * <b>Code sample:</b> 040 * 041 * <pre class="brush:java"> 042 * ICalendar ical = new ICalendar(); 043 * 044 * //all ICalendar objects are given a VERSION property on creation 045 * ical.getVersion(); //"2.0" 046 * 047 * //get the default iCal version 048 * Version version = Version.v2_0(); 049 * ical.setVersion(version); 050 * </pre> 051 * 052 * </p> 053 * @author Michael Angstadt 054 * @see <a href="http://tools.ietf.org/html/rfc5545#page-79">RFC 5545 p.79-80</a> 055 */ 056public class Version extends ICalProperty { 057 private static final String DEFAULT = "2.0"; 058 059 private String minVersion, maxVersion; 060 061 /** 062 * Creates a new version property. 063 * @param version the version that a consumer must support in order to 064 * successfully parse the iCalendar object 065 */ 066 public Version(String version) { 067 this(null, version); 068 } 069 070 /** 071 * Creates a new version property. 072 * @param minVersion the minimum version that a consumer must support in 073 * order to successfully parse the iCalendar object 074 * @param maxVersion the maximum version that a consumer must support in 075 * order to successfully parse the iCalendar object 076 */ 077 public Version(String minVersion, String maxVersion) { 078 this.minVersion = minVersion; 079 this.maxVersion = maxVersion; 080 } 081 082 /** 083 * Creates a version property that is set to the default iCalendar version 084 * (2.0). 085 * @return the property instance 086 */ 087 public static Version v2_0() { 088 return new Version(DEFAULT); 089 } 090 091 /** 092 * Determines if this version is the default iCalendar version. 093 * @return true if the version is "2.0", false if not 094 */ 095 public boolean isV2_0() { 096 return DEFAULT.equalsIgnoreCase(maxVersion); 097 } 098 099 /** 100 * Gets the minimum version that a consumer must support in order to 101 * successfully parse the iCalendar object. 102 * @return the minimum version or null if not set 103 */ 104 public String getMinVersion() { 105 return minVersion; 106 } 107 108 /** 109 * Sets the minimum version that a consumer must support in order to 110 * successfully parse the iCalendar object. 111 * @param minVersion the minimum version or null to remove 112 */ 113 public void setMinVersion(String minVersion) { 114 this.minVersion = minVersion; 115 } 116 117 /** 118 * Gets the maximum version that a consumer must support in order to 119 * successfully parse the iCalendar object. 120 * @return the maximum version or null if not set 121 */ 122 public String getMaxVersion() { 123 return maxVersion; 124 } 125 126 /** 127 * Sets the maximum version that a consumer must support in order to 128 * successfully parse the iCalendar object. 129 * @param maxVersion the maximum version (this field is <b>required</b>) 130 */ 131 public void setMaxVersion(String maxVersion) { 132 this.maxVersion = maxVersion; 133 } 134 135 @Override 136 protected void validate(List<ICalComponent> components, List<Warning> warnings) { 137 if (maxVersion == null) { 138 warnings.add(Warning.validate(35)); 139 } 140 } 141}