001 package biweekly.property; 002 003 import java.util.Date; 004 import java.util.List; 005 006 import biweekly.component.ICalComponent; 007 import biweekly.component.VTimezone; 008 import biweekly.util.ICalDateFormatter; 009 010 /* 011 Copyright (c) 2013, Michael Angstadt 012 All rights reserved. 013 014 Redistribution and use in source and binary forms, with or without 015 modification, are permitted provided that the following conditions are met: 016 017 1. Redistributions of source code must retain the above copyright notice, this 018 list of conditions and the following disclaimer. 019 2. Redistributions in binary form must reproduce the above copyright notice, 020 this list of conditions and the following disclaimer in the documentation 021 and/or other materials provided with the distribution. 022 023 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 024 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 025 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 026 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 027 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 028 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 029 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 030 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 031 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 032 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 033 */ 034 035 /** 036 * Represents a property whose value is a date or a date-time. 037 * @author Michael Angstadt 038 */ 039 public class DateOrDateTimeProperty extends ICalProperty { 040 protected Date value; 041 protected boolean hasTime; 042 043 /** 044 * Creates a new property. 045 * @param value the date 046 * @param hasTime true if the date has a time component, false if it is 047 * strictly a date 048 */ 049 public DateOrDateTimeProperty(Date value, boolean hasTime) { 050 setValue(value, hasTime); 051 } 052 053 /** 054 * Gets the date. 055 * @return the date 056 */ 057 public Date getValue() { 058 return value; 059 } 060 061 /** 062 * Sets the date. 063 * @param value the date 064 * @param hasTime true if the date has a time component, false if it is 065 * strictly a date 066 */ 067 public void setValue(Date value, boolean hasTime) { 068 this.value = value; 069 this.hasTime = hasTime; 070 } 071 072 /** 073 * Determines whether the date has a time component. 074 * @return true if the date has a time component, false if it is strictly a 075 * date 076 */ 077 public boolean hasTime() { 078 return hasTime; 079 } 080 081 @Override 082 public String getTimezoneId() { 083 return super.getTimezoneId(); 084 } 085 086 @Override 087 public void setTimezoneId(String timezoneId) { 088 super.setTimezoneId(timezoneId); 089 } 090 091 @Override 092 public void setTimezone(VTimezone timezone) { 093 super.setTimezone(timezone); 094 } 095 096 @Override 097 protected void validate(List<ICalComponent> components, List<String> warnings) { 098 if (value == null) { 099 warnings.add("No value set."); 100 } 101 102 String tzid = getTimezoneId(); 103 if (tzid != null && tzid.contains("/") && ICalDateFormatter.parseTimeZoneId(tzid) == null) { 104 warnings.add("Unrecognized timezone ID: " + tzid); 105 } 106 } 107 }