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

matthew_swift
28.47.2010 f2160f4bd1c8ac67e5a86a6710d431e8932877f9
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
 * 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 2009 Sun Microsystems, Inc.
 */
 
package org.opends.sdk.ldif;
 
 
 
import java.io.InterruptedIOException;
 
import org.opends.sdk.Connection;
import org.opends.sdk.Entry;
import org.opends.sdk.ErrorResultException;
import org.opends.sdk.ErrorResultIOException;
 
import com.sun.opends.sdk.util.Validator;
 
 
 
/**
 * A {@code ConnectionEntryWriter} is a bridge from {@code Connection}s to
 * {@code EntryWriter}s. A connection entry writer writes entries by sending Add
 * requests to an underlying connection.
 * <p>
 * All Add requests are performed synchronously, blocking until an Add result is
 * received. If an Add result indicates that an Add request has failed for some
 * reason then the error result is propagated to the caller using an {@code
 * ErrorResultIOException}.
 * <p>
 * <b>Note:</b> comments are not supported by connection change record writers.
 * Attempts to write comments will be ignored.
 */
public final class ConnectionEntryWriter implements EntryWriter
{
  private final Connection connection;
 
 
 
  /**
   * Creates a new connection entry writer whose destination is the provided
   * connection.
   *
   * @param connection
   *          The connection to use.
   * @throws NullPointerException
   *           If {@code connection} was {@code null}.
   */
  public ConnectionEntryWriter(final Connection connection)
      throws NullPointerException
  {
    Validator.ensureNotNull(connection);
    this.connection = connection;
  }
 
 
 
  /**
   * Closes this connection entry writer, including the underlying connection.
   * Closing a previously closed entry writer has no effect.
   */
  public void close()
  {
    connection.close();
  }
 
 
 
  /**
   * Connection entry writers do not require flushing, so this method has no
   * effect.
   */
  public void flush()
  {
    // Do nothing.
  }
 
 
 
  /**
   * Connection entry writers do not support comments, so the provided comment
   * will be ignored.
   *
   * @param comment
   *          The {@code CharSequence} to be written as a comment.
   * @return A reference to this connection entry writer.
   * @throws NullPointerException
   *           If {@code comment} was {@code null}.
   */
  public ConnectionEntryWriter writeComment(final CharSequence comment)
      throws NullPointerException
  {
    Validator.ensureNotNull(comment);
 
    // Do nothing.
    return this;
  }
 
 
 
  /**
   * Writes an entry to the underlying connection using an Add request, blocking
   * until the request completes.
   *
   * @param entry
   *          The {@code Entry} to be written.
   * @return A reference to this connection entry writer.
   * @throws ErrorResultIOException
   *           If the result code indicates that the request failed for some
   *           reason.
   * @throws InterruptedIOException
   *           If the current thread was interrupted while waiting.
   * @throws NullPointerException
   *           If {@code entry} was {@code null}.
   */
  public ConnectionEntryWriter writeEntry(final Entry entry)
      throws ErrorResultIOException, InterruptedIOException,
      NullPointerException
  {
    Validator.ensureNotNull(entry);
    try
    {
      connection.add(entry);
    }
    catch (final ErrorResultException e)
    {
      throw new ErrorResultIOException(e);
    }
    catch (final InterruptedException e)
    {
      throw new InterruptedIOException(e.getMessage());
    }
    return this;
  }
 
}