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

Yannick Lecaillez
30.08.2016 201f21933b9702902b492e036a0cc1d25f8cefd4
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
/*
 * The contents of this file are subject to the terms of the Common Development and
 * Distribution License (the License). You may not use this file except in compliance with the
 * License.
 *
 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
 * specific language governing permission and limitations under the License.
 *
 * When distributing Covered Software, include this CDDL Header Notice in each file and include
 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
 * Header, with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2014-2016 ForgeRock AS
 */
package org.opends.server.backends.pluggable;
 
import org.forgerock.util.Reject;
import org.opends.server.api.CompressedSchema;
import org.opends.server.crypto.CryptoSuite;
import org.opends.server.types.EntryEncodeConfig;
 
/**
 * Configuration class to indicate desired compression and cryptographic options
 * for the data stored in the tree.
 */
final class DataConfig
{
  /**
   * Builder for a DataConfig with all compression/encryption options.
   */
  static final class Builder
  {
    private boolean compressed;
    private boolean encrypted;
    private boolean compactEncoding;
    private CompressedSchema compressedSchema;
    private CryptoSuite cryptoSuite;
 
    Builder()
    {
      // Nothing to do.
    }
 
    public Builder encode(boolean enabled)
    {
      this.compactEncoding = enabled;
      return this;
    }
 
    public Builder compress(boolean enabled)
    {
      this.compressed = enabled;
      return this;
    }
 
    public Builder encrypt(boolean enabled)
    {
      this.encrypted = enabled;
      return this;
    }
 
    public Builder schema(CompressedSchema schema)
    {
      this.compressedSchema = schema;
      return this;
    }
 
    public Builder cryptoSuite(CryptoSuite cs)
    {
      this.cryptoSuite = cs;
      return this;
    }
 
    public DataConfig build()
    {
      return new DataConfig(this);
    }
  }
  /** Indicates whether data should be compressed before writing to the storage. */
  private final boolean compressed;
 
  /** The configuration to use when encoding entries in the tree. */
  private final EntryEncodeConfig encodeConfig;
 
  private final boolean encrypted;
 
  private final CryptoSuite cryptoSuite;
  /**
   * Construct a new DataConfig object with the specified settings.
   *
   * @param builder the builder with the configuration
   */
  private DataConfig(Builder builder)
  {
    this.compressed = builder.compressed;
    this.encrypted = builder.encrypted;
    this.cryptoSuite = builder.cryptoSuite;
 
    if (builder.compressedSchema == null)
    {
      Reject.ifTrue(builder.compactEncoding);
      this.encodeConfig = new EntryEncodeConfig(false, builder.compactEncoding, false);
    }
    else
    {
      this.encodeConfig = new EntryEncodeConfig(false, builder.compactEncoding, builder.compactEncoding,
          builder.compressedSchema);
    }
  }
 
  boolean isCompressed()
  {
    return compressed;
  }
 
  boolean isEncrypted()
  {
    return encrypted;
  }
 
  EntryEncodeConfig getEntryEncodeConfig()
  {
    return encodeConfig;
  }
 
  CryptoSuite getCryptoSuite()
  {
    return cryptoSuite;
  }
 
  @Override
  public String toString()
  {
    final StringBuilder builder = new StringBuilder();
    builder.append("DataConfig(compressed=");
    builder.append(compressed);
    builder.append(", encrypted=");
    builder.append(encrypted);
    builder.append(", ");
    if (encrypted)
    {
      builder.append(cryptoSuite.toString());
      builder.append(", ");
    }
    encodeConfig.toString(builder);
    builder.append(")");
    return builder.toString();
  }
}