SMSUtils.java revision 48a3f9d4300dcee393075c632655deb42f43bce6
9bee881471745317e907eefbacf9ef344c74c899vboxsync * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
9bee881471745317e907eefbacf9ef344c74c899vboxsync * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
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 * You can obtain a copy of the License at
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * https://opensso.dev.java.net/public/CDDLv1.0.html or
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * See the License for the specific language governing
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * permission and limitations under the License.
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * When distributing Covered Code, include this CDDL
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * Header Notice in each file and include the License file
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 * $Id: SMSUtils.java,v 1.5 2008/07/11 01:46:21 arviranga Exp $
9bee881471745317e907eefbacf9ef344c74c899vboxsync * Portions Copyrighted 2011-2015 ForgeRock AS.
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport static org.forgerock.openam.ldap.LDAPUtils.addAttributeToMapAsString;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncimport com.sun.identity.common.CaseInsensitiveHashMap;
9bee881471745317e907eefbacf9ef344c74c899vboxsyncpublic class SMSUtils {
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SUB_SCHEMA = "SubSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SUB_CONFIG = "SubConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GLOBAL_SCHEMA = "Global";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GLOBAL_CONFIG = "GlobalConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_SCHEMA = "Organization";
9bee881471745317e907eefbacf9ef344c74c899vboxsync "OrganizationAttributeSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_ATTRIBUTE_VALUE_PAIR =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "OrganizationAttributeValuePair";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String ORG_CONFIG = "OrganizationConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String DYNAMIC_SCHEMA = "Dynamic";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String POLICY_SCHEMA = "Policy";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String DOMAIN_SCHEMA = "Domain";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String GENERIC_SCHEMA = "Generic";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String CONFIGURATION = "Configuration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PRIORITY = "priority";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String COSPRIORITY = "cospriority";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String RESOURCE_BUNDLE_URL = "i18nJarURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PROPERTIES_FILENAME = "i18nFileName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String SERVICE_HIERARCHY = "serviceHierarchy";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PROPERTIES_VIEW_BEAN_URL =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "propertiesViewBeanURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String REVISION_NUMBER = "revisionNumber";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String STATUS_ATTRIBUTE = "statusAttribute";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String VALIDATE = "validate";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String INHERITANCE = "inheritance";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ISSEARCHABLE = "isSearchable";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_INTERFACE = "PluginInterface";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_INTERFACE_CLASS = "interface";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA = "PluginSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_INT_NAME = "interfaceName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_CLASS_NAME = "className";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_JAR_URL = "jarURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_SCHEMA_ORG_NAME = "organizationName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG = "PluginConfiguration";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG_SCHEMA_NAME =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "pluginSchemaName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG_INT_NAME = "interfaceName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String PLUGIN_CONFIG_ORG_NAME = "organizationName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String SCHEMA_ATTRIBUTE = "AttributeSchema";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VALUE_PAIR = "AttributeValuePair";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE = "Attribute";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_TYPE = "type";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_UITYPE = "uitype";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_LIST_ORDER = "listOrder";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_SYNTAX = "syntax";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_DEFAULT = "default";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_RANGE_START = "rangeStart";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_RANGE_END = "rangeEnd";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_MIN_VALUE = "minValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_MAX_VALUE = "maxValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VALIDATOR = "validator";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_OPTIONAL = "IsOptional";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_SERVICE_ID = "IsServiceIdentifier";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_RESOURCE_NAME =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "IsResourceNameAllowed";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_STATUS_ATTR = "IsStatusAttribute";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String HAS_SERVICE_URLS = "HasServiceURLs";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_ANY = "any";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VIEW_BEAN_URL =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "propertiesViewBeanURL";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_VALUE = "Value";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_DEFAULT_ELEMENT = "DefaultValues";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_DEFAULT_CLASS =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "DefaultValuesClassName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String CLASS_NAME = "className";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_CHOICE_CLASS =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "ChoiceValuesClassName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_CHOICE_VALUES_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "ChoiceValues";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_CHOICE_VALUE_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "ChoiceValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_COS_QUALIFIER = "cosQualifier";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_BOOLEAN_VALUES_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "BooleanValues";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_TRUE_BOOLEAN_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "BooleanTrueValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync protected static final String ATTRIBUTE_FALSE_BOOLEAN_ELEMENT =
9bee881471745317e907eefbacf9ef344c74c899vboxsync "BooleanFalseValue";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String RESOURCE_NAME = "resourceName";
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static final String HIDE_CONFIG_UI = "hideConfigUI";
9bee881471745317e907eefbacf9ef344c74c899vboxsync static int getInstanceID() {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Performs a deep copy of the Map
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static Map<String, Object> copyAttributes(Map<String, Object> attributes) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync Map<String, Object> answer = attributes instanceof CaseInsensitiveHashMap ?
9bee881471745317e907eefbacf9ef344c74c899vboxsync new CaseInsensitiveHashMap(attributes.size()) : new HashMap<String, Object>(attributes.size());
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Object> entry : attributes.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Copy the HashSet
9bee881471745317e907eefbacf9ef344c74c899vboxsync static Map<String, Set<String>> getAttrsFromEntry(SMSEntry entry) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.message("SMSUtils: obtains attrs from entry: " + entry.getDN());
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 addAttributesToMap(entry, searchableAttrValues, answer);
9bee881471745317e907eefbacf9ef344c74c899vboxsync private static void addAttributesToMap(SMSEntry entry, String[] attrs, Map<String, Set<String>> attrMap) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Get attribute name and value
9bee881471745317e907eefbacf9ef344c74c899vboxsync // Error in attribute values
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.error("SMSUtils: Invalid attribute entry: " + attribute
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void setAttributeValuePairs(SMSEntry e, Map<String, Object> attrs, Set<String> searchAttrNames)
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.message("SMSUtils: setting attrs to entry: " + e.getDN());
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Object> entry : attrs.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync boolean isSearchable = searchAttrNames.contains(attrName.toLowerCase());
9bee881471745317e907eefbacf9ef344c74c899vboxsync // do nothing
9bee881471745317e907eefbacf9ef344c74c899vboxsync // an attribute with no values
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.setAttribute(SMSEntry.ATTR_KEYVAL, values.toArray(new String[values.size()]));
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.setAttribute(SMSEntry.ATTR_XML_KEYVAL, srchValues.toArray(new String[srchValues.size()]));
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void addAttribute(SMSEntry e, String attrName, Set<String> values, Set<String> searchableAttrNames)
9bee881471745317e907eefbacf9ef344c74c899vboxsync SMSEntry.debug.message("SMSUtils: adding attributes to entry: " + e.getDN());
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
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 if (attrValues == null && searchableAttrValues == null) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_KEYVAL, attrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (String searchableAttrValue : searchableAttrValues) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, searchableAttrValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync static void removeAttributeValues(SMSEntry e, String attrName, Set<String> values, Set searchableAttrNames)
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (attrName == null || values == null || values.isEmpty()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync e.removeAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
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 entry.removeAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + oldValue);
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + newValue);
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 // Add other values
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (searchableAttrNames.contains(attrName.toLowerCase())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_XML_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync entry.addAttribute(SMSEntry.ATTR_KEYVAL, attrName + "=" + value);
9bee881471745317e907eefbacf9ef344c74c899vboxsync static String toAttributeValuePairXML(Map<String, Set<String>> map) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Set<String>> e : map.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append("<").append(SMSUtils.ATTRIBUTE_VALUE_PAIR).append(">\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync .append(" ").append(SMSUtils.NAME).append("=\"").append(e.getKey()).append("\"/>\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append(" <").append(SMSUtils.ATTRIBUTE_VALUE).append(">")
9bee881471745317e907eefbacf9ef344c74c899vboxsync .append("</").append(SMSUtils.ATTRIBUTE_VALUE).append(">\n");
9bee881471745317e907eefbacf9ef344c74c899vboxsync buff.append("</").append(SMSUtils.ATTRIBUTE_VALUE_PAIR).append(">\n");
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 public static Map<String, Set<String>> removeValidators(Map<String, Set<String>> attributeDefaults,
9bee881471745317e907eefbacf9ef344c74c899vboxsync final Map<String, Set<String>> subset = new HashMap<String, Set<String>>();
9bee881471745317e907eefbacf9ef344c74c899vboxsync for (Map.Entry<String, Set<String>> entry : attributeDefaults.entrySet()) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync if (!AttributeSchema.Type.VALIDATOR.equals(serviceSchema.getAttributeSchema(name).getType())) {
9bee881471745317e907eefbacf9ef344c74c899vboxsync subset.put(name, new HashSet<String>(entry.getValue()));
9bee881471745317e907eefbacf9ef344c74c899vboxsync public static Map<String, Set<String>> convertEntryToAttributesMap(Entry entry) {