AMPropertySheetModel.java revision f56a278c148b90f6c2a675e0c1fa8686ca5abed4
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk/**
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk *
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk *
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * The contents of this file are subject to the terms
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * of the Common Development and Distribution License
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * (the License). You may not use this file except in
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * compliance with the License.
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk *
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * You can obtain a copy of the License at
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * https://opensso.dev.java.net/public/CDDLv1.0.html or
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * opensso/legal/CDDLv1.0.txt
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * See the License for the specific language governing
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * permission and limitations under the License.
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk *
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * When distributing Covered Code, include this CDDL
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * Header Notice in each file and include the License file
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk * at opensso/legal/CDDLv1.0.txt.
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * If applicable, add the following below the CDDL Header,
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * with the fields enclosed by brackets [] replaced by
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * your own identifying information:
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk * "Portions Copyrighted [year] [name of copyright owner]"
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk *
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * $Id: AMPropertySheetModel.java,v 1.12 2009/10/19 18:17:37 asyhuang Exp $
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk *
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk */
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk/*
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk * Portions Copyrighted 2011-2014 ForgeRock AS
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk */
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkpackage com.sun.identity.console.base.model;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.iplanet.jato.view.ContainerView;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.iplanet.jato.view.ContainerViewBase;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.iplanet.jato.view.View;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.iplanet.jato.view.DisplayFieldImpl;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.iplanet.jato.view.html.OptionList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.property.PropertyTemplate;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.model.CCMapListModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.model.CCOrderedListModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.model.CCUnOrderedListModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.view.CCGlobalMapList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.view.CCMapList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.view.CCOrderedList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.identity.console.ui.view.CCUnOrderedList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.common.CCDescriptor;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.common.CCTagClass;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.model.CCActionTableModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.model.CCAddRemoveModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.model.CCPropertySheetModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.model.CCEditableListModel;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.view.addremove.CCAddRemove;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport com.sun.web.ui.view.editablelist.CCEditableList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.io.BufferedReader;
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenkimport java.io.InputStream;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.io.ByteArrayInputStream;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.io.IOException;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.io.InputStreamReader;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.nio.charset.Charset;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.util.Date;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.util.HashMap;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.util.HashSet;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.util.Iterator;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.util.Map;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport java.util.Set;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport javax.servlet.ServletContext;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport org.w3c.dom.Document;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport org.w3c.dom.NamedNodeMap;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport org.w3c.dom.Node;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkimport org.w3c.dom.NodeList;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk/* - NEED NOT LOG - */
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenkpublic class AMPropertySheetModel
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk extends CCPropertySheetModel
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk{
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private static String UTF_8 = "UTF-8";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private static String NON_BREAK_SPACE = "\u00A0";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG = "tblSubConfig";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_BUTTON_ADD =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigButtonAdd";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_BUTTON_DELETE =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigButtonDelete";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_COL_NAME =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigColName";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_COL_TYPE =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigColType";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_DATA_NAME =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigDataName";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_HREF_NAME =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigHrefName";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String TBL_SUB_CONFIG_DATA_TYPE =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "tblSubConfigDataType";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private Set children = new HashSet();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private Set passwordComponents;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private Map radioDefaultValue;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private Map childMap;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private Set dateComponents;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private Map addRemoveOptions;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private boolean hasSubConfigTable;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String ORDERED_LIST =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "com.sun.identity.console.ui.taglib.CCOrderedListTag";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String UNORDERED_LIST =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "com.sun.identity.console.ui.taglib.CCUnOrderedListTag";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String MAP_LIST =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "com.sun.identity.console.ui.taglib.CCMapListTag";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String GLOBAL_MAP_LIST =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "com.sun.identity.console.ui.taglib.CCGlobalMapListTag";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String EDITABLE_LIST =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "com.sun.web.ui.taglib.editablelist.CCEditableListTag";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String ADDREMOVE_LIST =
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk "com.sun.web.ui.taglib.addremove.CCAddRemoveTag";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public static final String passwordRandom =
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk "KmhUnWR1MYWDYW4xuqdF5nbm+CXIyOVt";
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk public AMPropertySheetModel() {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk super();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public Set getChildrenNames() {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk return children;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public AMPropertySheetModel(String name) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk setDocument(new ByteArrayInputStream(name.getBytes(Charset.forName(UTF_8))));
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public AMPropertySheetModel(ServletContext sc, String file) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk super(sc, file);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public AMPropertySheetModel(InputStream is) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk super(is);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public void setDocument(InputStream is) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk try {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String strXML = toString(is);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk strXML = extractAddRemoveOptions(strXML);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk is = new ByteArrayInputStream(strXML.getBytes(Charset.forName(UTF_8)));
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } catch (IOException e) {
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk AMModelBase.debug.error("AMPropertySheetModel.setDocument", e);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk super.setDocument(is);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk passwordComponents = new HashSet();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk dateComponents = new HashSet();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk radioDefaultValue = new HashMap();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk childMap = new HashMap();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk hackToGetChildViews();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk public void registerChildren(ContainerViewBase view) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk super.registerChildren(view);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk for (Iterator i = childMap.keySet().iterator(); i.hasNext(); ) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String name = (String)i.next();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String tagName = (String)childMap.get(name);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (tagName != null) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (tagName.equals(ORDERED_LIST)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk view.registerChild(name, CCOrderedList.class);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } else if (tagName.equals(UNORDERED_LIST)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk view.registerChild(name, CCUnOrderedList.class);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } else if (tagName.equals(MAP_LIST)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk view.registerChild(name, CCMapList.class);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } else if (tagName.equals(GLOBAL_MAP_LIST)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk view.registerChild(name, CCGlobalMapList.class);
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk } else if (tagName.equals(EDITABLE_LIST)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk view.registerChild(name, CCEditableList.class);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (hasSubConfigTable) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk CCActionTableModel model = createSubConfigActionTableModel();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk model.registerChildren(view);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk private void hackToGetChildViews() {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk Document document = getDocument();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (document != null) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk parseNodeList(
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk document.getElementsByTagName(CCDescriptor.CC_ELEMENT));
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk private void parseNodeList(NodeList nodeList) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (nodeList != null) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk int length = nodeList.getLength();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk for (int i = 0; i < length; i++) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk Node node = nodeList.item(i);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk // Check node for name attribute.
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (node.hasAttributes()) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk NamedNodeMap nodeAttrs = node.getAttributes();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk Node nameNode = nodeAttrs.getNamedItem(NAME_ATTRIBUTE);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk Node tagclassNode = nodeAttrs.getNamedItem(
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk CCDescriptor.CC_ELEMENT_TAGCLASS);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if ((nameNode != null) && (tagclassNode != null)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String name = nameNode.getNodeValue();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String v = tagclassNode.getNodeValue();
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (name.startsWith(PropertyTemplate.DATE_MARKER_NAME)){
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String dateName = name.substring(
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk PropertyTemplate.DATE_MARKER_NAME.length());
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk dateComponents.add(dateName);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } else if (v != null) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (v.equals(CCTagClass.EDITABLELIST)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk setModel(name, new CCEditableListModel());
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } else if (v.equals(CCTagClass.PASSWORD)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk passwordComponents.add(name);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk } else if (v.equals(CCTagClass.RADIOBUTTON)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk String def = getNodeDefaultValue(node);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (def != null) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk radioDefaultValue.put(name, def);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk childMap.put(name, v);
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
dff2cc5646d4437ab9e0cb1dcb59da65462a5938jeff.schenk
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk if (name.equals(TBL_SUB_CONFIG)) {
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk hasSubConfigTable = true;
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk }
5b64d5d44892834ba97f003080f3467299b7c5c5jeff.schenk
private String getNodeDefaultValue(Node n) {
String defaultValue = null;
NodeList children = n.getChildNodes() ;
if (children != null) {
int length = children.getLength();
for (int i = 0; (i < length) && (defaultValue == null); i++) {
Node node = children.item(i);
String tagName = node.getNodeName();
if (tagName.equals("attribute")) {
NamedNodeMap nodeAttrs = node.getAttributes();
Node nameNode = nodeAttrs.getNamedItem(NAME_ATTRIBUTE);
if (nameNode != null) {
String name = nameNode.getNodeValue();
if (name.equals("defaultValue")) {
Node valueNode = nodeAttrs.getNamedItem("value");
defaultValue = valueNode.getNodeValue();
}
}
}
}
}
return defaultValue;
}
public void setValues(String name, Object[] values, AMModel model) {
Object m = getModel(name);
/*
* Need to replace " " with "" because we hack the Service XML
* to have required attribute values as " "
*/
if ((values != null) && (values.length == 1)) {
if (values[0] instanceof String) {
String val = (String)values[0];
if ((val == null) || val.equals(NON_BREAK_SPACE)) {
values[0] = "";
}
}
}
if ((m != null) && CCEditableListModel.class.isInstance(m)) {
((CCEditableListModel) m).setOptionList(
AMAdminUtils.toOrderedSet(values));
}
if (passwordComponents.contains(name)) {
// do not need to mask the password with random string
// if password value is blank
boolean bRandom = false;
if ((values != null) && (values.length > 0)) {
String tmp = (String)values[0];
bRandom = (tmp != null) && (tmp.trim().length() > 0);
}
if (bRandom) {
super.setValue(name + PropertyTemplate.PWD_CONFIRM_SUFFIX,
passwordRandom);
super.setValue(name, passwordRandom);
} else {
super.setValues(name + PropertyTemplate.PWD_CONFIRM_SUFFIX,
values);
super.setValues(name, values);
}
} else if (dateComponents.contains(name)) {
super.setValues(name, getDateInUserLocale(values, model));
} else {
super.setValues(name, values);
}
}
protected Object[] getDateInUserLocale(Object[] dates, AMModel model) {
Object[] values = null;
if ((dates != null) && (dates.length > 0)) {
values = new Object[dates.length];
for (int i = 0; i < dates.length; i++) {
String tmp = (String)dates[i];
if (tmp == null) {
values[i] = tmp;
} else {
Date dt =
com.sun.identity.shared.locale.Locale.parseNormalizedDateString(
tmp);
String dateString =
com.sun.identity.shared.locale.Locale.getDateString(
dt, model.getUserLocale());
if (dateString != null) {
values[i] = dateString;
} else {
values[i] = tmp;
}
}
}
}
return (values == null) ? dates : values;
}
/**
* Returns the default values of radio buttons. Map of radio button name
* to default value (String).
*
* @return the default values of radio buttons.
*/
public Map getRadioDefaultValues() {
return radioDefaultValue;
}
public View createChild(View parent, String name, AMModel model) {
String tagName = (String)childMap.get(name);
View view = null;
if (tagName != null) {
if (tagName.equals(ORDERED_LIST)) {
CCOrderedListModel m = new CCOrderedListModel();
view = new CCOrderedList((ContainerView) parent,
m, name);
m.setAddButtonLabel(model.getLocalizedString(
"addremove.orderable.list.add.button"));
m.setDeleteButtonLabel(model.getLocalizedString(
"addremove.orderable.list.delete.button"));
setModel(name, m);
} else if (tagName.equals(UNORDERED_LIST)) {
CCUnOrderedListModel m = new CCUnOrderedListModel();
view = new CCUnOrderedList((ContainerView) parent,
m, name);
setModel(name, m);
} else if (tagName.equals(MAP_LIST) ||
tagName.equals(GLOBAL_MAP_LIST)
) {
CCMapListModel m = new CCMapListModel();
view = new CCMapList((ContainerView) parent, m, name);
m.setKeyLabel(model.getLocalizedString("maplist.key.label"));
m.setValueLabel(model.getLocalizedString(
"maplist.value.label"));
m.setMsgInvalidEntry(model.getLocalizedString(
"maplist.msg.invalid.entry"));
m.setMsgInvalidKey(model.getLocalizedString(
"maplist.msg.invalid.key"));
m.setMsgInvalidValue(model.getLocalizedString(
"maplist.msg.invalid.value"));
m.setMsgInvalidNoKey(model.getLocalizedString(
"maplist.msg.invalid.nokey"));
setModel(name, m);
} else if (tagName.equals(ADDREMOVE_LIST)) {
CCAddRemoveModel m = (CCAddRemoveModel)getModel(name);
if (m == null) {
setModel(name, new CCAddRemoveModel());
}
}
}
if (view == null) {
view = super.createChild(parent, name);
if (CCEditableList.class.isInstance(view)) {
CCEditableList editable = (CCEditableList)view;
CCEditableListModel m =(CCEditableListModel)editable.getModel();
m.setAddBtnLabel(
model.getLocalizedString("editableList.addButtonLabel"));
m.setRemoveBtnLabel(
model.getLocalizedString("editableList.deleteButtonLabel"));
}
}
children.add(view);
return view;
}
private CCActionTableModel createSubConfigActionTableModel() {
CCActionTableModel tblModel = new CCActionTableModel(
getClass().getClassLoader().getResourceAsStream(
"com/sun/identity/console/tblSubConfig.xml"));
tblModel.setTitleLabel("label.items");
tblModel.setActionValue(TBL_SUB_CONFIG_BUTTON_ADD, "button.new");
tblModel.setActionValue(TBL_SUB_CONFIG_BUTTON_DELETE, "button.delete");
tblModel.setActionValue(TBL_SUB_CONFIG_COL_NAME,
"subconfig.table.column.name");
tblModel.setActionValue(TBL_SUB_CONFIG_COL_NAME,
"subconfig.table.column.name");
tblModel.setActionValue(TBL_SUB_CONFIG_COL_TYPE,
"subconfig.table.column.type");
setModel(TBL_SUB_CONFIG, tblModel);
return tblModel;
}
public void clear() {
super.clear();
for (Iterator iter = children.iterator(); iter.hasNext(); ) {
View view = (View)iter.next();
if (CCAddRemove.class.isInstance(view)) {
CCAddRemoveModel m = (CCAddRemoveModel)getModel(
view.getName());
m.clear();
m.setAvailableOptionList(new OptionList());
m.setSelectedOptionList(new OptionList());
} else if (CCEditableList.class.isInstance(view)) {
CCEditableListModel m = (CCEditableListModel)getModel(
view.getName());
m.setOptionList(new OptionList());
((CCEditableList)view).resetStateData();
} else if (CCOrderedList.class.isInstance(view)) {
CCOrderedListModel m = (CCOrderedListModel)getModel(
view.getName());
m.setSelectedOptionList(new OptionList());
((CCOrderedList)view).resetStateData();
} else if (CCUnOrderedList.class.isInstance(view)) {
CCUnOrderedListModel m = (CCUnOrderedListModel)getModel(
view.getName());
m.setOptionList(new OptionList());
((CCUnOrderedList)view).resetStateData();
} else if (CCMapList.class.isInstance(view)) {
CCMapListModel m = (CCMapListModel)getModel(view.getName());
m.setOptionList(new OptionList());
((CCMapList)view).resetStateData();
} else {
if (DisplayFieldImpl.class.isInstance(view)) {
((DisplayFieldImpl)view).setValues(null);
}
}
}
}
private static String toString(InputStream is)
throws IOException {
BufferedReader rawReader = null;
String content = null;
try {
rawReader = new BufferedReader(new InputStreamReader(is, Charset.forName(UTF_8)));
StringBuffer buff = new StringBuffer();
String line = null;
while ((line = rawReader.readLine()) != null) {
buff.append(line);
}
rawReader.close();
rawReader = null;
content = buff.toString();
} finally {
if (rawReader != null) {
rawReader.close();
}
}
return content;
}
private String extractAddRemoveOptions(String strXML) {
int idx = strXML.indexOf(ADDREMOVE_LIST);
addRemoveOptions = new HashMap();
while (idx != -1) {
String name = getPropertyValue(strXML, idx, "name");
OptionList options = new OptionList();
idx = strXML.indexOf(">", idx);
int idx2 = strXML.indexOf("</cc>", idx);
int idx3 = strXML.indexOf("<option ", idx);
if ((idx2 != -1) && (idx3 != -1)) {
while ((idx3 != -1) && (idx3 < idx2)) {
int idx4 = strXML.indexOf("/>", idx3);
String label = getPropertyValue(strXML, idx4, "label");
String value = getPropertyValue(strXML, idx4, "value");
options.add(label, value);
strXML = strXML.substring(0, idx3) +
strXML.substring(idx4 + 2);
idx3 = strXML.indexOf("<option ", idx);
idx2 = strXML.indexOf("</cc>", idx);
}
addRemoveOptions.put(name, options);
idx = strXML.indexOf(ADDREMOVE_LIST, idx2);
} else {
idx = strXML.indexOf(ADDREMOVE_LIST, idx);
}
}
return strXML;
}
private String getPropertyValue(String xml, int idx, String name) {
int idx1 = xml.lastIndexOf(name+"=\"", idx);
int idx2 = xml.indexOf("\"", idx1 + name.length()+3);
return xml.substring(idx1+name.length()+2, idx2);
}
public OptionList getAddRemoveAvailOptions(String name) {
return (OptionList)addRemoveOptions.get(name);
}
/**
* Expose a copy of the attribute value map to View Bean instances.
* @return A copy of the current attribute value map.
*/
public Map getAttributeValueMap() {
final Map attributeValueMap = new HashMap();
attributeValueMap.putAll(getValueMap());
return attributeValueMap;
}
}