001    /*
002     * CDDL HEADER START
003     *
004     * The contents of this file are subject to the terms of the
005     * Common Development and Distribution License, Version 1.0 only
006     * (the "License").  You may not use this file except in compliance
007     * with the License.
008     *
009     * You can obtain a copy of the license at
010     * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011     * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012     * See the License for the specific language governing permissions
013     * and limitations under the License.
014     *
015     * When distributing Covered Code, include this CDDL HEADER in each
016     * file and include the License file at
017     * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
018     * add the following below this CDDL HEADER, with the fields enclosed
019     * by brackets "[]" replaced with your own identifying information:
020     *      Portions Copyright [yyyy] [name of copyright owner]
021     *
022     * CDDL HEADER END
023     *
024     *
025     *      Copyright 2006-2008 Sun Microsystems, Inc.
026     */
027    package org.opends.server.backends.jeb;
028    
029    import org.opends.server.types.EntryEncodeConfig;
030    
031    import static org.opends.server.util.Validator.*;
032    
033    /**
034     * Configuration class to indicate desired compression and cryptographic options
035     * for the data stored in the database.
036     */
037    public class DataConfig
038    {
039      /**
040       * Indicates whether data should be compressed before writing to the database.
041       */
042      private boolean compressed = false;
043    
044      /**
045       * The configuration to use when encoding entries in the database.
046       */
047      private EntryEncodeConfig encodeConfig = new EntryEncodeConfig();
048    
049      /**
050       * Constrct a new DataConfig object with the specified settings.
051       *
052       * @param compressed true if data should be compressed, false if not.
053       * @param compactEncoding true if data should be encoded in compact form,
054       * false if not.
055       * @param compressedSchema the compressed schema manager to use.  It must not
056       * be {@code null} if compactEncoding is {@code true}.
057       */
058      public DataConfig(boolean compressed, boolean compactEncoding,
059                        JECompressedSchema compressedSchema)
060      {
061        this.compressed = compressed;
062    
063        if (compressedSchema == null)
064        {
065          ensureTrue(! compactEncoding);
066          this.encodeConfig = new EntryEncodeConfig(false, compactEncoding, false);
067        }
068        else
069        {
070          this.encodeConfig =
071               new EntryEncodeConfig(false, compactEncoding, compactEncoding,
072                                     compressedSchema);
073        }
074      }
075    
076      /**
077       * Determine whether data should be compressed before writing to the database.
078       * @return true if data should be compressed, false if not.
079       */
080      public boolean isCompressed()
081      {
082        return compressed;
083      }
084    
085      /**
086       * Determine whether entries should be encoded with the compact form before
087       * writing to the database.
088       * @return true if data should be encoded in the compact form.
089       */
090      public boolean isCompactEncoding()
091      {
092        return encodeConfig.compressAttributeDescriptions();
093      }
094    
095    
096    
097      /**
098       * Configure whether data should be compressed before writing to the database.
099       * @param compressed true if data should be compressed, false if not.
100       */
101      public void setCompressed(boolean compressed)
102      {
103        this.compressed = compressed;
104      }
105    
106      /**
107       * Configure whether data should be encoded with the compact form before
108       * writing to the database.
109       * @param compactEncoding true if data should be encoded in compact form,
110       * false if not.
111       * @param compressedSchema The compressed schema manager to use.  It must not
112       * be {@code null} if compactEncoding is {@code true}.
113       */
114      public void setCompactEncoding(boolean compactEncoding,
115                                     JECompressedSchema compressedSchema)
116      {
117        if (compressedSchema == null)
118        {
119          ensureTrue(! compactEncoding);
120          this.encodeConfig = new EntryEncodeConfig(false, compactEncoding,
121                                                    compactEncoding);
122        }
123        else
124        {
125          this.encodeConfig = new EntryEncodeConfig(false, compactEncoding,
126                                                    compactEncoding,
127                                                    compressedSchema);
128        }
129      }
130    
131      /**
132       * Get the EntryEncodeConfig object in use by this configuration.
133       * @return the EntryEncodeConfig object in use by this configuration.
134       */
135      public EntryEncodeConfig getEntryEncodeConfig()
136      {
137        return this.encodeConfig;
138      }
139    
140      /**
141       * Get a string representation of this object.
142       * @return A string representation of this object.
143       */
144      public String toString()
145      {
146        StringBuilder builder = new StringBuilder();
147        builder.append("DataConfig(compressed=");
148        builder.append(compressed);
149        builder.append(", ");
150        encodeConfig.toString(builder);
151        builder.append(")");
152        return builder.toString();
153      }
154    }