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

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

There is a newer version: 10.0.0-jakarta
Show newest version
/* NativeInfo.java

	Purpose:
		
	Description:
		
	History:
		Tue Aug 21 10:20:34     2007, Created by tomyeh

Copyright (C) 2007 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.List;
import java.util.LinkedList;

import org.zkoss.idom.Namespace;

import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.ext.Native;
import org.zkoss.zk.xel.EvaluatorRef;

/**
 * Represents the component information about the native components.
 *
 * 

Note:it is not thread-safe. * * @author tomyeh * @since 3.0.0 */ public class NativeInfo extends ComponentInfo { private List _prokids, _epikids; private NativeInfo _splitkid; /** Declared namespaces (Namespace). */ private List _dns; /** Constructs a native info with a parent. * * @param parent the parent info (never null). * @param compdef the component definition (never null). * @param tag the name of the tag */ public NativeInfo(NodeInfo parent, ComponentDefinition compdef, String tag) { super(parent, compdef, tag); if (!compdef.isNative()) throw new IllegalArgumentException("compdef must be native"); } /** Constructs a native info without a parent. * @param evlar the evaluator (never null). * @param compdef the component definition (never null). * @param tag the name of the tag * @since 3.5.0 */ public NativeInfo(EvaluatorRef evlar, ComponentDefinition compdef, String tag) { super(evlar, compdef, tag); } /** Returns a readonly list of the declared namespaces (never null). */ public List getDeclaredNamespaces() { if (_dns != null) return _dns; return Collections.emptyList(); } /** Adds a declared namespace. */ public void addDeclaredNamespace(Namespace ns) { if (_dns == null) _dns = new LinkedList(); _dns.add(ns); } /** Returns a readonly list of the prolog children ({@link NativeInfo}). * A prolog child is a special child of {@link NativeInfo}. * (it is not part of {@link #getChildren} * that is used to optimize the native components such that * ZK can use one native components to represent several {@link NativeInfo}. * In other words, a prolog child won't be created as part of *

The prolog children must be rendered before {@link #getChildren}. */ public List getPrologChildren() { if (_prokids != null) return _prokids; return Collections.emptyList(); } /** Returns a readonly list of the epilog children ({@link NativeInfo}). * The epilog children must be rendered after {@link #getChildren}. */ public List getEpilogChildren() { if (_epikids != null) return _epikids; return Collections.emptyList(); } /** Adds a prolog child. * *

Note: if child belong to other {@link ComponentInfo}, * you have to remove them first before calling this method. * Otherwise, the result is unpredictable. * * @param child the prolog child. * @see #getPrologChildren */ public void addPrologChild(NodeInfo child) { if (_prokids == null) _prokids = new LinkedList(); _prokids.add(child); } /** Adds an epilog child. * * @param child the epilog child. If child belongs to {@link #getChildren}, * it will be removed first. * @see #getPrologChildren */ public void addEpilogChild(NodeInfo child) { if (_epikids == null) _epikids = new LinkedList(); _epikids.add(child); } /** Returns the split child, or null if not available. * Each native info has at most one split child. * If a native info has a single child and the child is also * a native info, we can merge them by making the child as * the split child. * * @since 3.0.0 */ public NativeInfo getSplitChild() { return _splitkid; } /** Sets the split kid. * @see #getSplitChild * @since 3.0.0 */ public void setSplitChild(NativeInfo child) { _splitkid = child; } //super// public Component newInstance(Page page, Component parent) { final Component comp = super.newInstance(page, parent); if (_dns != null) { final Native nc = (Native)comp; for (Namespace ns: _dns) nc.addDeclaredNamespace(ns); } return comp; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy