All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zkoss.zk.ui.metainfo.AttributesInfo Maven / Gradle / Ivy

The newest version!
/* AttributesInfo.java

	Purpose:
		
	Description:
		
	History:
		Thu Apr 13 09:06:16     2006, Created by tomyeh

Copyright (C) 2006 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.zk.ui.metainfo;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.util.ConditionImpl;
import org.zkoss.zk.xel.Evaluator;
import org.zkoss.zk.xel.impl.Utils;

/**
 * Represents a map of custom attributes of a component definition
 * ({@link ComponentDefinition}).
 * It is equivalent to the custom-attributes element.
 *
 * 

Note: it is serializable. * * @author tomyeh */ public class AttributesInfo extends ConditionLeafInfo { /** Map(String name, ExValue/ExValue[]/Map value). */ private final Map _attrs; private final int _composite; private final int _scope; /** Constructor. * @param attrs the custom attributes (String name, String value). * Once called, the caller shall not access attrs again -- it belongs * to this object. * @param scope specifies the scope. * @param composite indicates the composite type. * It can be one of "none", "list" or "map". * If null or empty, "none" is assumed. * @exception IllegalArgumentException if the composite type is illegal. * @since 3.0.6 */ public AttributesInfo(NodeInfo parent, Map attrs, String scope, String composite, ConditionImpl cond) { super(parent, cond); if (composite == null || composite.length() == 0 || composite.equals("none")) _composite = Utils.SCALAR; else if (composite.equals("list")) _composite = Utils.LIST; else if (composite.equals("map")) _composite = Utils.MAP; else throw new IllegalArgumentException("Unkonwn composite: " + composite); if (attrs != null && !attrs.isEmpty()) { _attrs = new LinkedHashMap(); for (Map.Entry me : attrs.entrySet()) { _attrs.put(me.getKey(), Utils.parseComposite(me.getValue(), Object.class, _composite)); } } else { _attrs = null; } _scope = scope == null ? -1 : Components.getScope(scope); } /** The same as AttributesInfo(parent, attrs, scope, "none", cond). * * @param attrs the custom attributes (String name, String value). * Once called, the caller shall not access attrs again -- it belongs * to this object. * @param scope specifies the scope. */ public AttributesInfo(NodeInfo parent, Map attrs, String scope, ConditionImpl cond) { this(parent, attrs, scope, null, cond); } /** Returns the scope, or null if it is not associated with a scope. *

Notice that, prior to 5.0.8, "component" is returned if * it is not associated with a scope (which is not correct since * this info might be associated with a page). * @since 3.0.6 */ public String getScope() { return _scope != -1 ? Components.scopeToString(_scope) : null; } /** Returns the composite type: "none", "list" or "map". * @since 3.0.6 */ public String getComposite() { return _composite == Utils.LIST ? "list" : _composite == Utils.MAP ? "map" : "none"; } /** Applies the custom attributes. *

Note: this method does nothing if {@link #isEffective} returns false. */ public void apply(Component comp) { if (_attrs != null && isEffective(comp)) { final Evaluator eval = getEvaluator(); for (Map.Entry me : _attrs.entrySet()) { final String name = me.getKey(); final Object value = me.getValue(); comp.setAttribute(name, Utils.evaluateComposite(eval, comp, value), _scope != -1 ? _scope : Component.COMPONENT_SCOPE); //bug zk-1298, handle special composerName, see Components#wireController if ("composerName".equals(name)) { Object ctrlnm = comp.getAttribute(name); if (ctrlnm instanceof String) { Object controller = comp.removeAttribute("_$composer$_"); //get from special attribute if (controller != null && comp.getAttribute((String) ctrlnm) == null) { comp.setAttribute((String) ctrlnm, controller); } } } } } } /** Applies the custom attributes. *

Note: this method does nothing if {@link #isEffective} returns false. */ public void apply(Page page) { if (_attrs != null && isEffective(page)) { final Evaluator eval = getEvaluator(); for (Map.Entry me : _attrs.entrySet()) { final String name = me.getKey(); final Object value = me.getValue(); page.setAttribute(name, Utils.evaluateComposite(eval, page, value), _scope != -1 ? _scope : Component.PAGE_SCOPE); } } } /** * Returns the internal attributes if any. * @since 10.0.0 */ public Map getAttrs() { return _attrs != null ? _attrs : Collections.emptyMap(); } //Object// public String toString() { final StringBuffer sb = new StringBuffer(40).append("[custom-attributes:"); if (_attrs != null) for (String name : _attrs.keySet()) sb.append(' ').append(name); return sb.append(']').toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy