d135fba117a27e6d0de2f5518a274bba4c0a38efJames Phillpotts/*
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: SMSUtils.java,v 1.5 2008/07/11 01:46:21 arviranga Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
590e03a0114f53c994d970cfb356dadaaa57e39dJaco Jooste * Portions Copyrighted 2011-2016 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.sm;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport static org.forgerock.openam.ldap.LDAPUtils.addAttributeToMapAsString;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
2534c447c3c417420a435a2c0e9dc90db020979bJaco Joosteimport com.sun.identity.common.CaseInsensitiveHashMap;
2534c447c3c417420a435a2c0e9dc90db020979bJaco Joosteimport org.forgerock.opendj.ldap.Attribute;
2534c447c3c417420a435a2c0e9dc90db020979bJaco Joosteimport org.forgerock.opendj.ldap.Entry;
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Collections;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashMap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashSet;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Map;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Set;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class SMSUtils {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String SERVICE = "Service";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String NAME = "name";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String VERSION = "version";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String SCHEMA = "Schema";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String SUB_SCHEMA = "SubSchema";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String SUB_CONFIG = "SubConfiguration";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String GLOBAL_SCHEMA = "Global";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String GLOBAL_CONFIG = "GlobalConfiguration";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String ORG_SCHEMA = "Organization";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major public static final String ORG_ATTRIBUTE_SCHEMA =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "OrganizationAttributeSchema";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major public static final String ORG_ATTRIBUTE_VALUE_PAIR =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "OrganizationAttributeValuePair";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
28de0461d82a4e6471c71d793af7a9492ca98dd3Jaco Jooste public static final String I18N_KEY = "i18nKey";
28de0461d82a4e6471c71d793af7a9492ca98dd3Jaco Jooste
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String ORG_CONFIG = "OrganizationConfiguration";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String DYNAMIC_SCHEMA = "Dynamic";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String USER_SCHEMA = "User";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String POLICY_SCHEMA = "Policy";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String GROUP_SCHEMA = "Group";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String DOMAIN_SCHEMA = "Domain";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String GENERIC_SCHEMA = "Generic";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String CONFIGURATION = "Configuration";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String INSTANCE = "Instance";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String GROUP = "group";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String URI = "uri";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String SERVICE_ID = "id";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PRIORITY = "priority";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String COSPRIORITY = "cospriority";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String DEFAULT = "default";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String RESOURCE_BUNDLE_URL = "i18nJarURL";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PROPERTIES_FILENAME = "i18nFileName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String SERVICE_HIERARCHY = "serviceHierarchy";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String PROPERTIES_VIEW_BEAN_URL =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "propertiesViewBeanURL";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String REVISION_NUMBER = "revisionNumber";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String STATUS_ATTRIBUTE = "statusAttribute";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String VALIDATE = "validate";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String INHERITANCE = "inheritance";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ISSEARCHABLE = "isSearchable";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_INTERFACE = "PluginInterface";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_INTERFACE_CLASS = "interface";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_SCHEMA = "PluginSchema";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_SCHEMA_INT_NAME = "interfaceName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_SCHEMA_CLASS_NAME = "className";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_SCHEMA_JAR_URL = "jarURL";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_SCHEMA_ORG_NAME = "organizationName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_CONFIG = "PluginConfiguration";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String PLUGIN_CONFIG_SCHEMA_NAME =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "pluginSchemaName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_CONFIG_INT_NAME = "interfaceName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String PLUGIN_CONFIG_ORG_NAME = "organizationName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
f6d3e8d6653f14cfd38ebbbeac75a12a8536f0c7James Phillpotts public static final String SCHEMA_ATTRIBUTE = "AttributeSchema";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_VALUE_PAIR = "AttributeValuePair";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE = "Attribute";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_TYPE = "type";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_UITYPE = "uitype";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
3286da3756e1d2f07709aafdbc5419b26ff71dffPhill Cunnington protected static final String ATTRIBUTE_LIST_ORDER = "listOrder";
3286da3756e1d2f07709aafdbc5419b26ff71dffPhill Cunnington
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_SYNTAX = "syntax";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_DEFAULT = "default";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_RANGE_START = "rangeStart";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_RANGE_END = "rangeEnd";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_MIN_VALUE = "minValue";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_MAX_VALUE = "maxValue";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_VALIDATOR = "validator";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_OPTIONAL = "IsOptional";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_SERVICE_ID = "IsServiceIdentifier";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_RESOURCE_NAME =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "IsResourceNameAllowed";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_STATUS_ATTR = "IsStatusAttribute";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String HAS_SERVICE_URLS = "HasServiceURLs";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_ANY = "any";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_VIEW_BEAN_URL =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "propertiesViewBeanURL";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_VALUE = "Value";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_DEFAULT_ELEMENT = "DefaultValues";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_DEFAULT_CLASS =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "DefaultValuesClassName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String CLASS_NAME = "className";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_CHOICE_CLASS =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "ChoiceValuesClassName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_CHOICE_VALUES_ELEMENT =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "ChoiceValues";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_CHOICE_VALUE_ELEMENT =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "ChoiceValue";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ATTRIBUTE_COS_QUALIFIER = "cosQualifier";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_BOOLEAN_VALUES_ELEMENT =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "BooleanValues";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_TRUE_BOOLEAN_ELEMENT =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "BooleanTrueValue";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major protected static final String ATTRIBUTE_FALSE_BOOLEAN_ELEMENT =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "BooleanFalseValue";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d135fba117a27e6d0de2f5518a274bba4c0a38efJames Phillpotts public static final String RESOURCE_NAME = "resourceName";
ece5a262d20a50d0abf584d0f7ec73929ede9cfdJaco Jooste public static final String HIDE_CONFIG_UI = "hideConfigUI";
590e03a0114f53c994d970cfb356dadaaa57e39dJaco Jooste static final String REALM_CLONEABLE = "realmCloneable";
d135fba117a27e6d0de2f5518a274bba4c0a38efJames Phillpotts
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static int counter = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static int getInstanceID() {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major return counter++;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static String getUniqueID() {
6a490d4b01fde313651d02ca8d6ac8db32266d03Mark de Reeper return String.valueOf(getInstanceID());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Performs a deep copy of the Map
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major public static Map<String, Object> copyAttributes(Map<String, Object> attributes) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attributes == null) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major return new HashMap<String, Object>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Map<String, Object> answer = attributes instanceof CaseInsensitiveHashMap ?
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major new CaseInsensitiveHashMap(attributes.size()) : new HashMap<String, Object>(attributes.size());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attributes.isEmpty()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major return answer;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (Map.Entry<String, Object> entry : attributes.entrySet()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major String attrName = entry.getKey();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Object value = entry.getValue();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (value instanceof Set) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> set = (Set<String>) value;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (set.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (set == Collections.EMPTY_SET) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer.put(attrName, Collections.EMPTY_SET);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major answer.put(attrName, new HashSet<String>(0));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Copy the HashSet
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major answer.put(attrName, new HashSet(set));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major answer.put(attrName, value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major return answer;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static Map<String, Set<String>> getAttrsFromEntry(SMSEntry entry) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (SMSEntry.debug.messageEnabled()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major SMSEntry.debug.message("SMSUtils: obtains attrs from entry: " + entry.getDN());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Map<String, Set<String>> answer = new HashMap<String, Set<String>>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] attrValues = entry.getAttributeValues(SMSEntry.ATTR_KEYVAL);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major String[] searchableAttrValues = entry.getAttributeValues(SMSEntry.ATTR_XML_KEYVAL);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrValues == null && searchableAttrValues == null) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major return answer;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major addAttributesToMap(entry, attrValues, answer);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major addAttributesToMap(entry, searchableAttrValues, answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major return answer;
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major private static void addAttributesToMap(SMSEntry entry, String[] attrs, Map<String, Set<String>> attrMap) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrs != null) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String attribute : attrs) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major // Get attribute name and value
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major int idx = attribute.indexOf('=');
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (idx == -1) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major // Error in attribute values
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major SMSEntry.debug.error("SMSUtils: Invalid attribute entry: " + attribute
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major + "\nIn SMSEntry: " + entry);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major continue;
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major String attrName = attribute.substring(0, idx);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major String attrValue = null;
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attribute.length() > idx + 1) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major attrValue = attribute.substring(idx + 1);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> values = attrMap.get(attrName);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (values == null) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major values = new HashSet<String>();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major attrMap.put(attrName, values);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrValue != null && !attrValue.isEmpty()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major values.add(attrValue);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static void setAttributeValuePairs(SMSEntry e, Map<String, Object> attrs, Set<String> searchAttrNames)
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major throws SMSException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (SMSEntry.debug.messageEnabled()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major SMSEntry.debug.message("SMSUtils: setting attrs to entry: " + e.getDN());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attrs != null) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> values = new HashSet<String>();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> srchValues = new HashSet<String>();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (Map.Entry<String, Object> entry : attrs.entrySet()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major String attrName = entry.getKey();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Object attrValue = entry.getValue();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major boolean isSearchable = searchAttrNames.contains(attrName.toLowerCase());
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrValue == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // do nothing
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major } else if (attrValue instanceof String) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (isSearchable) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major srchValues.add(attrName + "=" + attrValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major values.add(attrName + "=" + attrValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major } else if (attrValue instanceof Set) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> set = (Set<String>) attrValue;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (set.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // an attribute with no values
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (isSearchable) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster srchValues.add(attrName + "=");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster values.add(attrName + "=");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String item : set) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (isSearchable) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster srchValues.add(attrName + "=" + item);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster values.add(attrName + "=" + item);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!values.isEmpty()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.setAttribute(SMSEntry.ATTR_KEYVAL, values.toArray(new String[values.size()]));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!srchValues.isEmpty()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.setAttribute(SMSEntry.ATTR_XML_KEYVAL, srchValues.toArray(new String[srchValues.size()]));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static void addAttribute(SMSEntry e, String attrName, Set<String> values, Set<String> searchableAttrNames)
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major throws SMSException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (SMSEntry.debug.messageEnabled()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major SMSEntry.debug.message("SMSUtils: adding attributes to entry: " + e.getDN());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrName == null || values == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (searchableAttrNames.contains(attrName.toLowerCase())) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : values) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : values) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static void removeAttribute(SMSEntry e, String attrName) throws SMSException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] attrValues = e.getAttributeValues(SMSEntry.ATTR_KEYVAL);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major String[] searchableAttrValues = e.getAttributeValues(SMSEntry.ATTR_XML_KEYVAL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrValues == null && searchableAttrValues == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attrValues != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String matchString = attrName + "=";
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String attrValue : attrValues) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrValue.startsWith(matchString)) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.removeAttribute(SMSEntry.ATTR_KEYVAL, attrValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (searchableAttrValues != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String matchStr = attrName + "=";
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String searchableAttrValue : searchableAttrValues) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (searchableAttrValue.startsWith(matchStr)) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, searchableAttrValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static void removeAttributeValues(SMSEntry e, String attrName, Set<String> values, Set searchableAttrNames)
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major throws SMSException {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (attrName == null || values == null || values.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (searchableAttrNames.contains(attrName.toLowerCase())) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : values) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major e.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : values) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster e.removeAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static void replaceAttributeValue(SMSEntry entry, String attrName, String oldValue, String newValue,
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> searchableAttrNames) throws SMSException {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (searchableAttrNames.contains(attrName.toLowerCase())) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major entry.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + oldValue);
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major entry.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + newValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major entry.removeAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + oldValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster entry.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + newValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static void replaceAttributeValues(SMSEntry entry, String attrName, Set<String> oldValues, Set<String> newValues,
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> searchableAttrNames) throws SMSException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster removeAttributeValues(entry, attrName, oldValues, searchableAttrNames);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Add other values
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (newValues == null || newValues.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (searchableAttrNames.contains(attrName.toLowerCase())) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : newValues) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major entry.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : newValues) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major entry.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major static String toAttributeValuePairXML(Map<String, Set<String>> map) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major if (map == null || map.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return "";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buff = new StringBuilder();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (Map.Entry<String, Set<String>> e : map.entrySet()) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major buff.append("<").append(SMSUtils.ATTRIBUTE_VALUE_PAIR).append(">\n");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(" <").append(SMSUtils.ATTRIBUTE)
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major .append(" ").append(SMSUtils.NAME).append("=\"").append(e.getKey()).append("\"/>\n");
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major Set<String> values = e.getValue();
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major for (String value : values) {
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major buff.append(" <").append(SMSUtils.ATTRIBUTE_VALUE).append(">")
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major .append(SMSSchema.escapeSpecialCharacters(value))
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major .append("</").append(SMSUtils.ATTRIBUTE_VALUE).append(">\n");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major buff.append("</").append(SMSUtils.ATTRIBUTE_VALUE_PAIR).append(">\n");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d4b8d8f560390b2e8014bf37500efb7446f81510Peter Major
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buff.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste /**
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste * Remove the validator attributes from the given attribute defaults map.
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste * @param attributeDefaults The attribute defaults.
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste * @param serviceSchema The service schema in which the attributes are specified.
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste * @return A copy of the attribute defaults with the validators removed.
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste */
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste public static Map<String, Set<String>> removeValidators(Map<String, Set<String>> attributeDefaults,
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste ServiceSchema serviceSchema) {
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste final Map<String, Set<String>> subset = new HashMap<String, Set<String>>();
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste for (Map.Entry<String, Set<String>> entry : attributeDefaults.entrySet()) {
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste final String name = entry.getKey();
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste if (!AttributeSchema.Type.VALIDATOR.equals(serviceSchema.getAttributeSchema(name).getType())) {
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste subset.put(name, new HashSet<String>(entry.getValue()));
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste }
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste }
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste return subset;
100d882219e8f87f6253fa08a4b7bde5a6e97f08Jaco Jooste }
44533057912ac5c4bca52935b8fbc8e6d59d0671Jaco Jooste
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public static Map<String, Set<String>> convertEntryToAttributesMap(Entry entry) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington Map<String, Set<String>> answer = null;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (entry != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington for (Attribute attribute : entry.getAllAttributes()) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (answer == null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington answer = new CaseInsensitiveHashMap<>(10);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington addAttributeToMapAsString(attribute, answer);
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington return answer;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington }
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste /**
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste * Check if the Service Config is not null and exists in SMS.
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste *
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste * @param serviceConfig The service config to check.
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste * @return {@code true} if the Service Config is not null and exist.
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste */
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste public static boolean serviceExists(ServiceConfig serviceConfig) {
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste return serviceConfig != null && serviceConfig.exists();
2534c447c3c417420a435a2c0e9dc90db020979bJaco Jooste }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}