/*
|
* CDDL HEADER START
|
*
|
* The contents of this file are subject to the terms of the
|
* Common Development and Distribution License, Version 1.0 only
|
* (the "License"). You may not use this file except in compliance
|
* with the License.
|
*
|
* You can obtain a copy of the license at
|
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
|
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
|
* See the License for the specific language governing permissions
|
* and limitations under the License.
|
*
|
* When distributing Covered Code, include this CDDL HEADER in each
|
* file and include the License file at
|
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
|
* add the following below this CDDL HEADER, with the fields enclosed
|
* by brackets "[]" replaced with your own identifying information:
|
* Portions Copyright [yyyy] [name of copyright owner]
|
*
|
* CDDL HEADER END
|
*
|
*
|
* Copyright 2010 Sun Microsystems, Inc.
|
*/
|
|
import netscape.ldap.*;
|
import netscape.ldap.util.*;
|
import java.util.ArrayList;
|
|
class Change {
|
int changeNumber = 0;
|
String changelogCookie = null;
|
CSN csn;
|
String type = "";
|
String dn = "";
|
ArrayList<String> changes = new ArrayList<String>(2);
|
String change = "";
|
String replicaIdentifier = null;
|
String changeNumberValue = null;
|
String nsUniqueId = "";
|
boolean deleteOldRDN = false;
|
String newRDN = null;
|
String newSuperior = null;
|
|
|
public Change(LDAPEntry entry) throws Exception {
|
|
|
LDAPAttribute attr = entry.getAttribute("replicaIdentifier");
|
if ( attr == null ) {
|
throw new Exception("No value found for replicaIdentifier");
|
}
|
replicaIdentifier = attr.getStringValueArray()[0];
|
|
|
attr = entry.getAttribute("changeNumber");
|
if ( attr == null ) {
|
throw new Exception("No value found for changeNumber");
|
}
|
changeNumberValue = attr.getStringValueArray()[0];
|
changeNumber = Integer.parseInt(changeNumberValue);
|
|
attr = entry.getAttribute("changelogCookie");
|
if ( attr != null ) {
|
changelogCookie = attr.getStringValueArray()[0];
|
}
|
|
|
attr = entry.getAttribute("replicationCSN");
|
if ( attr == null ) {
|
throw new Exception("No value found for replicationCSN");
|
}
|
csn = new CSN(attr.getStringValueArray()[0]);
|
|
attr = entry.getAttribute("targetDN");
|
if ( attr == null ) {
|
throw new Exception("No value found for targetDN");
|
}
|
dn = attr.getStringValueArray()[0];
|
|
attr = entry.getAttribute("changeType");
|
if ( attr == null ) {
|
throw new Exception("No value found for changeType");
|
}
|
type = attr.getStringValueArray()[0];
|
|
|
// attr = entry.getAttribute("targetUniqueId");
|
// if ( attr == null ) {
|
// throw new Exception("No value found for targetUniqueId");
|
// }
|
// nsUniqueId=attr.getStringValueArray()[0];
|
attr = entry.getAttribute("targetEntryUUID");
|
if ( attr == null ) {
|
throw new Exception("No value found for targetEntryUUID");
|
}
|
nsUniqueId = attr.getStringValueArray()[0];
|
|
|
// modrdn
|
if ( type.equals("modrdn") ) {
|
attr = entry.getAttribute("deleteOldRDN");
|
if ( attr == null ) {
|
throw new Exception("No value found for deleteOldRDN");
|
}
|
deleteOldRDN = Boolean.getBoolean(attr.getStringValueArray()[0]);
|
|
attr = entry.getAttribute("newRDN");
|
if ( attr == null ) {
|
throw new Exception("No value found for newRDN");
|
}
|
newRDN = attr.getStringValueArray()[0];
|
|
attr = entry.getAttribute("newSuperior");
|
if ( attr != null ) {
|
newSuperior=attr.getStringValueArray()[0];
|
}
|
}
|
|
// Conflict
|
attr = entry.getAttribute("changeHasReplFixupOp");
|
if ( attr != null ) {
|
change = attr.getStringValueArray()[0];
|
if ( change.trim().endsWith("-") ) {
|
change = change.substring(0, change.length()-3) + "\r\n";
|
}
|
String changeHasReplFixupOp=change.replaceFirst("targetDn", "dn") + "\r\n";
|
|
// println ("INFO", "FixupOp (csn="+ csn+"):\n" + changeHasReplFixupOp);
|
changes.add(changeHasReplFixupOp);
|
}
|
|
attr = entry.getAttribute("changes");
|
if ( attr != null ) {
|
change = attr.getStringValueArray()[0];
|
if ( change.trim().endsWith("-") ) {
|
change = change.substring(0, change.length()-3) + "\r\n";
|
}
|
}
|
|
|
if ( type.equals("modify") && ( change.equals("") ) ) {
|
throw new Exception("Attribute changes is empty - replicationCSN="+ csn);
|
//EclReadAndPlay.accessOut.println (getDate() + "- WARNING: Ignore change csn=" + csn );
|
}
|
|
String myChange = "dn: " + dn + "\n" +
|
"changetype: " + type + "\n" +
|
change +"\n";
|
|
changes.add(myChange);
|
|
changes.trimToSize();
|
|
}
|
|
|
public String toString() {
|
return ("change number " + changeNumber + " (csn="+csn +")");
|
}
|
}
|