CustomSearchResult.java revision e1cd6c2bc4addf80537e31f929118ac8f908ea63
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * CDDL HEADER START
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Common Development and Distribution License, Version 1.0 only
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the "License"). You may not use this file except in compliance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * or http://forgerock.org/license/CDDLv1.0.html.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing permissions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL HEADER in each
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * file and include the License file at legal-notices/CDDLv1_0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below this CDDL HEADER, with the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * fields enclosed by brackets "[]" replaced with your own identifying
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Portions Copyright [yyyy] [name of copyright owner]
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * CDDL HEADER END
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright 2008-2010 Sun Microsystems, Inc.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Portions Copyright 2011-2015 ForgeRock AS
828057d90816871c55a24e161757edb11f09e5ddPeter Majorpackage org.opends.guitools.controlpanel.datamodel;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport static org.opends.server.util.StaticUtils.toLowerCase;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.opends.guitools.controlpanel.util.Utilities;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.opends.server.types.AttributeBuilder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is a commodity class used to wrap the SearchResult class of JNDI.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Basically it retrieves all the attributes and values on the SearchResult and
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * calculates its DN. Using it we avoid having to handle the NamingException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * exceptions that most of the methods in SearchResult throw.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class CustomSearchResult implements Comparable<CustomSearchResult>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructor of an empty search result. This constructor is used by the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * LDAP entry editor which 'build' their own CustomSearchResult. The entry
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * editors use some methods that require CustomSearchResult.
89503929c8983c48e2049c77284b52e79ad37c32jeff.schenk * @param dn the dn of the entry.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes = new HashMap<String, List<Object>>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructor of a search result using a SearchResult as basis.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sr the SearchResult.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param baseDN the base DN of the search that returned the SearchResult.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws NamingException if there is an error retrieving the attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public CustomSearchResult(SearchResult sr, String baseDN)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((buf.length() != 0) && (n != null) && (n.length() > 0))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes = new HashMap<String, List<Object>>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes.put(attrName.toLowerCase(), values);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns the DN of the entry.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the DN of the entry.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns the values for a given attribute. It returns an empty Set if
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * the attribute is not defined.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param name the name of the attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the values for a given attribute. It returns an empty Set if
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * the attribute is not defined.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List<Object> getAttributeValues(String name) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List<Object> values = attributes.get(name.toLowerCase());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns all the attribute names of the entry.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the attribute names of the entry.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /** {@inheritDoc} */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Return a new object, copy of the current object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a new object, copy of the current object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CustomSearchResult sr = new CustomSearchResult(dn);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sr.attributes = new HashMap<String, List<Object>>(attributes);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /** {@inheritDoc} */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (o == this)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (o instanceof CustomSearchResult)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster && getAttributeNames().equals(sr.getAttributeNames())
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private boolean attrValuesEqual(CustomSearchResult sr)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!getAttributeValues(attrName).equals(sr.getAttributeValues(attrName)))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /** {@inheritDoc} */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /** {@inheritDoc} */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public int hashCode() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets the values for a given attribute name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param attrName the name of the attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param values the values for the attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void set(String attrName, List<Object> values)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets the Entry object equivalent to this CustomSearchResult.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The method assumes that the schema in DirectoryServer has been initialized.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the Entry object equivalent to this CustomSearchResult.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws OpenDsException if there is an error parsing the DN or retrieving
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * the attributes definition and objectclasses in the schema of the server.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<ObjectClass,String> objectClasses = new HashMap<ObjectClass,String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<AttributeType,List<org.opends.server.types.Attribute>> userAttributes =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new HashMap<AttributeType,List<org.opends.server.types.Attribute>>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<AttributeType,List<org.opends.server.types.Attribute>>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new HashMap<AttributeType,List<org.opends.server.types.Attribute>>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster final org.opends.server.types.Attribute attribute =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster final String lowerName = toLowerCase(attrName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // See if this is an objectclass or an attribute. Then get the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // corresponding definition and add the value to the appropriate hash.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Object value : getAttributeValues(attrName))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster objectClass = DirectoryServer.getDefaultObjectClass(ocName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AttributeType attrType = DirectoryServer.getAttributeType(lowerName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attrType = DirectoryServer.getDefaultAttributeType(attrName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AttributeBuilder builder = new AttributeBuilder(attribute, true);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Object value : getAttributeValues(attrName))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (value instanceof byte[])
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List<org.opends.server.types.Attribute> attrList =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new ArrayList<org.opends.server.types.Attribute>(1);