bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington/*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: ModSet.java,v 1.4 2009/01/28 05:34:49 ww203982 Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Portions Copyright 2015 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.iplanet.services.ldap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport java.util.ArrayList;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport java.util.List;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport org.forgerock.opendj.ldap.Attribute;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport org.forgerock.opendj.ldap.Modification;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport org.forgerock.opendj.ldap.ModificationType;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Represents a set of modification on attributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonpublic class ModSet implements java.io.Serializable {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // TODO: This is an incomplete implementation. Currently subclass from
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // LDAPModificationSet is used to get things going. Need internal
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // representation overhaul to move away from "extends LDAPModification"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Modification specifiers for ADD
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public static final int ADD = ModificationType.ADD.intValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Modification specifiers for REPLACE
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public static final int REPLACE = ModificationType.REPLACE.intValue();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Modification specifiers for DELETE
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public static final int DELETE = ModificationType.DELETE.intValue();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington static final long serialVersionUID = 4650238666753391214L;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington private int current = 0;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington private final List<Modification> modifications = new ArrayList<>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Default consturctor
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ModSet() {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington current = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Constructor with an attribute set defaulting all operation types to
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * ModSet.ADD
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param attrSet
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Attribute set to construct the modSet. All operations are
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * default to ModSet.ADD
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ModSet(AttrSet attrSet) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this(attrSet, ModSet.ADD);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Construct ModSet given the same operation on a set of attributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param attrSet
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Attribute set to construct the ModSet
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param op
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Operation type for ADD, REPLACE or DELETE
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ModSet(AttrSet attrSet, int op) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < attrSet.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this.add(op, attrSet.elementAt(i).toLDAPAttribute());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington /**
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Retrieves the number of <CODE>LDAPModification</CODE>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * objects in this set.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @return the number of <CODE>LDAPModification</CODE>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * objects in this set.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public int size() {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return modifications.size();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington /**
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Retrieves a particular <CODE>LDAPModification</CODE> object at
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * the position specified by the index.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @param index position of the <CODE>LDAPModification</CODE>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * object that you want to retrieve.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @return <CODE>LDAPModification</CODE> object representing
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * a change to make to an attribute.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public Modification elementAt(int index) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return modifications.get(index);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington /**
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Removes a particular <CODE>LDAPModification</CODE> object at
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * the position specified by the index.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @param index position of the <CODE>LDAPModification</CODE>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * object that you want to remove
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public void removeElementAt(int index) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington modifications.remove(index);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington /**
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Specifies another modification to be added to the set of modifications.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @param op the type of modification to make. This can be one of the following:
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * <P>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * <UL>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * <LI><CODE>LDAPModification.ADD</CODE> (the value should be added to the attribute)
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * <LI><CODE>LDAPModification.DELETE</CODE> (the value should be removed from the attribute)
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * <LI><CODE>LDAPModification.REPLACE</CODE> (the value should replace the existing value of the attribute)
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * </UL><P>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * If you are working with a binary value (not a string value), you need to bitwise OR (|) the
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * modification type with <CODE>LDAPModification.BVALUES</CODE>.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * <P>
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington *
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @param attr the attribute (possibly with values) to modify
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public synchronized void add(int op, Attribute attr) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington Modification mod = new Modification(ModificationType.valueOf(op), attr);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington modifications.add(mod);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington /**
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Removes the first attribute with the specified name in the set of modifications.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @param name name of the attribute to remove
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public synchronized void remove( String name ) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington for (int i = 0; i < modifications.size(); i++) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington Modification mod = modifications.get(i);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington Attribute attr = mod.getAttribute();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (name.equalsIgnoreCase(attr.getAttributeDescriptionAsString())) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington modifications.remove(i);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington /**
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Retrieves the string representation of the
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * modification set.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington *
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * @return string representation of the modification set.
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public String toString() {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return "LDAPModificationSet: " + modifications.toString();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}