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