001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2006-2008 Sun Microsystems, Inc. 026 */ 027 package org.opends.server.backends.task; 028 029 import org.opends.messages.Message; 030 import static org.opends.messages.TaskMessages.*; 031 032 033 /** 034 * This enumeration defines the various states that a task can have during its 035 * lifetime. 036 */ 037 public enum TaskState 038 { 039 /** 040 * The task state that indicates that the task has not yet been scheduled, 041 * or possibly that the scheduler is currently not running. 042 */ 043 UNSCHEDULED(INFO_TASK_STATE_UNSCHEDULED.get()), 044 045 046 047 /** 048 * The task state that indicates that the task has been disabled by an 049 * administrator. 050 */ 051 DISABLED(INFO_TASK_STATE_DISABLED.get()), 052 053 054 055 /** 056 * The task state that indicates that the task's scheduled start time has not 057 * yet arrived. 058 */ 059 WAITING_ON_START_TIME(INFO_TASK_STATE_WAITING_ON_START_TIME.get()), 060 061 062 063 /** 064 * The task state that indicates that at least one of the task's defined 065 * dependencies has not yet completed. 066 */ 067 WAITING_ON_DEPENDENCY(INFO_TASK_STATE_WAITING_ON_DEPENDENCY.get()), 068 069 070 071 /** 072 * The task state that indicates that the task is currently running. 073 */ 074 RUNNING(INFO_TASK_STATE_RUNNING.get()), 075 076 077 078 /** 079 * The task state that indicates that the task has completed without any 080 * errors. 081 */ 082 COMPLETED_SUCCESSFULLY(INFO_TASK_STATE_COMPLETED_SUCCESSFULLY.get()), 083 084 085 086 /** 087 * The task state that indicates that the task was able to complete its 088 * intended goal, but that one or more errors were encountered during the 089 * process. 090 */ 091 COMPLETED_WITH_ERRORS(INFO_TASK_STATE_COMPLETED_WITH_ERRORS.get()), 092 093 094 095 /** 096 * The task state that indicates that the task was unable to complete because 097 * it was interrupted by the shutdown of the task backend. 098 */ 099 STOPPED_BY_SHUTDOWN(INFO_TASK_STATE_STOPPED_BY_SHUTDOWN.get()), 100 101 102 103 /** 104 * The task state that indicates that one or more errors prevented the task 105 * from completing. 106 */ 107 STOPPED_BY_ERROR(INFO_TASK_STATE_STOPPED_BY_ERROR.get()), 108 109 110 111 /** 112 * The task state that indicates that the task was stopped by an administrator 113 * after it had already started but before it was able to complete. 114 */ 115 STOPPED_BY_ADMINISTRATOR(INFO_TASK_STATE_STOPPED_BY_ADMINISTRATOR.get()), 116 117 118 119 /** 120 * The task state that indicates that the task was canceled by an 121 * administrator before it started running. 122 */ 123 CANCELED_BEFORE_STARTING(INFO_TASK_STATE_CANCELED_BEFORE_STARTING.get()); 124 125 126 127 128 129 130 /** 131 * Indicates whether a task with the specified state is currently pending 132 * execution. 133 * 134 * @param taskState The task state for which to make the determination. 135 * 136 * @return <CODE>true</CODE> if the stask tate indicates that the task is 137 * currently pending, or <CODE>false</CODE> otherwise. 138 */ 139 public static boolean isPending(TaskState taskState) 140 { 141 switch (taskState) 142 { 143 case UNSCHEDULED: 144 case WAITING_ON_START_TIME: 145 case WAITING_ON_DEPENDENCY: 146 return true; 147 default: 148 return false; 149 } 150 } 151 152 153 154 /** 155 * Indicates whether a task with the specified state is currently running. 156 * 157 * @param taskState The task state for which to make the determination. 158 * 159 * @return <CODE>true</CODE> if the task state indicates that the task is 160 * currently running, or <CODE>false</CODE> otherwise. 161 */ 162 public static boolean isRunning(TaskState taskState) 163 { 164 switch (taskState) 165 { 166 case RUNNING: 167 return true; 168 default: 169 return false; 170 } 171 } 172 173 174 175 /** 176 * Indicates whether a task with the specified state has completed all the 177 * processing that it will do, regardless of whether it completed its 178 * intended goal. 179 * 180 * @param taskState The task state for which to make the determination. 181 * 182 * @return <CODE>false</CODE> if the task state indicates that the task has 183 * not yet started or is currently running, or <CODE>true</CODE> 184 * otherwise. 185 */ 186 public static boolean isDone(TaskState taskState) 187 { 188 switch (taskState) 189 { 190 case UNSCHEDULED: 191 case WAITING_ON_START_TIME: 192 case WAITING_ON_DEPENDENCY: 193 case RUNNING: 194 return false; 195 default: 196 return true; 197 } 198 } 199 200 201 202 /** 203 * Indicates whether a task with the specified state has been able to complete 204 * its intended goal. 205 * 206 * @param taskState The task state for which to make the determination. 207 * 208 * @return <CODE>true</CODE> if the task state indicates that the task 209 * completed successfully or with minor errors that still allowed it 210 * to achieve its goal, or <CODE>false</CODE> otherwise. 211 */ 212 public static boolean isSuccessful(TaskState taskState) 213 { 214 switch (taskState) 215 { 216 case WAITING_ON_START_TIME: 217 case WAITING_ON_DEPENDENCY: 218 case RUNNING: 219 case STOPPED_BY_ERROR: 220 case COMPLETED_WITH_ERRORS: 221 return false; 222 default: 223 return true; 224 } 225 } 226 227 228 /** 229 * Indicates whether or not this task has been cancelled. 230 * 231 * @param taskState The task state for which to make the determination. 232 * 233 * @return <CODE>true</CODE> if the task state indicates that the task 234 * was cancelled either before or during execution, or 235 * <CODE>false</CODE> otherwise. 236 */ 237 public static boolean isCancelled(TaskState taskState) 238 { 239 switch(taskState) 240 { 241 case STOPPED_BY_ADMINISTRATOR: 242 case CANCELED_BEFORE_STARTING: 243 return true; 244 default: 245 return false; 246 } 247 } 248 249 /** 250 * Retrieves the task state that corresponds to the provided string value. 251 * 252 * @param s The string value for which to retrieve the corresponding task 253 * state. 254 * 255 * @return The corresponding task state, or <CODE>null</CODE> if none could 256 * be associated with the provided string. 257 */ 258 public static TaskState fromString(String s) 259 { 260 String lowerString = s.toLowerCase(); 261 if (lowerString.equals("unscheduled")) 262 { 263 return UNSCHEDULED; 264 } 265 else if (lowerString.equals("disabled")) 266 { 267 return DISABLED; 268 } 269 else if (lowerString.equals("waiting_on_start_time")) 270 { 271 return WAITING_ON_START_TIME; 272 } 273 else if (lowerString.equals("waiting_on_dependency")) 274 { 275 return WAITING_ON_DEPENDENCY; 276 } 277 else if (lowerString.equals("running")) 278 { 279 return RUNNING; 280 } 281 else if (lowerString.equals("completed_successfully")) 282 { 283 return COMPLETED_SUCCESSFULLY; 284 } 285 else if (lowerString.equals("completed_with_errors")) 286 { 287 return COMPLETED_WITH_ERRORS; 288 } 289 else if (lowerString.equals("stopped_by_shutdown")) 290 { 291 return STOPPED_BY_SHUTDOWN; 292 } 293 else if (lowerString.equals("stopped_by_error")) 294 { 295 return STOPPED_BY_ERROR; 296 } 297 else if (lowerString.equals("stopped_by_administrator")) 298 { 299 return STOPPED_BY_ADMINISTRATOR; 300 } 301 else if (lowerString.equals("canceled_before_starting")) 302 { 303 return CANCELED_BEFORE_STARTING; 304 } 305 else 306 { 307 return null; 308 } 309 } 310 311 private Message displayName; 312 313 /** 314 * Gets a locale sensitive representation of this state. 315 * 316 * @return Message describing state 317 */ 318 public Message getDisplayName() { 319 return displayName; 320 } 321 322 private TaskState(Message displayName) { 323 this.displayName = displayName; 324 } 325 } 326