mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
04.20.2013 c64b052d2fc60dcadbc8afcf1ef5b82b6857e512
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013 ForgeRock AS
 */
 
package org.opends.server.tools.upgrade;
 
import org.opends.server.tools.ClientException;
 
/**
 * An upgrade task.
 */
public interface UpgradeTask
{
 
  /**
   * Defines the different types of upgrade tasks.
   */
  public enum TaskType {
    /**
     * Defines a standard task.
     */
    NORMAL,
    /**
     * Defines a task which require a standard user interaction.
     */
    NEED_USER_INTERACTION,
    /**
     * Defines a critical task which require an imperative user interaction.
     */
    MANDATORY_USER_INTERACTION,
    /**
     * Defines a task which take a long time to complete.
     */
    TAKE_LONG_TIME_TO_COMPLETE,
    /**
     * Defines a task which cannot be reverted once started.
     */
    CANNOT_BE_REVERTED
  }
 
  /**
   * Performs this upgrade task.
   *
   * @param context
   *          Context through which tasks can interact with the server
   *          installation.
   * @throws ClientException
   *           If an error occurred while performing the task.
   */
  void perform(UpgradeContext context)
      throws ClientException;
 
  /**
   * Notifies this task that the upgrade is about to start. This method will be
   * invoked before any upgrade tasks have been performed. Most task
   * implementation will not need to do anything.
   *
   * @param context
   *          Context through which tasks can interact with the server
   *          installation.
   * @throws ClientException
   *           If an error occurred while starting the task.
   */
  void start(UpgradeContext context)
      throws ClientException;
 
  /**
   * Verifies that this upgrade task can be completed or not.
   *
   * @param context
   *          Context through which tasks can interact with the server
   *          installation.
   * @throws ClientException
   *           If the upgrade cannot proceed.
   */
  void verify(UpgradeContext context)
      throws ClientException;
 
  /**
   * Interacts with the user where needed (e.g. in order to ask for
   * confirmation), and throw a {@code ClientException} if the upgrade cannot
   * proceed.
   *
   * @param context
   *          Context through which tasks can interact with the server
   *          installation.
   * @throws ClientException
   *           If the upgrade cannot proceed.
   */
  void interact(UpgradeContext context)
      throws ClientException;
 
  /**
   * This method will be invoked after all upgrade tasks have completed
   * successfully The post upgrade tasks are processes which should be launched
   * after a successful upgrade.
   *
   * @param context
   *          Context through which tasks can interact with the server
   *          installation.
   * @throws ClientException
   *           If the task cannot proceed.
   */
  void postUpgrade(UpgradeContext context) throws ClientException;
 
  /**
   * This method will be invoked only if one of the previous post upgrade task
   * has failed.
   *
   * @param context
   *          Context through which tasks can interact with the server
   *          installation.
   * @throws ClientException
   *           If the task cannot proceed.
   */
  void postponePostUpgrade(UpgradeContext context) throws ClientException;
}