001    /*
002     * Copyright 2011-2016 UnboundID Corp.
003     * All Rights Reserved.
004     */
005    /*
006     * Copyright (C) 2011-2016 UnboundID Corp.
007     *
008     * This program is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU General Public License (GPLv2 only)
010     * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011     * as published by the Free Software Foundation.
012     *
013     * This program is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016     * GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with this program; if not, see <http://www.gnu.org/licenses>.
020     */
021    package com.unboundid.util;
022    
023    
024    
025    import java.io.Serializable;
026    
027    
028    
029    /**
030     * This class provides a data structure that holds information about an option
031     * that can be used in the course of SASL authentication.
032     */
033    @NotMutable()
034    @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
035    public final class SASLOption
036           implements Serializable
037    {
038      /**
039       * The serial version UID for this serializable class.
040       */
041      private static final long serialVersionUID = -683675804002105357L;
042    
043    
044    
045      // Indicates whether this option is allowed to be specified multiple times for
046      // a single bind request.
047      private final boolean isMultiValued;
048    
049      // Indicates whether this SASL option is required for use in conjunction with
050      // the associated SASL mechanism.
051      private final boolean isRequired;
052    
053      // A description for this SASL option.
054      private final String description;
055    
056      // The name for this SASL option.
057      private final String name;
058    
059    
060    
061      /**
062       * Creates a new SASL option with the provided information.
063       *
064       * @param  name           The name for this SASL option.
065       * @param  description    A description for this SASL option.
066       * @param  isRequired     Indicates whether this option is required for use in
067       *                        conjunction with the associated SASL mechanism.
068       * @param  isMultiValued  Indicates whether this option is allowed to be
069       *                        specified multiple times for a single bind request.
070       */
071      public SASLOption(final String name, final String description,
072                        final boolean isRequired, final boolean isMultiValued)
073      {
074        this.name          = name;
075        this.description   = description;
076        this.isRequired    = isRequired;
077        this.isMultiValued = isMultiValued;
078      }
079    
080    
081    
082      /**
083       * Retrieves the name for this SASL option.
084       *
085       * @return  The name for this SASL option.
086       */
087      public String getName()
088      {
089        return name;
090      }
091    
092    
093    
094      /**
095       * Retrieves a description for this SASL option.
096       *
097       * @return  A description for this SASL option.
098       */
099      public String getDescription()
100      {
101        return description;
102      }
103    
104    
105    
106      /**
107       * Indicates whether this SASL option must be provided when attempting to bind
108       * with the associated mechanism.
109       *
110       * @return  {@code true} if this SASL option must be specified when trying to
111       *          bind with the associated mechanism, or {@code false} if not.
112       */
113      public boolean isRequired()
114      {
115        return isRequired;
116      }
117    
118    
119    
120      /**
121       * Indicates whether this SASL option may be provided multiple times when
122       * trying to bind with the associated mechanism.
123       *
124       * @return  {@code true} if this SASL option may be provided multiple times
125       *          when trying to bind with the associated mechanism, or
126       *          {@code false} if not.
127       */
128      public boolean isMultiValued()
129      {
130        return isMultiValued;
131      }
132    
133    
134    
135      /**
136       * Retrieves a string representation for this SASL option.
137       *
138       * @return  A string representation for this SASL option.
139       */
140      @Override()
141      public String toString()
142      {
143        final StringBuilder buffer = new StringBuilder();
144        toString(buffer);
145        return buffer.toString();
146      }
147    
148    
149    
150      /**
151       * Appends a string representation of this SASL option to the provided buffer.
152       *
153       * @param  buffer  The buffer to which the information should be appended.
154       */
155      public void toString(final StringBuilder buffer)
156      {
157        buffer.append("SASLOption(name='");
158        buffer.append(name);
159        buffer.append("', description='");
160        buffer.append(description);
161        buffer.append("', isRequired=");
162        buffer.append(isRequired);
163        buffer.append(", isMultiValued=");
164        buffer.append(isMultiValued);
165        buffer.append(')');
166      }
167    }