001 package biweekly.property;
002
003 import java.util.Arrays;
004 import java.util.Collection;
005
006 /*
007 Copyright (c) 2013, Michael Angstadt
008 All rights reserved.
009
010 Redistribution and use in source and binary forms, with or without
011 modification, are permitted provided that the following conditions are met:
012
013 1. Redistributions of source code must retain the above copyright notice, this
014 list of conditions and the following disclaimer.
015 2. Redistributions in binary form must reproduce the above copyright notice,
016 this list of conditions and the following disclaimer in the documentation
017 and/or other materials provided with the distribution.
018
019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
020 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
021 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
022 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
023 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
024 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
025 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
026 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
027 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
028 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029 */
030
031 /**
032 * <p>
033 * Defines the status of the component that this property belongs to, such as a
034 * to-do task being in a "completed" state.
035 * </p>
036 * <p>
037 * <b>Examples:</b>
038 *
039 * <pre class="brush:java">
040 * //creating a new property
041 * Status status = Status.completed();
042 *
043 * if (status.isCompleted()) {
044 * //its value is "COMPLETED"
045 * }
046 * </pre>
047 *
048 * </p>
049 * @author Michael Angstadt
050 * @rfc 5545 p.92-3
051 */
052 public class Status extends EnumProperty {
053 private static final String TENTATIVE = "TENTATIVE";
054 private static final String CONFIRMED = "CONFIRMED";
055 private static final String CANCELLED = "CANCELLED";
056 private static final String NEEDS_ACTION = "NEEDS-ACTION";
057 private static final String COMPLETED = "COMPLETED";
058 private static final String IN_PROGRESS = "IN-PROGRESS";
059 private static final String DRAFT = "DRAFT";
060 private static final String FINAL = "FINAL";
061
062 /**
063 * Creates a status property. Use of this constructor is discouraged and may
064 * put the property in an invalid state. Use one of the static factory
065 * methods instead.
066 * @param status the status (e.g. "TENTATIVE")
067 */
068 public Status(String status) {
069 super(status);
070 }
071
072 /**
073 * Creates a "tentative" status property (only valid for event components).
074 * @return the property
075 */
076 public static Status tentative() {
077 return create(TENTATIVE);
078 }
079
080 /**
081 * Determines if the status is set to "tentative".
082 * @return true if set to "tentative", false if not
083 */
084 public boolean isTentative() {
085 return is(TENTATIVE);
086 }
087
088 /**
089 * Creates a "confirmed" status property (only valid for event components).
090 * @return the property
091 */
092 public static Status confirmed() {
093 return create(CONFIRMED);
094 }
095
096 /**
097 * Determines if the status is set to "confirmed".
098 * @return true if set to "confirmed", false if not
099 */
100 public boolean isConfirmed() {
101 return is(CONFIRMED);
102 }
103
104 /**
105 * Creates a "cancelled" status property (only valid for event, to-do, and
106 * journal components).
107 * @return the property
108 */
109 public static Status cancelled() {
110 return create(CANCELLED);
111 }
112
113 /**
114 * Determines if the status is set to "cancelled".
115 * @return true if set to "cancelled", false if not
116 */
117 public boolean isCancelled() {
118 return is(CANCELLED);
119 }
120
121 /**
122 * Creates a "needs-action" status property (only valid for to-do
123 * components).
124 * @return the property
125 */
126 public static Status needsAction() {
127 return create(NEEDS_ACTION);
128 }
129
130 /**
131 * Determines if the status is set to "needs-action".
132 * @return true if set to "needs-action", false if not
133 */
134 public boolean isNeedsAction() {
135 return is(NEEDS_ACTION);
136 }
137
138 /**
139 * Creates a "completed" status property (only valid for to-do components).
140 * @return the property
141 */
142 public static Status completed() {
143 return create(COMPLETED);
144 }
145
146 /**
147 * Determines if the status is set to "completed".
148 * @return true if set to "completed", false if not
149 */
150 public boolean isCompleted() {
151 return is(COMPLETED);
152 }
153
154 /**
155 * Creates a "in-progress" status property (only valid for to-do
156 * components).
157 * @return the property
158 */
159 public static Status inProgress() {
160 return create(IN_PROGRESS);
161 }
162
163 /**
164 * Determines if the status is set to "in-progress".
165 * @return true if set to "in-progress", false if not
166 */
167 public boolean isInProgress() {
168 return is(IN_PROGRESS);
169 }
170
171 /**
172 * Creates a "draft" status property (only valid for journal components).
173 * @return the property
174 */
175 public static Status draft() {
176 return create(DRAFT);
177 }
178
179 /**
180 * Determines if the status is set to "draft".
181 * @return true if set to "draft", false if not
182 */
183 public boolean isDraft() {
184 return is(DRAFT);
185 }
186
187 /**
188 * Creates a "final" status property (only valid for journal components).
189 * @return the property
190 */
191 public static Status final_() {
192 return create(FINAL);
193 }
194
195 /**
196 * Determines if the status is set to "final".
197 * @return true if set to "final", false if not
198 */
199 public boolean isFinal() {
200 return is(FINAL);
201 }
202
203 private static Status create(String status) {
204 return new Status(status);
205 }
206
207 @Override
208 protected Collection<String> getStandardValues() {
209 return Arrays.asList(TENTATIVE, CONFIRMED, CANCELLED, NEEDS_ACTION, COMPLETED, IN_PROGRESS, DRAFT, FINAL);
210 }
211 }