001    /*
002     * Copyright 2008-2015 UnboundID Corp.
003     * All Rights Reserved.
004     */
005    /*
006     * Copyright (C) 2015 UnboundID Corp.
007     *
008     * This program is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU General Public License (GPLv2 only)
010     * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011     * as published by the Free Software Foundation.
012     *
013     * This program is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016     * GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with this program; if not, see <http://www.gnu.org/licenses>.
020     */
021    package com.unboundid.ldap.sdk.unboundidds.tasks;
022    
023    
024    
025    import com.unboundid.util.ThreadSafety;
026    import com.unboundid.util.ThreadSafetyLevel;
027    
028    import static com.unboundid.util.StaticUtils.*;
029    
030    
031    
032    /**
033     * <BLOCKQUOTE>
034     *   <B>NOTE:</B>  This class is part of the Commercial Edition of the UnboundID
035     *   LDAP SDK for Java.  It is not available for use in applications that
036     *   include only the Standard Edition of the LDAP SDK, and is not supported for
037     *   use in conjunction with non-UnboundID products.
038     * </BLOCKQUOTE>
039     * This class defines a task state, which provides information about the current
040     * state of processing for a scheduled task.
041     */
042    @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
043    public enum TaskState
044    {
045      /**
046       * The task state that indicates that the task was canceled before it started
047       * running.
048       */
049      CANCELED_BEFORE_STARTING("canceled_before_starting"),
050    
051    
052    
053      /**
054       * The task state that indicates that the task has completed successfully.
055       */
056      COMPLETED_SUCCESSFULLY("completed_successfully"),
057    
058    
059    
060      /**
061       * The task state that indicates that the task has completed but with one or
062       * more errors.
063       */
064      COMPLETED_WITH_ERRORS("completed_with_errors"),
065    
066    
067    
068      /**
069       * The task state that indicates that the task has been disabled.
070       */
071      DISABLED("disabled"),
072    
073    
074    
075      /**
076       * The task state that indicates that the task is running.
077       */
078      RUNNING("running"),
079    
080    
081    
082      /**
083       * The task state that indicates that the task was forced to stop running when
084       * it was canceled by an administrator.
085       */
086      STOPPED_BY_ADMINISTRATOR("stopped_by_administrator"),
087    
088    
089    
090      /**
091       * The task state that indicates that the task was forced to stop running when
092       * it encountered an unrecoverable error.
093       */
094      STOPPED_BY_ERROR("stopped_by_error"),
095    
096    
097    
098      /**
099       * The task state that indicates that the task was forced to stop running when
100       * the task scheduler was shut down.
101       */
102      STOPPED_BY_SHUTDOWN("stopped_by_shutdown"),
103    
104    
105    
106      /**
107       * The task state that indicates that the task has not yet been scheduled.
108       */
109      UNSCHEDULED("unscheduled"),
110    
111    
112    
113      /**
114       * The task state that indicates that the task has one or more unsatisfied
115       * dependencies.
116       */
117      WAITING_ON_DEPENDENCY("waiting_on_dependency"),
118    
119    
120    
121      /**
122       * The task state that indicates that the task is waiting on the start time to
123       * arrive.
124       */
125      WAITING_ON_START_TIME("waiting_on_start_time");
126    
127    
128    
129      // The name of this failed dependency action.
130      private final String name;
131    
132    
133    
134      /**
135       * Creates a new task state with the specified name.
136       *
137       * @param  name  The name of the task state to create.
138       */
139      private TaskState(final String name)
140      {
141        this.name = name;
142      }
143    
144    
145    
146      /**
147       * Retrieves the name of this task state.
148       *
149       * @return  The name of this task state.
150       */
151      public String getName()
152      {
153        return name;
154      }
155    
156    
157    
158      /**
159       * Retrieves the task state with the specified name.
160       *
161       * @param  name  The name of the task state to retrieve.
162       *
163       * @return  The requested task state, or {@code null} if there is no state
164       *          with the given name.
165       */
166      public static TaskState forName(final String name)
167      {
168        final String lowerName = toLowerCase(name);
169    
170        if (lowerName.equals("canceled_before_starting"))
171        {
172          return CANCELED_BEFORE_STARTING;
173        }
174        else if (lowerName.equals("completed_successfully"))
175        {
176          return COMPLETED_SUCCESSFULLY;
177        }
178        else if (lowerName.equals("completed_with_errors"))
179        {
180          return COMPLETED_WITH_ERRORS;
181        }
182        else if (lowerName.equals("disabled"))
183        {
184          return DISABLED;
185        }
186        else if (lowerName.equals("running"))
187        {
188          return RUNNING;
189        }
190        else if (lowerName.equals("stopped_by_administrator"))
191        {
192          return STOPPED_BY_ADMINISTRATOR;
193        }
194        else if (lowerName.equals("stopped_by_error"))
195        {
196          return STOPPED_BY_ERROR;
197        }
198        else if (lowerName.equals("stopped_by_shutdown"))
199        {
200          return STOPPED_BY_SHUTDOWN;
201        }
202        else if (lowerName.equals("unscheduled"))
203        {
204          return UNSCHEDULED;
205        }
206        else if (lowerName.equals("waiting_on_dependency"))
207        {
208          return WAITING_ON_DEPENDENCY;
209        }
210        else if (lowerName.equals("waiting_on_start_time"))
211        {
212          return WAITING_ON_START_TIME;
213        }
214        else
215        {
216          return null;
217        }
218      }
219    
220    
221    
222      /**
223       * Indicates whether this task state indicates that the task has not yet
224       * started running.
225       *
226       * @return  {@code true} if this task state indicates that the task has not
227       *          yet started, or {@code false} if not.
228       */
229      public boolean isPending()
230      {
231        switch (this)
232        {
233          case DISABLED:
234          case UNSCHEDULED:
235          case WAITING_ON_DEPENDENCY:
236          case WAITING_ON_START_TIME:
237            return true;
238          default:
239            return false;
240        }
241      }
242    
243    
244    
245      /**
246       * Indicates whether this task state indicates that the task is currently
247       * running.
248       *
249       * @return  {@code true} if this task state indicates that the task is
250       *          currently running, or {@code false} if not.
251       */
252      public boolean isRunning()
253      {
254        return (this == RUNNING);
255      }
256    
257    
258    
259      /**
260       * Indicates whether this task state indicates that the task has completed all
261       * of the processing that it will do.
262       *
263       * @return  {@code true} if this task state indicates that the task has
264       *          completed all of the processing that it will do, or {@code false}
265       *          if not.
266       */
267      public boolean isCompleted()
268      {
269        return (! (isPending() || isRunning()));
270      }
271    
272    
273    
274      /**
275       * Retrieves a string representation of this task state.
276       *
277       * @return  A string representation of this task state.
278       */
279      @Override()
280      public String toString()
281      {
282        return name;
283      }
284    }