/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: IDPPCommonName.java,v 1.2 2008/06/25 05:47:15 qcheng Exp $ * */ package com.sun.identity.liberty.ws.idpp.container; import com.sun.identity.shared.datastruct.CollectionHelper; import javax.xml.bind.JAXBException; import java.util.Set; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.HashMap; import java.util.List; import org.w3c.dom.Document; import com.sun.identity.liberty.ws.idpp.common.*; import com.sun.identity.liberty.ws.idpp.jaxb.*; import com.sun.identity.liberty.ws.idpp.plugin.*; import com.sun.identity.liberty.ws.idpp.IDPPServiceManager; /** * This class IDPPCommonName is an implementation of * IDPPContainer. */ public class IDPPCommonName extends IDPPBaseContainer { /** * Constructor */ public IDPPCommonName() { IDPPUtils.debug.message("IDPPCommonName:constructor:init."); } /** * Gets the common name jaxb element * @param userMap user map * @return CommonNameElement JAXB Object. * @exception IDPPException. */ public Object getContainerObject(Map userMap) throws IDPPException { IDPPUtils.debug.message("IDPPContainers:getContainerObject:Init"); try { PPType ppType = IDPPUtils.getIDPPFactory().createPPElement(); CommonNameElement ce = IDPPUtils.getIDPPFactory().createCommonNameElement(); String cn = CollectionHelper.getMapAttr( userMap, getAttributeMapper().getDSAttribute( IDPPConstants.CN_ELEMENT).toLowerCase()); if(cn != null) { DSTString dstString = getDSTString(cn); ce.setCN(dstString); } Set altCNs = (Set)userMap.get(getAttributeMapper().getDSAttribute( IDPPConstants.ALT_CN_ELEMENT).toLowerCase()); if ((altCNs != null) && (altCNs.size() > 0)) { Iterator iter = altCNs.iterator(); while(iter.hasNext()) { DSTString dstString = getDSTString((String)iter.next()); ce.getAltCN().add(dstString); } } AnalyzedNameType analyzedName = getAnalyzedName(userMap); ce.setAnalyzedName(analyzedName); ppType.setCommonName(ce); return ppType; } catch (JAXBException je) { IDPPUtils.debug.error( "IDPPContainers:getContainerObject: JAXB failure", je); throw new IDPPException( IDPPUtils.bundle.getString("jaxbFailure")); } catch (IDPPException ie) { IDPPUtils.debug.error("IDPPContainers:getContainerObject:" + "Error while creating common name.", ie); throw new IDPPException(ie); } } /** * Gets required common name container attributes. * @return Set set of required container attributes */ public Set getContainerAttributes() { IDPPUtils.debug.message("IDPPCommonName:getContainerAttributes:Init"); Set set = new HashSet(); set.add(IDPPConstants.FN_ELEMENT); set.add(IDPPConstants.SN_ELEMENT); set.add(IDPPConstants.PT_ELEMENT); String nameScheme = IDPPServiceManager.getInstance().getNameScheme(); if(nameScheme != null && nameScheme.equals(IDPPConstants.NAME_SCHEME_MIDDLE)) { set.add(IDPPConstants.MN_ELEMENT); } set.add(IDPPConstants.CN_ELEMENT); set.add(IDPPConstants.ALT_CN_ELEMENT); return getMapperAttributeSet(set); } /** * Gets the container attributes for a given select expression. * @param select Select expression. * @return Set set of required user attributes. */ public Set getContainerAttributesForSelect(String select) { IDPPUtils.debug.message("IDPPCommonName:getContainerAttribSelect:Init"); String expContext = IDPPUtils.getExpressionContext(select); if(IDPPUtils.debug.messageEnabled()) { IDPPUtils.debug.message("IDPPCommonName:getContainerAttribSelect:" + "exp context = " + expContext); } int attrType = IDPPUtils.getIDPPElementType(expContext); Set set = new HashSet(); switch(attrType) { case IDPPConstants.SN_ELEMENT_INT: case IDPPConstants.FN_ELEMENT_INT: case IDPPConstants.MN_ELEMENT_INT: case IDPPConstants.PT_ELEMENT_INT: case IDPPConstants.CN_ELEMENT_INT: case IDPPConstants.ALT_CN_ELEMENT_INT: set.add(expContext); break; case IDPPConstants.ANALYZED_NAME_ELEMENT_INT: return getAnalyzedNameAttributes(); case IDPPConstants.COMMON_NAME_ELEMENT_INT: return getContainerAttributes(); default: IDPPUtils.debug.error("IDPPCommonName:getContainer"+ "AttributesForSelect. Invalid select."); } return getMapperAttributeSet(set); } /** * Processes modify container values and returns key value/pair to be * modified. * @param select Select expression. * @param data list of new data objects. * @return Attribute key value pair for the given select. * @throws IDPPException. */ public Map getDataMapForSelect(String select, List data) throws IDPPException { IDPPUtils.debug.message("IDPPCommonName:getDataMapForSelect:Init"); Map map = new HashMap(); String expContext = IDPPUtils.getExpressionContext(select); if(IDPPUtils.debug.messageEnabled()) { IDPPUtils.debug.message("IDPPCommonName:getDataMapForSelect:" + "exp context = " + expContext); } int attrType = IDPPUtils.getIDPPElementType(expContext); Object dataElement = null; if(data != null && !data.isEmpty()) { dataElement = data.get(0); } switch(attrType) { case IDPPConstants.SN_ELEMENT_INT: if((dataElement == null) || (dataElement instanceof SNElement)) { map = getAttributeMap(expContext, dataElement, map); break; } else { throw new IDPPException( IDPPUtils.bundle.getString("invalid Element")); } case IDPPConstants.FN_ELEMENT_INT: if((dataElement == null) || (dataElement instanceof FNElement)) { map = getAttributeMap(expContext, dataElement, map); } else { throw new IDPPException( IDPPUtils.bundle.getString("invalid Element")); } break; case IDPPConstants.MN_ELEMENT_INT: if((dataElement == null) || (dataElement instanceof MNElement)) { map = getAttributeMap(expContext, dataElement, map); } else { throw new IDPPException( IDPPUtils.bundle.getString("invalid Element")); } break; case IDPPConstants.PT_ELEMENT_INT: if((dataElement == null) || (dataElement instanceof PersonalTitleElement)) { map = getAttributeMap(expContext, dataElement, map); } else { throw new IDPPException( IDPPUtils.bundle.getString("invalid Element")); } break; case IDPPConstants.CN_ELEMENT_INT: if((dataElement == null) || (dataElement instanceof CNElement)) { map = getAttributeMap(expContext, dataElement, map); } else { throw new IDPPException( IDPPUtils.bundle.getString("invalid Element")); } break; case IDPPConstants.ALT_CN_ELEMENT_INT: map = getAltCNMap(data, map); break; case IDPPConstants.ANALYZED_NAME_ELEMENT_INT: map = getAnalyzedNameMap(dataElement, map); break; case IDPPConstants.COMMON_NAME_ELEMENT_INT: map = getCommonNameMap(dataElement, map); break; default: IDPPUtils.debug.error("IDPPCommonName:getDataMapForSelect" + "Unsupported element"); break; } if(IDPPUtils.debug.messageEnabled()) { IDPPUtils.debug.message("IDPPCommonName:getDataMapForSelect:" + "Attr map to be modified." + map); } return map; } /** * Gets CommonName attributes in a hashmap. * @param obj CommonNameType JAXB object. * @param map map that sets attribute/value pairs. * @return required common name hashmap. */ private Map getCommonNameMap(Object obj, Map map) throws IDPPException { IDPPUtils.debug.message("IDPPCommonName:getCommonNameMap:Init"); AnalyzedNameType analyzedName = null; DSTString cn = null; List altCNs = null; if(obj != null) { if(obj instanceof CommonNameType) { CommonNameType cnType = (CommonNameType)obj; analyzedName = cnType.getAnalyzedName(); cn = cnType.getCN(); altCNs = cnType.getAltCN(); } else { throw new IDPPException( IDPPUtils.bundle.getString("invalid Element")); } } getAnalyzedNameMap(analyzedName, map); getAltCNMap(altCNs, map); getAttributeMap(IDPPConstants.CN_ELEMENT, cn, map); return map; } /** * Get the AltCN attributes map * @param dataObject list of data objects * @param map map to be filled in * @return Map map to be returned * @exception IDPPException */ private Map getAltCNMap(List dataObject, Map map) throws IDPPException { IDPPUtils.debug.message("IDPPCommonName:getAltCNMap:Init"); if(dataObject == null) { map = getAttributeMap(IDPPConstants.ALT_CN_ELEMENT, null, map); return map; } return getAttributeMap(IDPPConstants.ALT_CN_ELEMENT, dataObject, map); } /** * Checks if the container has any binary attributes. */ public boolean hasBinaryAttributes() { return false; } }