/* * IronJacamar, a Java EE Connector Architecture implementation * Copyright 2014, Red Hat Inc, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the Eclipse Public License 1.0 as * published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse * Public License for more details. * * You should have received a copy of the Eclipse Public License * along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.ironjacamar.common.metadata.resourceadapter; import org.ironjacamar.common.api.metadata.resourceadapter.WorkManagerSecurity; import org.ironjacamar.common.metadata.common.AbstractMetadata; import java.util.Collections; import java.util.List; import java.util.Map; /** * WorkManager security configuration * * @author <a href="jesper.pedersen@ironjacamar.org">Jesper Pedersen</a> */ public class WorkManagerSecurityImpl extends AbstractMetadata implements WorkManagerSecurity { /** The serialVersionUID */ private static final long serialVersionUID = 1L; /** Mapping required */ private boolean mappingRequired; /** Domain */ private String domain; /** Default principal */ private String defaultPrincipal; /** Default groups */ private List<String> defaultGroups; /** User mappings */ private Map<String, String> userMappings; /** Group mappings */ private Map<String, String> groupMappings; /** * Constructor * @param mappingRequired Is a mapping required * @param domain The security domain * @param defaultPrincipal A default principal * @param defaultGroups Default groups * @param userMappings User mappings * @param groupMappings Group mappings * @param expressions expressions */ public WorkManagerSecurityImpl(boolean mappingRequired, String domain, String defaultPrincipal, List<String> defaultGroups, Map<String, String> userMappings, Map<String, String> groupMappings, Map<String, String> expressions) { super(expressions); this.mappingRequired = mappingRequired; this.domain = domain; this.defaultPrincipal = defaultPrincipal; this.defaultGroups = defaultGroups; this.userMappings = userMappings; this.groupMappings = groupMappings; } /** * {@inheritDoc} */ public boolean isMappingRequired() { return mappingRequired; } /** * {@inheritDoc} */ public String getDomain() { return domain; } /** * {@inheritDoc} */ public String getDefaultPrincipal() { return defaultPrincipal; } /** * {@inheritDoc} */ public List<String> getDefaultGroups() { return defaultGroups != null ? Collections.unmodifiableList(defaultGroups) : null; } /** * {@inheritDoc} */ public Map<String, String> getUserMappings() { return userMappings != null ? Collections.unmodifiableMap(userMappings) : null; } /** * {@inheritDoc} */ public Map<String, String> getGroupMappings() { return groupMappings != null ? Collections.unmodifiableMap(groupMappings) : null; } /** * {@inheritDoc} */ public int hashCode() { int result = 31; result += mappingRequired ? 7 : 0; result += domain != null ? 7 * domain.hashCode() : 7; result += defaultPrincipal != null ? 7 * defaultPrincipal.hashCode() : 7; result += defaultGroups != null ? 7 * defaultGroups.hashCode() : 7; result += userMappings != null ? 7 * userMappings.hashCode() : 7; result += groupMappings != null ? 7 * groupMappings.hashCode() : 7; return result; } /** * {@inheritDoc} */ public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof WorkManagerSecurityImpl)) return false; WorkManagerSecurityImpl other = (WorkManagerSecurityImpl)o; if (mappingRequired != other.mappingRequired) return false; if (domain != null) { if (!domain.equals(other.domain)) return false; } else { if (other.domain != null) return false; } if (defaultPrincipal != null) { if (!defaultPrincipal.equals(other.defaultPrincipal)) return false; } else { if (other.defaultPrincipal != null) return false; } if (defaultGroups != null) { if (!defaultGroups.equals(other.defaultGroups)) return false; } else { if (other.defaultGroups != null) return false; } if (userMappings != null) { if (!userMappings.equals(other.userMappings)) return false; } else { if (other.userMappings != null) return false; } if (groupMappings != null) { if (!groupMappings.equals(other.groupMappings)) return false; } else { if (other.groupMappings != null) return false; } return true; } /** * {@inheritDoc} */ public String toString() { StringBuilder sb = new StringBuilder(1024); sb.append("<security>"); sb.append("<").append(XML.ELEMENT_MAPPING_REQUIRED).append(">"); sb.append(mappingRequired); sb.append("</").append(XML.ELEMENT_MAPPING_REQUIRED).append(">"); sb.append("<").append(XML.ELEMENT_DOMAIN).append(">"); sb.append(domain); sb.append("</").append(XML.ELEMENT_DOMAIN).append(">"); if (defaultPrincipal != null) { sb.append("<").append(XML.ELEMENT_DEFAULT_PRINCIPAL).append(">"); sb.append(defaultPrincipal); sb.append("</").append(XML.ELEMENT_DEFAULT_PRINCIPAL).append(">"); } if (defaultGroups != null && !defaultGroups.isEmpty()) { sb.append("<").append(XML.ELEMENT_DEFAULT_GROUPS).append(">"); for (String group : defaultGroups) { sb.append("<").append(XML.ELEMENT_GROUP).append(">"); sb.append(group); sb.append("</").append(XML.ELEMENT_GROUP).append(">"); } sb.append("</").append(XML.ELEMENT_DEFAULT_GROUPS).append(">"); } if ((userMappings != null && !userMappings.isEmpty()) || (groupMappings != null && !groupMappings.isEmpty())) { sb.append("<").append(XML.ELEMENT_MAPPINGS).append(">"); if (userMappings != null && !userMappings.isEmpty()) { sb.append("<").append(XML.ELEMENT_USERS).append(">"); for (Map.Entry<String, String> entry : userMappings.entrySet()) { sb.append("<").append(XML.ELEMENT_MAP); sb.append(" ").append(XML.ATTRIBUTE_FROM).append("=\""); sb.append(entry.getKey()).append("\""); sb.append(" ").append(XML.ATTRIBUTE_TO).append("=\""); sb.append(entry.getValue()).append("\""); sb.append("/>"); } sb.append("</").append(XML.ELEMENT_USERS).append(">"); } if (groupMappings != null && !groupMappings.isEmpty()) { sb.append("<").append(XML.ELEMENT_GROUPS).append(">"); for (Map.Entry<String, String> entry : groupMappings.entrySet()) { sb.append("<").append(XML.ELEMENT_MAP); sb.append(" ").append(XML.ATTRIBUTE_FROM).append("=\""); sb.append(entry.getKey()).append("\""); sb.append(" ").append(XML.ATTRIBUTE_TO).append("=\""); sb.append(entry.getValue()).append("\""); sb.append("/>"); } sb.append("</").append(XML.ELEMENT_GROUPS).append(">"); } sb.append("</").append(XML.ELEMENT_MAPPINGS).append(">"); } sb.append("</security>"); return sb.toString(); } }