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.types; 028 029 030 031 import static org.opends.server.util.ServerConstants.*; 032 033 034 035 /** 036 * This class defines a data structure for storing and interacting 037 * with a modification that may be requested of an entry in the 038 * Directory Server. 039 */ 040 @org.opends.server.types.PublicAPI( 041 stability=org.opends.server.types.StabilityLevel.UNCOMMITTED, 042 mayInstantiate=true, 043 mayExtend=false, 044 mayInvoke=true) 045 public final class Modification 046 { 047 // The attribute for this modification. 048 private Attribute attribute; 049 050 // Indicates whether this modification was generated by internal 051 // processing and therefore should not be subject to 052 // no-user-modification and related checks. 053 private boolean isInternal; 054 055 // The modification type for this modification. 056 private ModificationType modificationType; 057 058 059 060 /** 061 * Creates a new modification with the provided information. 062 * 063 * @param modificationType The modification type for this 064 * modification. 065 * @param attribute The attribute for this modification. 066 */ 067 public Modification(ModificationType modificationType, 068 Attribute attribute) 069 { 070 this.modificationType = modificationType; 071 this.attribute = attribute; 072 073 isInternal = false; 074 } 075 076 077 078 /** 079 * Creates a new modification with the provided information. 080 * 081 * @param modificationType The modification type for this 082 * modification. 083 * @param attribute The attribute for this modification. 084 * @param isInternal Indicates whether this is an internal 085 * modification and therefore should not 086 * be subject to no-user-modification and 087 * related checks. 088 */ 089 public Modification(ModificationType modificationType, 090 Attribute attribute, boolean isInternal) 091 { 092 this.modificationType = modificationType; 093 this.attribute = attribute; 094 this.isInternal = isInternal; 095 } 096 097 098 099 /** 100 * Retrieves the modification type for this modification. 101 * 102 * @return The modification type for this modification. 103 */ 104 public ModificationType getModificationType() 105 { 106 return modificationType; 107 } 108 109 110 111 /** 112 * Specifies the modification type for this modification. 113 * 114 * @param modificationType The modification type for this 115 * modification. 116 */ 117 @org.opends.server.types.PublicAPI( 118 stability=org.opends.server.types.StabilityLevel.PRIVATE, 119 mayInstantiate=false, 120 mayExtend=false, 121 mayInvoke=false) 122 public void setModificationType(ModificationType modificationType) 123 { 124 this.modificationType = modificationType; 125 } 126 127 128 129 /** 130 * Retrieves the attribute for this modification. 131 * 132 * @return The attribute for this modification. 133 */ 134 public Attribute getAttribute() 135 { 136 return attribute; 137 } 138 139 140 141 /** 142 * Specifies the attribute for this modification. 143 * 144 * @param attribute The attribute for this modification. 145 */ 146 @org.opends.server.types.PublicAPI( 147 stability=org.opends.server.types.StabilityLevel.PRIVATE, 148 mayInstantiate=false, 149 mayExtend=false, 150 mayInvoke=false) 151 public void setAttribute(Attribute attribute) 152 { 153 this.attribute = attribute; 154 } 155 156 157 158 /** 159 * Indicates whether this is modification was created by internal 160 * processing and should not be subject to no-user-modification and 161 * related checks. 162 * 163 * @return <CODE>true</CODE> if this is an internal modification, 164 * or <CODE>false</CODE> if not. 165 */ 166 public boolean isInternal() 167 { 168 return isInternal; 169 } 170 171 172 173 /** 174 * Specifies whether this modification was created by internal 175 * processing and should not be subject to no-user-modification and 176 * related checks. 177 * 178 * @param isInternal Specifies whether this modification was 179 * created by internal processing and should 180 * not be subject to no-user-modification and 181 * related checks. 182 */ 183 public void setInternal(boolean isInternal) 184 { 185 this.isInternal = isInternal; 186 } 187 188 189 190 /** 191 * Indicates whether the provided object is equal to this 192 * modification. It will only be considered equal if the object is 193 * a modification with the same modification type and an attribute 194 * that is equal to this modification. 195 * 196 * @param o The object for which to make the determination. 197 * 198 * @return <CODE>true</CODE> if the provided object is a 199 * modification that is equal to this modification, or 200 * <CODE>false</CODE> if not. 201 */ 202 public boolean equals(Object o) 203 { 204 if (this == o) 205 { 206 return true; 207 } 208 209 if ((o == null) || (! (o instanceof Modification))) 210 { 211 return false; 212 } 213 214 Modification m = (Modification) o; 215 if (modificationType != m.modificationType) 216 { 217 return false; 218 } 219 220 return attribute.equals(m.attribute); 221 } 222 223 224 225 /** 226 * Retrieves the hash code for this modification. The hash code 227 * returned will be the hash code for the attribute included in this 228 * modification. 229 * 230 * @return The hash code for this modification. 231 */ 232 public int hashCode() 233 { 234 return attribute.hashCode(); 235 } 236 237 238 239 /** 240 * Retrieves a one-line string representation of this modification. 241 * 242 * @return A one-line string representation of this modification. 243 */ 244 public String toString() 245 { 246 StringBuilder buffer = new StringBuilder(); 247 toString(buffer); 248 return buffer.toString(); 249 } 250 251 252 253 /** 254 * Appends a one-line representation of this modification to the 255 * provided buffer. 256 * 257 * @param buffer The buffer to which the information should be 258 * appended. 259 */ 260 public void toString(StringBuilder buffer) 261 { 262 buffer.append("Modification("); 263 buffer.append(modificationType.toString()); 264 buffer.append(", "); 265 buffer.append(attribute.toString()); 266 } 267 268 269 270 /** 271 * Retrieves a string representation of this modification in LDIF 272 * form. 273 * 274 * @return A string representation of this modification in LDIF 275 * form. 276 */ 277 public String toLDIF() 278 { 279 StringBuilder buffer = new StringBuilder(); 280 toLDIF(buffer); 281 return buffer.toString(); 282 } 283 284 285 286 /** 287 * Appends a string representation of this modification in LDIF form 288 * to the provided buffer. 289 * 290 * @param buffer The buffer to which the information should be 291 * appended. 292 */ 293 public void toLDIF(StringBuilder buffer) 294 { 295 buffer.append(modificationType.toString()); 296 buffer.append(": "); 297 buffer.append(attribute.getName()); 298 buffer.append(EOL); 299 300 attribute.toLDIF(buffer); 301 } 302 } 303