/**
* 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: IDPPDemographics.java,v 1.2 2008/06/25 05:47:16 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 IDPPDemographics
is an implementation of
* IDPPContainer
.
*/
public class IDPPDemographics extends IDPPBaseContainer {
/**
* Constructor
*/
public IDPPDemographics() {
IDPPUtils.debug.message("IDPPDemographics: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("IDPPDemographics:getContainerObject:Init");
try {
PPType ppType = IDPPUtils.getIDPPFactory().createPPElement();
DemographicsElement de =
IDPPUtils.getIDPPFactory().createDemographicsElement();
String displayLang = CollectionHelper.getMapAttr(userMap,
getAttributeMapper().getDSAttribute(
IDPPConstants.DEMO_GRAPHICS_DISPLAY_LANG_ELEMENT).toLowerCase());
if(displayLang != null) {
de.setDisplayLanguage(getDSTString(displayLang));
}
Set languages = (Set)userMap.get(
getAttributeMapper().getDSAttribute(
IDPPConstants.DEMO_GRAPHICS_LANGUAGE_ELEMENT).toLowerCase());
Iterator iter = languages.iterator();
while(iter.hasNext()) {
de.getLanguage().add(getDSTString((String)iter.next()));
}
String birthDay = CollectionHelper.getMapAttr(userMap,
getAttributeMapper().getDSAttribute(
IDPPConstants.DEMO_GRAPHICS_BIRTH_DAY_ELEMENT).toLowerCase());
if(birthDay != null) {
de.setBirthday(getDSTMonthDay(birthDay));
}
String age = CollectionHelper.getMapAttr(userMap,
getAttributeMapper().getDSAttribute(
IDPPConstants.DEMO_GRAPHICS_AGE_ELEMENT).toLowerCase());
if(age != null) {
de.setAge(getDSTInteger(age));
}
String timeZone = CollectionHelper.getMapAttr(userMap,
getAttributeMapper().getDSAttribute(
IDPPConstants.DEMO_GRAPHICS_TIME_ZONE_ELEMENT).toLowerCase());
if(timeZone != null) {
de.setTimeZone(getDSTString(timeZone));
}
ppType.setDemographics(de);
return ppType;
} catch (JAXBException je) {
IDPPUtils.debug.error(
"IDPPDemographics:getContainerObject: JAXB failure", je);
throw new IDPPException(
IDPPUtils.bundle.getString("jaxbFailure"));
}
}
/**
* Gets required common name container attributes.
* @return a set of required container attributes
*/
public Set getContainerAttributes() {
Set set = new HashSet();
set.add(IDPPConstants.DEMO_GRAPHICS_DISPLAY_LANG_ELEMENT);
set.add(IDPPConstants.DEMO_GRAPHICS_LANGUAGE_ELEMENT);
set.add(IDPPConstants.DEMO_GRAPHICS_BIRTH_DAY_ELEMENT);
set.add(IDPPConstants.DEMO_GRAPHICS_AGE_ELEMENT);
set.add(IDPPConstants.DEMO_GRAPHICS_TIME_ZONE_ELEMENT);
return getMapperAttributeSet(set);
}
/**
* Gets the container attributes for a given select expression.
* @param select Select expression.
* @return a set of required user attributes.
*/
public Set getContainerAttributesForSelect(String select) {
if(IDPPUtils.debug.messageEnabled()) {
IDPPUtils.debug.message("IDPPDemographics:getContainer" +
"AttributesForSelect:Init");
}
String expContext = IDPPUtils.getExpressionContext(select);
if(IDPPUtils.debug.messageEnabled()) {
IDPPUtils.debug.message("IDPPDemographics:getContainer" +
"AttributesForSelect:exp context = " + expContext);
}
Set set = new HashSet();
if(expContext == null || expContext.length() == 0) {
return set;
}
if(expContext.equals(IDPPConstants.DEMOGRAPHICS_ELEMENT)) {
return getContainerAttributes();
} else {
set.add(expContext);
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 Map Attribute key value pair map for the given select.
* @exception IDPPException.
*/
public Map getDataMapForSelect(String select, List data)
throws IDPPException {
IDPPUtils.debug.message("IDPPDemographics:getDataMapForSelect:Init");
Map map = new HashMap();
String expContext = IDPPUtils.getExpressionContext(select);
if(IDPPUtils.debug.messageEnabled()) {
IDPPUtils.debug.message("IDPPDemographics:getDataMapForSelect:" +
"exp context = " + expContext);
}
if(expContext == null && expContext.length() == 0) {
return map;
}
Object dataElement = null;
if(data != null && !data.isEmpty()) {
dataElement = data.get(0);
}
if(expContext.equals(IDPPConstants.DEMOGRAPHICS_ELEMENT)) {
if((dataElement == null) ||
(dataElement instanceof DemographicsElement)) {
map = getDemographicsMap(dataElement, map);
} else {
throw new IDPPException(
IDPPUtils.bundle.getString("invalid Element"));
}
} else if(expContext.equals(
IDPPConstants.DEMO_GRAPHICS_DISPLAY_LANG_ELEMENT)) {
if((dataElement == null) ||
(dataElement instanceof DisplayLanguageElement)) {
map = getAttributeMap(
IDPPConstants.DEMO_GRAPHICS_DISPLAY_LANG_ELEMENT,
dataElement, map);
} else {
throw new IDPPException(
IDPPUtils.bundle.getString("invalid Element"));
}
} else if(expContext.equals(
IDPPConstants.DEMO_GRAPHICS_BIRTH_DAY_ELEMENT)) {
if((dataElement == null) ||
(dataElement instanceof BirthdayElement)) {
map = getAttributeMap(
IDPPConstants.DEMO_GRAPHICS_BIRTH_DAY_ELEMENT,
dataElement, map);
} else {
throw new IDPPException(
IDPPUtils.bundle.getString("invalid Element"));
}
} else if(expContext.equals(
IDPPConstants.DEMO_GRAPHICS_AGE_ELEMENT)) {
if((dataElement == null) ||
(dataElement instanceof AgeElement)) {
map = getAttributeMap(IDPPConstants.DEMO_GRAPHICS_AGE_ELEMENT,
dataElement, map);
} else {
throw new IDPPException(
IDPPUtils.bundle.getString("invalid Element"));
}
} else if(expContext.equals(
IDPPConstants.DEMO_GRAPHICS_LANGUAGE_ELEMENT)) {
if((dataElement == null) ||
(dataElement instanceof LanguageElement)) {
map = getLanguageMap(data, map);
} else {
throw new IDPPException(
IDPPUtils.bundle.getString("invalid Element"));
}
} else {
IDPPUtils.debug.error("IDPPDemographics:getDataMapForSelect"
+ "Unsupported element");
}
if(IDPPUtils.debug.messageEnabled()) {
IDPPUtils.debug.message("IDPPDemographics:getDataMapForSelect:" +
"Attr map to be modified." + map);
}
return map;
}
/**
* Gets the Demographics container attributes in a hashmap.
* @param obj DemographicsType JAXB object.
* @param map map that sets attribute/value pairs.
* @return Map Attribute value pair map that needs to be modified.
* @exception IDPPException.
*/
private Map getDemographicsMap(Object obj, Map map)
throws IDPPException {
IDPPUtils.debug.message("IDPPDemographics:getDemographicsMap:Init");
DSTString displayLang = null;
DSTInteger age = null;
DSTMonthDay birthDay = null;
List languages = null;
DSTString timeZone = null;
if(obj != null) {
if(obj instanceof DemographicsType) {
DemographicsType demoGraphs = (DemographicsType)obj;
displayLang = demoGraphs.getDisplayLanguage();
age = demoGraphs.getAge();
birthDay = demoGraphs.getBirthday();
languages = demoGraphs.getLanguage();
timeZone = demoGraphs.getTimeZone();
} else {
throw new IDPPException(
IDPPUtils.bundle.getString("invalid Element"));
}
}
getLanguageMap(languages, map);
getAttributeMap(IDPPConstants.DEMO_GRAPHICS_DISPLAY_LANG_ELEMENT,
displayLang, map);
getAttributeMap(IDPPConstants.DEMO_GRAPHICS_AGE_ELEMENT, age, map);
getAttributeMap(IDPPConstants.DEMO_GRAPHICS_TIME_ZONE_ELEMENT,
timeZone, map);
getAttributeMap(IDPPConstants.DEMO_GRAPHICS_BIRTH_DAY_ELEMENT,
birthDay, map);
return map;
}
/**
* Gets the Lanaguage 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 getLanguageMap(List dataObject, Map map) throws IDPPException {
IDPPUtils.debug.message("IDPPDemographics:getLanguageMap:Init");
if(dataObject == null) {
return getAttributeMap(
IDPPConstants.DEMO_GRAPHICS_LANGUAGE_ELEMENT, null, map);
}
return getAttributeMap(IDPPConstants.DEMO_GRAPHICS_LANGUAGE_ELEMENT,
dataObject, map);
}
/**
* Checks if there are any binary attributes.
*/
public boolean hasBinaryAttributes() {
return false;
}
}