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

jvergara
04.15.2007 4a48f1cf6caab40fa3741d93f8c825078e4820f2
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
/*
 * 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
 *
 *
 *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
 */
 
package org.opends.quicksetup.upgrader;
 
import org.opends.quicksetup.util.Utils;
 
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.io.*;
 
/**
 * Log of past upgrade/reversion events that is backed by the file
 * [install root]/history/log.
 */
public class HistoricalLog {
 
  private File file;
 
  /**
   * Creates a historical log backed by <code>file</code>.  If file
   * does not exist an attempt will be made to create it.
   * @param file File containing the historical record
   * @throws IOException if something goes wrong attempting to create
   * a new historical record file
   */
  public HistoricalLog(File file) throws IOException {
    this.file = file;
    if (!file.exists()) {
      Utils.createFile(file);
    }
  }
 
  /**
   * Gets a list of the historical records in the file.
   * @return List of HistoricalRecord
   * @throws IOException if there was an error reading the records file
   */
  public List<HistoricalRecord> getRecords() throws IOException {
    List<HistoricalRecord> records = new ArrayList<HistoricalRecord>();
    BufferedReader br = new BufferedReader(new FileReader(file));
    String s;
    while (null != (s = br.readLine())) {
      records.add(HistoricalRecord.fromString(s));
    }
    return Collections.unmodifiableList(records);
  }
 
  /**
   * Creates a new historical log record and appends a new log record to the
   * log.  A new operation ID is generated and returned so that future calls
   * can use the same ID.
   * @param from current version
   * @param to version to upgrade to
   * @param status of the upgrade
   * @param note optional string with additional information
   * @return Long operation ID that can be used in writing future logs
   * @throws IOException if there is a problem appending the log to the file
   */
  public Long append(Integer from, Integer to,
                     HistoricalRecord.Status status, String note)
          throws IOException
  {
    HistoricalRecord record = new HistoricalRecord(from, to, status, note);
    Long id = record.getOperationId();
    append(record);
    return id;
  }
 
  /**
   * Creates a new historical log record and appends a new log record to the
   * log.
   * @param id Long ID obtained from a call to
            {@link org.opends.quicksetup.upgrader.HistoricalLog#
            append(Integer, Integer,
            org.opends.quicksetup.upgrader.HistoricalRecord.Status)}
   * @param from current version
   * @param to version to upgrade to
   * @param status of the upgrade
   * @param note optional string with additional information
   * @throws IOException if there is a problem appending the log to the file
   */
  public void append(Long id, Integer from, Integer to,
                     HistoricalRecord.Status status, String note)
          throws IOException
  {
    HistoricalRecord record = new HistoricalRecord(id, from, to, status, note);
    append(record);
  }
 
  /**
   * Appends a historical record to the log.
   * @param record to append to the log file
   * @throws IOException if there is a problem appending the record to the file
   */
  private void append(HistoricalRecord record) throws IOException {
    BufferedWriter bw = null;
    try {
      bw = new BufferedWriter(new FileWriter(file, true));
      bw.write(record.toString());
      bw.newLine();
      bw.flush();
    } finally {
      if (bw != null) {
        try {
          bw.close();
        } catch (IOException ioe2) {
        // do nothing;
        }
      }
    }
  }
 
}