001 /*
002 * Copyright 2016 UnboundID Corp.
003 * All Rights Reserved.
004 */
005 /*
006 * Copyright (C) 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.ldap.sdk.experimental;
022
023
024
025 import com.unboundid.ldap.sdk.Entry;
026 import com.unboundid.ldap.sdk.LDAPException;
027 import com.unboundid.ldap.sdk.ModifyDNRequest;
028 import com.unboundid.ldap.sdk.OperationType;
029 import com.unboundid.ldap.sdk.ResultCode;
030 import com.unboundid.util.NotMutable;
031 import com.unboundid.util.StaticUtils;
032 import com.unboundid.util.ThreadSafety;
033 import com.unboundid.util.ThreadSafetyLevel;
034
035 import static com.unboundid.ldap.sdk.experimental.ExperimentalMessages.*;
036
037
038
039 /**
040 * This class represents an entry that holds information about a modify DN
041 * operation processed by an LDAP server, as per the specification described in
042 * draft-chu-ldap-logschema-00.
043 */
044 @NotMutable()
045 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
046 public final class DraftChuLDAPLogSchema00ModifyDNEntry
047 extends DraftChuLDAPLogSchema00Entry
048 {
049 /**
050 * The name of the attribute used to hold the value of the delete old RDN
051 * flag.
052 */
053 public static final String ATTR_DELETE_OLD_RDN = "reqDeleteOldRDN";
054
055
056
057 /**
058 * The name of the attribute used to hold the new RDN value.
059 */
060 public static final String ATTR_NEW_RDN = "reqNewRDN";
061
062
063
064 /**
065 * The name of the attribute used to hold the new superior DN value.
066 */
067 public static final String ATTR_NEW_SUPERIOR_DN = "reqNewSuperior";
068
069
070
071 /**
072 * The serial version UID for this serializable class.
073 */
074 private static final long serialVersionUID = 5891004379538957384L;
075
076
077
078 // The delete old RDN value.
079 private final boolean deleteOldRDN;
080
081 // The new RDN.
082 private final String newRDN;
083
084 // The new superior DN.
085 private final String newSuperiorDN;
086
087
088
089 /**
090 * Creates a new instance of this modify DN access log entry from the provided
091 * entry.
092 *
093 * @param entry The entry used to create this modify DN access log entry.
094 *
095 * @throws LDAPException If the provided entry cannot be decoded as a valid
096 * modify DN access log entry as per the specification
097 * contained in draft-chu-ldap-logschema-00.
098 */
099 public DraftChuLDAPLogSchema00ModifyDNEntry(final Entry entry)
100 throws LDAPException
101 {
102 super(entry, OperationType.MODIFY_DN);
103
104
105 // Get the new RDN.
106 newRDN = entry.getAttributeValue(ATTR_NEW_RDN);
107 if (newRDN == null)
108 {
109 throw new LDAPException(ResultCode.DECODING_ERROR,
110 ERR_LOGSCHEMA_DECODE_MISSING_REQUIRED_ATTR.get(entry.getDN(),
111 ATTR_NEW_RDN));
112 }
113
114
115 // Get the delete old RDN flag.
116 final String deleteOldRDNString =
117 entry.getAttributeValue(ATTR_DELETE_OLD_RDN);
118 if (deleteOldRDNString == null)
119 {
120 throw new LDAPException(ResultCode.DECODING_ERROR,
121 ERR_LOGSCHEMA_DECODE_MISSING_REQUIRED_ATTR.get(entry.getDN(),
122 ATTR_DELETE_OLD_RDN));
123 }
124
125 final String lowerDeleteOldRDN =
126 StaticUtils.toLowerCase(deleteOldRDNString);
127 if (lowerDeleteOldRDN.equals("true"))
128 {
129 deleteOldRDN = true;
130 }
131 else if (lowerDeleteOldRDN.equals("false"))
132 {
133 deleteOldRDN = false;
134 }
135 else
136 {
137 throw new LDAPException(ResultCode.DECODING_ERROR,
138 ERR_LOGSCHEMA_DECODE_MODIFY_DN_DELETE_OLD_RDN_ERROR.get(
139 entry.getDN(), ATTR_DELETE_OLD_RDN, deleteOldRDNString));
140 }
141
142
143 // Get the new superior DN.
144 newSuperiorDN = entry.getAttributeValue(ATTR_NEW_SUPERIOR_DN);
145 }
146
147
148
149 /**
150 * Retrieves the new RDN for the modify DN request described by this modify DN
151 * access log entry.
152 *
153 * @return The new RDN for the modify DN request described by this modify DN
154 * access log entry.
155 */
156 public String getNewRDN()
157 {
158 return newRDN;
159 }
160
161
162
163 /**
164 * Retrieves the value of the "delete old RDN" flag for the modify DN request
165 * described by this modify DN access log entry.
166 *
167 * @return {@code true} if the modify request indicated that old RDN
168 * attribute values should be removed from the entry, or
169 * {@code false} if old RDN attribute values should be preserved.
170 */
171 public boolean deleteOldRDN()
172 {
173 return deleteOldRDN;
174 }
175
176
177
178 /**
179 * Retrieves the new superior DN for the modify DN request described by this
180 * modify DN access log entry, if any.
181 *
182 * @return The new superior DN for the modify DN request described by this
183 * modify DN access log entry, or {@code null} if there is no new
184 * superior DN.
185 */
186 public String getNewSuperiorDN()
187 {
188 return newSuperiorDN;
189 }
190
191
192
193 /**
194 * Retrieves a {@code ModifyDNRequest} created from this modify DN access log
195 * entry.
196 *
197 * @return The {@code ModifyDNRequest} created from this modify DN access log
198 * entry.
199 */
200 public ModifyDNRequest toModifyDNRequest()
201 {
202 return new ModifyDNRequest(getTargetEntryDN(), newRDN, deleteOldRDN,
203 newSuperiorDN, getRequestControlArray());
204 }
205 }