SMSUtils.java revision 48a3f9d4300dcee393075c632655deb42f43bce6
9bee881471745317e907eefbacf9ef344c74c899vboxsync/*
9bee881471745317e907eefbacf9ef344c74c899vboxsync * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
9bee881471745317e907eefbacf9ef344c74c899vboxsync *
9bee881471745317e907eefbacf9ef344c74c899vboxsync * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
9bee881471745317e907eefbacf9ef344c74c899vboxsync *
9bee881471745317e907eefbacf9ef344c74c899vboxsync * The contents of this file are subject to the terms
9bee881471745317e907eefbacf9ef344c74c899vboxsync * of the Common Development and Distribution License
9bee881471745317e907eefbacf9ef344c74c899vboxsync * (the License). You may not use this file except in
9bee881471745317e907eefbacf9ef344c74c899vboxsync * compliance with the License.
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync *
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * You can obtain a copy of the License at
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * https://opensso.dev.java.net/public/CDDLv1.0.html or
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * opensso/legal/CDDLv1.0.txt
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * See the License for the specific language governing
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * permission and limitations under the License.
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync *
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * When distributing Covered Code, include this CDDL
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * Header Notice in each file and include the License file
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * at opensso/legal/CDDLv1.0.txt.
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * If applicable, add the following below the CDDL Header,
9bee881471745317e907eefbacf9ef344c74c899vboxsync * with the fields enclosed by brackets [] replaced by
9bee881471745317e907eefbacf9ef344c74c899vboxsync * your own identifying information:
9bee881471745317e907eefbacf9ef344c74c899vboxsync * "Portions Copyrighted [year] [name of copyright owner]"
9bee881471745317e907eefbacf9ef344c74c899vboxsync *
9bee881471745317e907eefbacf9ef344c74c899vboxsync * $Id: SMSUtils.java,v 1.5 2008/07/11 01:46:21 arviranga Exp $
9bee881471745317e907eefbacf9ef344c74c899vboxsync *
9bee881471745317e907eefbacf9ef344c74c899vboxsync * Portions Copyrighted 2011-2015 ForgeRock AS.
9bee881471745317e907eefbacf9ef344c74c899vboxsync */
9bee881471745317e907eefbacf9ef344c74c899vboxsyncpackage com.sun.identity.sm;
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport static org.forgerock.openam.ldap.LDAPUtils.addAttributeToMapAsString;
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.security.AccessController;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.ArrayList;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.Collections;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.HashMap;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.HashSet;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.List;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.Map;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport java.util.Set;
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport com.iplanet.sso.SSOException;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport com.sun.identity.common.CaseInsensitiveHashMap;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport com.sun.identity.security.AdminTokenAction;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport org.forgerock.openam.utils.StringUtils;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport org.forgerock.opendj.ldap.Attribute;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport org.forgerock.opendj.ldap.ByteString;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport org.forgerock.opendj.ldap.Entry;
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsyncpublic class SMSUtils {
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SERVICE = "Service";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String NAME = "name";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String VERSION = "version";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SCHEMA = "Schema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SUB_SCHEMA = "SubSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SUB_CONFIG = "SubConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GLOBAL_SCHEMA = "Global";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GLOBAL_CONFIG = "GlobalConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_SCHEMA = "Organization";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_ATTRIBUTE_SCHEMA =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "OrganizationAttributeSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_ATTRIBUTE_VALUE_PAIR =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "OrganizationAttributeValuePair";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String I18N_KEY = "i18nKey";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_CONFIG = "OrganizationConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String DYNAMIC_SCHEMA = "Dynamic";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String USER_SCHEMA = "User";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String POLICY_SCHEMA = "Policy";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GROUP_SCHEMA = "Group";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String DOMAIN_SCHEMA = "Domain";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GENERIC_SCHEMA = "Generic";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String CONFIGURATION = "Configuration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String INSTANCE = "Instance";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GROUP = "group";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String URI = "uri";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String SERVICE_ID = "id";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PRIORITY = "priority";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String COSPRIORITY = "cospriority";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String DEFAULT = "default";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String RESOURCE_BUNDLE_URL = "i18nJarURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PROPERTIES_FILENAME = "i18nFileName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String SERVICE_HIERARCHY = "serviceHierarchy";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PROPERTIES_VIEW_BEAN_URL =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "propertiesViewBeanURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String REVISION_NUMBER = "revisionNumber";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String STATUS_ATTRIBUTE = "statusAttribute";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String VALIDATE = "validate";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String INHERITANCE = "inheritance";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ISSEARCHABLE = "isSearchable";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_INTERFACE = "PluginInterface";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_INTERFACE_CLASS = "interface";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA = "PluginSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_INT_NAME = "interfaceName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_CLASS_NAME = "className";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_JAR_URL = "jarURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_ORG_NAME = "organizationName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG = "PluginConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG_SCHEMA_NAME =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "pluginSchemaName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG_INT_NAME = "interfaceName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG_ORG_NAME = "organizationName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SCHEMA_ATTRIBUTE = "AttributeSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VALUE_PAIR = "AttributeValuePair";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE = "Attribute";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_TYPE = "type";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_UITYPE = "uitype";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_LIST_ORDER = "listOrder";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_SYNTAX = "syntax";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_DEFAULT = "default";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_RANGE_START = "rangeStart";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_RANGE_END = "rangeEnd";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_MIN_VALUE = "minValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_MAX_VALUE = "maxValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VALIDATOR = "validator";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_OPTIONAL = "IsOptional";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_SERVICE_ID = "IsServiceIdentifier";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_RESOURCE_NAME =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "IsResourceNameAllowed";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_STATUS_ATTR = "IsStatusAttribute";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String HAS_SERVICE_URLS = "HasServiceURLs";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_ANY = "any";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VIEW_BEAN_URL =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "propertiesViewBeanURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VALUE = "Value";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_DEFAULT_ELEMENT = "DefaultValues";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_DEFAULT_CLASS =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "DefaultValuesClassName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String CLASS_NAME = "className";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_CHOICE_CLASS =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "ChoiceValuesClassName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_CHOICE_VALUES_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "ChoiceValues";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_CHOICE_VALUE_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "ChoiceValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_COS_QUALIFIER = "cosQualifier";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_BOOLEAN_VALUES_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "BooleanValues";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_TRUE_BOOLEAN_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "BooleanTrueValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_FALSE_BOOLEAN_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "BooleanFalseValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String RESOURCE_NAME = "resourceName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String HIDE_CONFIG_UI = "hideConfigUI";
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static int counter = 0;
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static int getInstanceID() {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return counter++;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static String getUniqueID() {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return String.valueOf(getInstanceID());
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Performs a deep copy of the Map
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static Map<String, Object> copyAttributes(Map<String, Object> attributes) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attributes == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return new HashMap<String, Object>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync Map<String, Object> answer = attributes instanceof CaseInsensitiveHashMap ?
9bee881471745317e907eefbacf9ef344c74c899vboxsync new CaseInsensitiveHashMap(attributes.size()) : new HashMap<String, Object>(attributes.size());
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attributes.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return answer;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Object> entry : attributes.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync String attrName = entry.getKey();
9bee881471745317e907eefbacf9ef344c74c899vboxsync Object value = entry.getValue();
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (value instanceof Set) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> set = (Set<String>) value;
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (set.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (set == Collections.EMPTY_SET) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync answer.put(attrName, Collections.EMPTY_SET);
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync answer.put(attrName, new HashSet<String>(0));
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Copy the HashSet
9bee881471745317e907eefbacf9ef344c74c899vboxsync answer.put(attrName, new HashSet(set));
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync answer.put(attrName, value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync return answer;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static Map<String, Set<String>> getAttrsFromEntry(SMSEntry entry) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (SMSEntry.debug.messageEnabled()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.message("SMSUtils: obtains attrs from entry: " + entry.getDN());
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync Map<String, Set<String>> answer = new HashMap<String, Set<String>>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync String[] attrValues = entry.getAttributeValues(SMSEntry.ATTR_KEYVAL);
9bee881471745317e907eefbacf9ef344c74c899vboxsync String[] searchableAttrValues = entry.getAttributeValues(SMSEntry.ATTR_XML_KEYVAL);
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrValues == null && searchableAttrValues == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return answer;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync addAttributesToMap(entry, attrValues, answer);
9bee881471745317e907eefbacf9ef344c74c899vboxsync addAttributesToMap(entry, searchableAttrValues, answer);
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync return answer;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync private static void addAttributesToMap(SMSEntry entry, String[] attrs, Map<String, Set<String>> attrMap) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrs != null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String attribute : attrs) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Get attribute name and value
9bee881471745317e907eefbacf9ef344c74c899vboxsync int idx = attribute.indexOf('=');
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (idx == -1) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Error in attribute values
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.error("SMSUtils: Invalid attribute entry: " + attribute
9bee881471745317e907eefbacf9ef344c74c899vboxsync + "\nIn SMSEntry: " + entry);
9bee881471745317e907eefbacf9ef344c74c899vboxsync continue;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync String attrName = attribute.substring(0, idx);
9bee881471745317e907eefbacf9ef344c74c899vboxsync String attrValue = null;
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attribute.length() > idx + 1) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync attrValue = attribute.substring(idx + 1);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> values = attrMap.get(attrName);
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (values == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync values = new HashSet<String>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync attrMap.put(attrName, values);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrValue != null && !attrValue.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync values.add(attrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void setAttributeValuePairs(SMSEntry e, Map<String, Object> attrs, Set<String> searchAttrNames)
9bee881471745317e907eefbacf9ef344c74c899vboxsync throws SMSException {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (SMSEntry.debug.messageEnabled()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.message("SMSUtils: setting attrs to entry: " + e.getDN());
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrs != null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> values = new HashSet<String>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> srchValues = new HashSet<String>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Object> entry : attrs.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync String attrName = entry.getKey();
9bee881471745317e907eefbacf9ef344c74c899vboxsync Object attrValue = entry.getValue();
9bee881471745317e907eefbacf9ef344c74c899vboxsync boolean isSearchable = searchAttrNames.contains(attrName.toLowerCase());
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrValue == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // do nothing
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else if (attrValue instanceof String) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (isSearchable) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync srchValues.add(attrName + "=" + attrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync values.add(attrName + "=" + attrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else if (attrValue instanceof Set) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> set = (Set<String>) attrValue;
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (set.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // an attribute with no values
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (isSearchable) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync srchValues.add(attrName + "=");
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync values.add(attrName + "=");
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String item : set) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (isSearchable) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync srchValues.add(attrName + "=" + item);
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync values.add(attrName + "=" + item);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (!values.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.setAttribute(SMSEntry.ATTR_KEYVAL, values.toArray(new String[values.size()]));
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (!srchValues.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.setAttribute(SMSEntry.ATTR_XML_KEYVAL, srchValues.toArray(new String[srchValues.size()]));
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void addAttribute(SMSEntry e, String attrName, Set<String> values, Set<String> searchableAttrNames)
9bee881471745317e907eefbacf9ef344c74c899vboxsync throws SMSException {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (SMSEntry.debug.messageEnabled()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.message("SMSUtils: adding attributes to entry: " + e.getDN());
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrName == null || values == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : values) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : values) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void removeAttribute(SMSEntry e, String attrName) throws SMSException {
9bee881471745317e907eefbacf9ef344c74c899vboxsync String[] attrValues = e.getAttributeValues(SMSEntry.ATTR_KEYVAL);
9bee881471745317e907eefbacf9ef344c74c899vboxsync String[] searchableAttrValues = e.getAttributeValues(SMSEntry.ATTR_XML_KEYVAL);
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrValues == null && searchableAttrValues == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrValues != null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync String matchString = attrName + "=";
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String attrValue : attrValues) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrValue.startsWith(matchString)) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_KEYVAL, attrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrValues != null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync String matchStr = attrName + "=";
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String searchableAttrValue : searchableAttrValues) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrValue.startsWith(matchStr)) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, searchableAttrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void removeAttributeValues(SMSEntry e, String attrName, Set<String> values, Set searchableAttrNames)
9bee881471745317e907eefbacf9ef344c74c899vboxsync throws SMSException {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrName == null || values == null || values.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : values) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : values) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void replaceAttributeValue(SMSEntry entry, String attrName, String oldValue, String newValue,
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> searchableAttrNames) throws SMSException {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + oldValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + newValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.removeAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + oldValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + newValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void replaceAttributeValues(SMSEntry entry, String attrName, Set<String> oldValues, Set<String> newValues,
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> searchableAttrNames) throws SMSException {
9bee881471745317e907eefbacf9ef344c74c899vboxsync removeAttributeValues(entry, attrName, oldValues, searchableAttrNames);
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Add other values
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (newValues == null || newValues.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : newValues) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync } else {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : newValues) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync static String toAttributeValuePairXML(Map<String, Set<String>> map) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (map == null || map.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync return "";
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync StringBuilder buff = new StringBuilder();
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Set<String>> e : map.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append("<").append(SMSUtils.ATTRIBUTE_VALUE_PAIR).append(">\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append(" <").append(SMSUtils.ATTRIBUTE)
9bee881471745317e907eefbacf9ef344c74c899vboxsync .append(" ").append(SMSUtils.NAME).append("=\"").append(e.getKey()).append("\"/>\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync Set<String> values = e.getValue();
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String value : values) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append(" <").append(SMSUtils.ATTRIBUTE_VALUE).append(">")
9bee881471745317e907eefbacf9ef344c74c899vboxsync .append(SMSSchema.escapeSpecialCharacters(value))
9bee881471745317e907eefbacf9ef344c74c899vboxsync .append("</").append(SMSUtils.ATTRIBUTE_VALUE).append(">\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append("</").append(SMSUtils.ATTRIBUTE_VALUE_PAIR).append(">\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync return buff.toString();
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync /**
9bee881471745317e907eefbacf9ef344c74c899vboxsync * Remove the validator attributes from the given attribute defaults map.
9bee881471745317e907eefbacf9ef344c74c899vboxsync * @param attributeDefaults The attribute defaults.
9bee881471745317e907eefbacf9ef344c74c899vboxsync * @param serviceSchema The service schema in which the attributes are specified.
9bee881471745317e907eefbacf9ef344c74c899vboxsync * @return A copy of the attribute defaults with the validators removed.
9bee881471745317e907eefbacf9ef344c74c899vboxsync */
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static Map<String, Set<String>> removeValidators(Map<String, Set<String>> attributeDefaults,
9bee881471745317e907eefbacf9ef344c74c899vboxsync ServiceSchema serviceSchema) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync final Map<String, Set<String>> subset = new HashMap<String, Set<String>>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Set<String>> entry : attributeDefaults.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync final String name = entry.getKey();
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (!AttributeSchema.Type.VALIDATOR.equals(serviceSchema.getAttributeSchema(name).getType())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync subset.put(name, new HashSet<String>(entry.getValue()));
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync return subset;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static Map<String, Set<String>> convertEntryToAttributesMap(Entry entry) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync Map<String, Set<String>> answer = null;
9bee881471745317e907eefbacf9ef344c74c899vboxsync
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (entry != null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Attribute attribute : entry.getAllAttributes()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (answer == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync answer = new CaseInsensitiveHashMap<>(10);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync addAttributeToMapAsString(attribute, answer);
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync return answer;
9bee881471745317e907eefbacf9ef344c74c899vboxsync }
9bee881471745317e907eefbacf9ef344c74c899vboxsync}
9bee881471745317e907eefbacf9ef344c74c899vboxsync