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: Attr.java,v 1.4 2009/01/28 05:34:49 ww203982 Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Portions Copyrighted 2011-2015 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.iplanet.services.ldap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.ArrayList;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport java.util.List;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Locale;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport java.util.StringTokenizer;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport org.forgerock.opendj.ldap.Attribute;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport org.forgerock.opendj.ldap.Attributes;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Represents an attribute value pair in UMS. The value of an attribute can be
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of multiple values.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class Attr implements java.io.Serializable, java.lang.Cloneable {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String _name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington private List<String> _stringValues;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington private List<byte[]> _byteValues;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington private Attribute _ldapAttribute;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Default constructor
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Attr() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Constructs an attribute value pair with no value.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * attribute name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Attr(String name) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _name = name.toLowerCase();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Construct an attribute value pair with a single string value.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the name of attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * string value of attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Attr(String name, String value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _name = name.toLowerCase();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _stringValues = new ArrayList<>(1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _stringValues.add(value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Construct an attribute value pair with a multiple string values.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the name of attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * multiple string values of attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Attr(String name, String[] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _name = name.toLowerCase();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = value.length;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _stringValues = new ArrayList<>(size);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _stringValues.add(value[i]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Constructs an attribute value pair with byte array.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * attribute name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * byte array as input for value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Attr(String name, byte[] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _name = name.toLowerCase();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _byteValues = new ArrayList<>(1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _byteValues.add(value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Constructs an attribute value pair with array of byte array.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * attribute name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * array of byte array as input for value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Attr(String name, byte[][] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _name = name.toLowerCase();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _byteValues = new ArrayList<>(1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = value.length;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _byteValues.add(value[i]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Construct an attribute based on a LDAP attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param attr
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * ldap attribute to construct from
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public Attr(Attribute attr) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _name = attr.getAttributeDescriptionAsString().toLowerCase();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _ldapAttribute = attr; // attr.clone() ?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Map to a ldap attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return an ldap attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public Attribute toLDAPAttribute() {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington Attribute ldapAttribute = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington int size = _stringValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (size == 0) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute = Attributes.emptyAttribute(_name);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (size == 1) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute = Attributes.singletonAttribute(_name, _stringValues.get(0));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (size > 1) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute = Attributes.emptyAttribute(_name);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington for (String value : _stringValues) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute.add(value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (_byteValues != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute = Attributes.emptyAttribute(_name);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington for (byte[] value : _byteValues) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute.add(value); // clone?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (_ldapAttribute != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ldapAttribute = _ldapAttribute; // clone?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (_name != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ldapAttribute = Attributes.emptyAttribute(_name);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return ldapAttribute;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Set value of an attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the attribute value to be set
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setValue(String value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _stringValues.clear();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addValue(value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Add a string value to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * value to be added to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void addValue(String value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!_stringValues.contains(value)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _stringValues.add(value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Add mulitple string values to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param values
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * string values to be added to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void addValues(String[] values) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = values.length;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addValue(values[i]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Remove a specified string value in the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * specified value to be remvoed from the value array
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void removeValue(String value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = _stringValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues.get(i).equals(value)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _stringValues.remove(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Set value of an attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the attribute value to be set
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setValue(byte[] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupByteValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _byteValues.clear();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addValue(value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Add a byte array value to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * byte array value to be added to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void addValue(byte[] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupByteValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _byteValues.add(value); // clone?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Add a list byte array values to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param values
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of byte array values to be added to the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void addValues(byte[][] values) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = values.length;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addValue(values[i]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Remove a specified string value in the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * specified value to be remvoed from the value array
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void removeValue(byte[] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupByteValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = _byteValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // we might have to change the logic here to compare each byte
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues.get(i).equals(value)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _byteValues.remove(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get name of an UMS attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return name of an UMS attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String getName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return _name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get name of attribute in a given Locale
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param locale
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Given locale for the attribute name to return
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return name of an UMS attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String getName(Locale locale) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return Attr.getName(_name, locale);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get attribute name with locale input.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param attrName
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * name of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param locale
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * desired locale for the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return attribute name with locale attached for retrieval
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static public String getName(String attrName, Locale locale) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String name = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String baseName = getBaseName(attrName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (locale == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster name = baseName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // TODO: ??? check if locale.toString method provides the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // contents in locale.getLanguage, locale.getSubtype, and
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // locale.getVariant methods that match the language subtypes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // in LDAP.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster //
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String localeStr = locale.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (localeStr.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder sb = new StringBuilder(baseName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(";lang-");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append(localeStr);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster name = sb.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get base name for the attribute. e.g, the base name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of "cn;lang-en" or "cn;lang-ja" is "cn"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return basename of an attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String getBaseName() {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (_name != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return getBaseName(getName());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get base name for an attribute name. e.g, the base
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * name of "cn;lang-en" or "cn;lang-ja" is "cn"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return basename of the given attribute name
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static public String getBaseName(String attrName) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington String basename = attrName;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington StringTokenizer st = new StringTokenizer(attrName, ";");
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if( st.hasMoreElements() )
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington // First element is base name
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington basename = (String)st.nextElement();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return basename;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get one string value of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return one value of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String getValue() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String value = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!_stringValues.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster value = (String) _stringValues.get(0);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return value;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get the string values of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return the values in an string array
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String[] getStringValues() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Returning a colletion would be better, but would break existing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // higher level
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // code
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // com.iplanet.ums.Pauser.pause("10", "_stringValues : " +
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // _stringValues);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // com.iplanet.ums.Pauser.pause("10", "_stringValue : " + _stringValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // System.out.println("_stringValue : " + _stringValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // System.out.println("_stringValues : " + _stringValues);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] stringValues = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = _stringValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster stringValues = new String[size];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster stringValues[i] = (String) _stringValues.get(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return stringValues;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Checks whether the given value already exist for
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the value to check for
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return <code>true</code> if the value already exists,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>false</code> otherwise
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean contains(String value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean contained = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = _stringValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues.get(i).equals(value)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster contained = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return contained;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get one byte[] value of the attribute Returning a
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * colletion would be better, but will not be consistent with the method
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * getStringValues()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return one byte[] value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public byte[] getByteValue() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Not cloning the value before returning. Do we need to clone?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster byte[] value = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupByteValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!_byteValues.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster value = (byte[]) _byteValues.get(0);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return value;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get the byte[] values of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return the byte[] values in array
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public byte[][] getByteValues() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Not cloning the values before returning. Do we need to clone?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster byte[][] byteValues = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupByteValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = _byteValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster byteValues = new byte[size][];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster byteValues[i] = (byte[]) _byteValues.get(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return byteValues;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Checks whether the given value already exist for
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * the value to check for
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return <code>true</code> if the value already exists,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>false</code> otherwise
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean contains(byte[] value) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean contained = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupByteValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = _byteValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // we might have to change the logic here to compare each byte
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues.get(i).equals(value)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster contained = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return contained;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get the number of values of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return The number of values of the attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public int size() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster size = _stringValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (_byteValues != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster size = _byteValues.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (_ldapAttribute != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster size = _ldapAttribute.size();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return size;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Return a copy of the object
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return A copy of the object
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Object clone() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * TO DO : revisit and do proper deep cloning?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Attr theClone = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster theClone = (Attr) super.clone();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington theClone._stringValues = new ArrayList<>(_stringValues);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_byteValues != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington theClone._byteValues = new ArrayList<>(_byteValues);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (_ldapAttribute != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster theClone._ldapAttribute = _ldapAttribute; // clone?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return theClone;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Retrieves the string representation of an attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return string representation of the attribute.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String toString() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_stringValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setupStringValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return "Name : " + _name + _stringValues;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private void setupStringValues() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_ldapAttribute != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington String[] values = _ldapAttribute.toArray(new String[0]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = values.length;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _stringValues = new ArrayList<>(size);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _stringValues.add(values[i]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _stringValues = new ArrayList<>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private void setupByteValues() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (_ldapAttribute != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington byte[][] values = _ldapAttribute.toArray(new byte[0][]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int size = values.length;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _byteValues = new ArrayList<>(size);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < size; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster _byteValues.add(values[i]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington _byteValues = new ArrayList<>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}