001/* 002 * Copyright 2011-2014 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005/* 006 * Copyright (C) 2011-2014 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 */ 021package com.unboundid.util; 022 023 024 025import java.util.Arrays; 026import java.util.Collections; 027import java.util.Iterator; 028import java.util.List; 029 030 031 032/** 033 * This class provides a data structure which holds information about a SASL 034 * mechanism supported for use with the {@link SASLUtils} class. 035 */ 036@NotMutable() 037@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 038public final class SASLMechanismInfo 039{ 040 // Indicates whether this SASL mechanism allows a password to be provided. 041 private final boolean acceptsPassword; 042 043 // Indicates whether this SASL mechanism requires a password to be provided. 044 private final boolean requiresPassword; 045 046 // The list of options available for use with this mechanism. 047 private final List<SASLOption> options; 048 049 // A description for this SASL mechanism. 050 private final String description; 051 052 // The name for this SASL mechanism. 053 private final String name; 054 055 056 057 /** 058 * Creates a new SASL mechanism info object with the provided information. 059 * 060 * @param name The name for the SASL mechanism. 061 * @param description A description for the SASL mechanism. 062 * @param acceptsPassword Indicates whether the SASL mechanism allows a 063 * password to be provided. 064 * @param requiresPassword Indicates whether the SASL mechanism requires a 065 * password to be provided. 066 * @param options The set of options that are associated with the 067 * SASL mechanism. 068 */ 069 public SASLMechanismInfo(final String name, final String description, 070 final boolean acceptsPassword, 071 final boolean requiresPassword, 072 final SASLOption... options) 073 { 074 this.name = name; 075 this.description = description; 076 this.acceptsPassword = acceptsPassword; 077 this.requiresPassword = requiresPassword; 078 079 if ((options == null) || (options.length == 0)) 080 { 081 this.options = Collections.emptyList(); 082 } 083 else 084 { 085 this.options = Collections.unmodifiableList(Arrays.asList(options)); 086 } 087 } 088 089 090 091 /** 092 * Retrieves the name of the SASL mechanism. 093 * 094 * @return The name of the SASL mechanism. 095 */ 096 public String getName() 097 { 098 return name; 099 } 100 101 102 103 /** 104 * Retrieves a description for the SASL mechanism. 105 * 106 * @return A description for the SASL mechanism. 107 */ 108 public String getDescription() 109 { 110 return description; 111 } 112 113 114 115 /** 116 * Indicates whether the SASL mechanism accepts a password for authentication 117 * processing. 118 * 119 * @return {@code true} if the SASL mechanism accepts a password for 120 * authentication processing, or {@code false} if not. 121 */ 122 public boolean acceptsPassword() 123 { 124 return acceptsPassword; 125 } 126 127 128 129 /** 130 * Indicates whether the SASL mechanism requires a password for authentication 131 * processing. 132 * 133 * @return {@code true} if the SASL mechanism requires a password for 134 * authentication processing, or {@code false} if not. 135 */ 136 public boolean requiresPassword() 137 { 138 return requiresPassword; 139 } 140 141 142 143 /** 144 * Retrieves a list of the options that may be used with the SASL mechanism. 145 * 146 * @return A list of the options that may be used with the SASL mechanism, or 147 * an empty list if there are no supported SASL options for the 148 * associated mechanism. 149 */ 150 public List<SASLOption> getOptions() 151 { 152 return options; 153 } 154 155 156 157 /** 158 * Retrieves a string representation of this SASL mechanism info object. 159 * 160 * @return A string representation of this SASL mechanism info object. 161 */ 162 @Override() 163 public String toString() 164 { 165 final StringBuilder buffer = new StringBuilder(); 166 toString(buffer); 167 return buffer.toString(); 168 } 169 170 171 172 /** 173 * Appends a string representation of this SASL mechanism info object to the 174 * provided buffer. 175 * 176 * @param buffer The buffer to which the information should be appended. 177 */ 178 public void toString(final StringBuilder buffer) 179 { 180 buffer.append("SASLMechanismInfo(name='"); 181 buffer.append(name); 182 buffer.append("', description='"); 183 buffer.append(description); 184 buffer.append("', acceptsPassword="); 185 buffer.append(acceptsPassword); 186 buffer.append(", requiresPassword="); 187 buffer.append(requiresPassword); 188 buffer.append(", options={"); 189 190 final Iterator<SASLOption> iterator = options.iterator(); 191 while (iterator.hasNext()) 192 { 193 iterator.next().toString(buffer); 194 if (iterator.hasNext()) 195 { 196 buffer.append(", "); 197 } 198 } 199 200 buffer.append("})"); 201 } 202}