001/* 002 * Copyright 2007-2017 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005/* 006 * Copyright (C) 2008-2017 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.ldap.sdk; 022 023 024 025import java.util.List; 026 027import com.unboundid.ldap.matchingrules.MatchingRule; 028import com.unboundid.ldif.LDIFAddChangeRecord; 029import com.unboundid.util.NotExtensible; 030import com.unboundid.util.ThreadSafety; 031import com.unboundid.util.ThreadSafetyLevel; 032 033 034 035/** 036 * This interface defines a set of methods that may be safely called in an LDAP 037 * add request without altering its contents. This interface must not be 038 * implemented by any class other than {@link AddRequest}. 039 * <BR><BR> 040 * This interface does not inherently provide the assurance of thread safety for 041 * the methods that it exposes, because it is still possible for a thread 042 * referencing the object which implements this interface to alter the request 043 * using methods not included in this interface. However, if it can be 044 * guaranteed that no thread will alter the underlying object, then the methods 045 * exposed by this interface can be safely invoked concurrently by any number of 046 * threads. 047 */ 048@NotExtensible() 049@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_NOT_THREADSAFE) 050public interface ReadOnlyAddRequest 051 extends ReadOnlyLDAPRequest 052{ 053 /** 054 * Retrieves the DN for this add request. 055 * 056 * @return The DN for this add request. 057 */ 058 String getDN(); 059 060 061 062 /** 063 * Retrieves the set of attributes for this add request. 064 * 065 * @return The set of attributes for this add request. 066 */ 067 List<Attribute> getAttributes(); 068 069 070 071 /** 072 * Retrieves the specified attribute from this add request. 073 * 074 * @param attributeName The name of the attribute to retrieve. It must not 075 * be {@code null}. 076 * 077 * @return The requested attribute, or {@code null} if it does not exist in 078 * the add request. 079 */ 080 Attribute getAttribute(final String attributeName); 081 082 083 084 /** 085 * Indicates whether this add request contains the specified attribute. 086 * 087 * @param attributeName The name of the attribute for which to make the 088 * determination. It must not be {@code null}. 089 * 090 * @return {@code true} if this add request contains the specified attribute, 091 * or {@code false} if not. 092 */ 093 boolean hasAttribute(final String attributeName); 094 095 096 097 /** 098 * Indicates whether this add request contains the specified attribute. It 099 * will only return {@code true} if this add request contains an attribute 100 * with the same name and exact set of values. 101 * 102 * @param attribute The attribute for which to make the determination. It 103 * must not be {@code null}. 104 * 105 * @return {@code true} if this add request contains the specified attribute, 106 * or {@code false} if not. 107 */ 108 boolean hasAttribute(final Attribute attribute); 109 110 111 112 /** 113 * Indicates whether this add request contains an attribute with the given 114 * name and value. 115 * 116 * @param attributeName The name of the attribute for which to make the 117 * determination. It must not be {@code null}. 118 * @param attributeValue The value for which to make the determination. It 119 * must not be {@code null}. 120 * 121 * @return {@code true} if this add request contains an attribute with the 122 * specified name and value, or {@code false} if not. 123 */ 124 boolean hasAttributeValue(final String attributeName, 125 final String attributeValue); 126 127 128 129 /** 130 * Indicates whether this add request contains an attribute with the given 131 * name and value. 132 * 133 * @param attributeName The name of the attribute for which to make the 134 * determination. It must not be {@code null}. 135 * @param attributeValue The value for which to make the determination. It 136 * must not be {@code null}. 137 * @param matchingRule The matching rule to use to make the determination. 138 * It must not be {@code null}. 139 * 140 * @return {@code true} if this add request contains an attribute with the 141 * specified name and value, or {@code false} if not. 142 */ 143 boolean hasAttributeValue(final String attributeName, 144 final String attributeValue, 145 final MatchingRule matchingRule); 146 147 148 149 /** 150 * Indicates whether this add request contains an attribute with the given 151 * name and value. 152 * 153 * @param attributeName The name of the attribute for which to make the 154 * determination. It must not be {@code null}. 155 * @param attributeValue The value for which to make the determination. It 156 * must not be {@code null}. 157 * 158 * @return {@code true} if this add request contains an attribute with the 159 * specified name and value, or {@code false} if not. 160 */ 161 boolean hasAttributeValue(final String attributeName, 162 final byte[] attributeValue); 163 164 165 166 /** 167 * Indicates whether this add request contains an attribute with the given 168 * name and value. 169 * 170 * @param attributeName The name of the attribute for which to make the 171 * determination. It must not be {@code null}. 172 * @param attributeValue The value for which to make the determination. It 173 * must not be {@code null}. 174 * @param matchingRule The matching rule to use to make the determination. 175 * It must not be {@code null}. 176 * 177 * @return {@code true} if this add request contains an attribute with the 178 * specified name and value, or {@code false} if not. 179 */ 180 boolean hasAttributeValue(final String attributeName, 181 final byte[] attributeValue, 182 final MatchingRule matchingRule); 183 184 185 186 /** 187 * Indicates whether this add request contains the specified object class. 188 * 189 * @param objectClassName The name of the object class for which to make the 190 * determination. It must not be {@code null}. 191 * 192 * @return {@code true} if this add request contains the specified object 193 * class, or {@code false} if not. 194 */ 195 boolean hasObjectClass(final String objectClassName); 196 197 198 199 /** 200 * Retrieves an {@code Entry} object containing the DN and attributes of this 201 * add request. 202 * 203 * @return An {@code Entry} object containing the DN and attributes of this 204 * add request. 205 */ 206 Entry toEntry(); 207 208 209 210 /** 211 * {@inheritDoc} 212 */ 213 AddRequest duplicate(); 214 215 216 217 /** 218 * {@inheritDoc} 219 */ 220 AddRequest duplicate(final Control[] controls); 221 222 223 224 /** 225 * Retrieves an LDIF add change record with the contents of this add request. 226 * 227 * @return An LDIF add change record with the contents of this add request. 228 */ 229 LDIFAddChangeRecord toLDIFChangeRecord(); 230 231 232 233 /** 234 * Retrieves a string array whose lines contain an LDIF representation of the 235 * corresponding add change record. 236 * 237 * @return A string array whose lines contain an LDIF representation of the 238 * corresponding add change record. 239 */ 240 String[] toLDIF(); 241 242 243 244 /** 245 * Retrieves an LDIF string representation of this add request. 246 * 247 * @return An LDIF string representation of this add request. 248 */ 249 String toLDIFString(); 250}