Class ComponentDefinitionImpl

    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addAnnotation​(java.lang.String propName, java.lang.String annotName, java.util.Map<java.lang.String,​java.lang.String[]> annotAttrs, org.zkoss.util.resource.Location loc)
      Adds an annotation to the specified property of this component definition.
      void addCustomAttribute​(java.lang.String name, java.lang.String value)
      Adds a custom attribute.
      void addMold​(java.lang.String name, java.lang.String widgetClass)
      Adds a mold.
      void addProperty​(java.lang.String name, java.lang.String value)
      Adds a property initializer.
      void applyAttributes​(Component comp)
      Applies the custom attributes defined in this definition to the specified component.
      void applyProperties​(Component comp)
      Applies the properties defined in this definition to the specified component.
      java.lang.Object clone()
      Clones this component definition.
      ComponentDefinition clone​(LanguageDefinition langdef, java.lang.String name)
      Clones this definition and assigns with the specified language definition and name.
      java.util.Map<java.lang.String,​java.lang.Object> evalProperties​(java.util.Map<java.lang.String,​java.lang.Object> propmap, Page owner, Component parent)
      Evaluates and retrieves properties to the specified map.
      AnnotationMap getAnnotationMap()
      Returns the annotation map defined in this definition, or null if no annotation is ever defined.
      java.lang.String getApply()
      Returns the apply attribute that is a list of Composer class names or EL expressions returning classes, class names or composer instances, or null if no apply attribute.
      java.lang.String getCurrentDirectory()
      Returns the current directory which is used to convert a relative URI to absolute, or null if not available.
      java.net.URL getDeclarationURL()
      Returns the URL where this component definition is declared, or null if not available.
      java.lang.String getDefaultWidgetClass​(Component comp)
      Returns the default widget class, or null if not available.
      java.lang.Object getImplementationClass()
      Returns the class (Class) or the class name (String) that implements the component.
      LanguageDefinition getLanguageDefinition()
      Returns the language definition, or null if it is a temporary definition belonging to a page.
      java.lang.String getMacroURI()
      Returns the macro URI, or null if not a macro.
      java.util.Collection<java.lang.String> getMoldNames()
      Returns a readonly collection of the names of the mold.
      java.lang.String getName()
      Returns name of this component definition (never null).
      ExValue[] getParsedApply()
      Return the parsed expressions of the apply attribute.
      java.lang.String getTextAs()
      Returns the property name to which the text enclosed within the element (associated with this component definition) is assigned to.
      java.lang.String getWidgetClass​(Component comp, java.lang.String moldName)
      Returns the widget class associated with specified mold, or the default widget class (ComponentDefinition.getWidgetClass(org.zkoss.zk.ui.Component, java.lang.String)) if not available.
      boolean hasMold​(java.lang.String name)
      Returns whether the specified mold exists.
      boolean isBlankPreserved()
      Returns whether to preserve the blank text.
      boolean isChildAllowedInTextAs()
      Returns if a child is allowed in the text-as area.
      boolean isInlineMacro()
      Returns whether this is an inline macro.
      boolean isInstance​(Component comp)
      Returns whether a component belongs to this definition.
      boolean isMacro()
      Returns whether this is a macro component.
      boolean isNative()
      Returns whether this is used for the native namespace.
      boolean isShadowElement()
      Returns whether this is a shadow element.
      Component newInstance​(java.lang.Class<? extends Component> cls)
      Creates an component of this definition.
      Component newInstance​(Page page, java.lang.String clsnm)
      Creates an component of this definition.
      static ComponentDefinition newMacroDefinition​(LanguageDefinition langdef, PageDefinition pgdef, java.lang.String name, java.lang.Class<? extends Component> cls, java.lang.String macroURI, boolean inline)
      Constructs a macro component definition.
      static ComponentDefinition newNativeDefinition​(LanguageDefinition langdef, java.lang.String name, java.lang.Class<? extends Component> cls)
      Constructs a native component definition.
      static ComponentDefinition newShadowDefinition​(LanguageDefinition langdef, PageDefinition pgdef, java.lang.String name, java.lang.Class<? extends Component> cls, java.lang.String templateURI)
      Constructs a shadow component definition.
      java.lang.Class<?> resolveImplementationClass​(Page page, java.lang.String clsnm)
      Resolves and returns the class that implements the component.
      void setApply​(java.lang.String apply)
      Sets the apply attribute that is is a list of Composer class or EL expressions returning classes, class names or composer instances.
      void setBlankPreserved​(boolean preserve)
      Sets whether to preserve the blank text.
      void setChildAllowedInTextAs​(boolean allowed)
      Sets whether the child component is allowed within the element.
      void setCurrentDirectory​(java.lang.String curdir)
      Sets the current directory which is used to convert a relative URI to absolute.
      void setDeclarationURL​(java.net.URL url)
      Sets the URI where this definition is declared.
      void setDefaultWidgetClass​(java.lang.String widgetClass)
      Sets the default widget class.
      void setImplementationClass​(java.lang.Class<? extends Component> cls)
      Sets the class to implements the component.
      void setImplementationClass​(java.lang.String clsnm)
      Sets the class name to implements the component.
      void setTextAs​(java.lang.String propnm)
      Sets the property name to which the text enclosed within the element (associated with this component definition) is assigned to.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • ComponentDefinitionImpl

        public ComponentDefinitionImpl​(LanguageDefinition langdef,
                                       PageDefinition pgdef,
                                       java.lang.String name,
                                       java.lang.Class<? extends Component> cls)
        Constructs a native component, i.e., a component implemented by a Java class.

        Note; if both langdef and pgdef are null, it must be a reserved component.

        Parameters:
        langdef - the language definition. It is null if it is defined as part of a page definition
        pgdef - the page definition. It is null if it is defined as part of a language definition. doesn't belong to any language.
        cls - the implementation class.
        Since:
        3.0.0
      • ComponentDefinitionImpl

        public ComponentDefinitionImpl​(LanguageDefinition langdef,
                                       PageDefinition pgdef,
                                       java.lang.String name,
                                       java.lang.String clsnm)
        Constructs a native component, i.e., a component implemented by a Java class.

        Note; if both langdef and pgdef are null, it must be a reserved component.

        Parameters:
        langdef - the language definition. It is null if it is defined as part of a page definition
        pgdef - the page definition. It is null if it is defined as part of a language definition. doesn't belong to any language.
        clsnm - the implementation class.
        Since:
        3.0.8
    • Method Detail

      • newShadowDefinition

        public static final ComponentDefinition newShadowDefinition​(LanguageDefinition langdef,
                                                                    PageDefinition pgdef,
                                                                    java.lang.String name,
                                                                    java.lang.Class<? extends Component> cls,
                                                                    java.lang.String templateURI)
        Constructs a shadow component definition. It is the component definition used to implement the shadow element.
        Parameters:
        langdef - the language definition. It is null if it is defined as part of a page definition
        pgdef - the page definition. It is null if it is defined as part of a language definition.
        templateURI - the URI of the ZUML page to representing this shadow, like macroURI.
        Since:
        8.0.0
      • newMacroDefinition

        public static final ComponentDefinition newMacroDefinition​(LanguageDefinition langdef,
                                                                   PageDefinition pgdef,
                                                                   java.lang.String name,
                                                                   java.lang.Class<? extends Component> cls,
                                                                   java.lang.String macroURI,
                                                                   boolean inline)
        Constructs a macro component definition. It is the component definition used to implement the macros.
        Parameters:
        langdef - the language definition. It is null if it is defined as part of a page definition
        pgdef - the page definition. It is null if it is defined as part of a language definition.
        macroURI - the URI of the ZUML page to representing this macro.
        Since:
        3.0.0
      • newNativeDefinition

        public static final ComponentDefinition newNativeDefinition​(LanguageDefinition langdef,
                                                                    java.lang.String name,
                                                                    java.lang.Class<? extends Component> cls)
        Constructs a native component definition. It is the component definition used to implement the native namespace.
        Parameters:
        langdef - the language definition. It cannot be null.
        Since:
        3.0.0
      • addCustomAttribute

        public void addCustomAttribute​(java.lang.String name,
                                       java.lang.String value)
        Adds a custom attribute.
      • addAnnotation

        public void addAnnotation​(java.lang.String propName,
                                  java.lang.String annotName,
                                  java.util.Map<java.lang.String,​java.lang.String[]> annotAttrs,
                                  org.zkoss.util.resource.Location loc)
        Adds an annotation to the specified property of this component definition.
        Parameters:
        propName - the property name. If null, the annotation is associated with the whole component rather than a particular property.
        annotName - the annotation name (never null, nor empty).
        annotAttrs - a map of attributes, or null if no attribute at all. The attribute must be in a pair of strings (String name, String value).
        loc - the location information of the annotation in the document, or null if not available.
        Since:
        6.0.0
      • getCurrentDirectory

        public java.lang.String getCurrentDirectory()
        Returns the current directory which is used to convert a relative URI to absolute, or null if not available.
      • setCurrentDirectory

        public void setCurrentDirectory​(java.lang.String curdir)
        Sets the current directory which is used to convert a relative URI to absolute.
        Parameters:
        curdir - the current directory; null to ignore.
      • setTextAs

        public void setTextAs​(java.lang.String propnm)
        Sets the property name to which the text enclosed within the element (associated with this component definition) is assigned to.

        Default: null (means to create a Label component)

        Parameters:
        propnm - the property name. If empty (""), null is assumed.
        Since:
        3.0.0
        See Also:
        getTextAs()
      • setBlankPreserved

        public void setBlankPreserved​(boolean preserve)
        Sets whether to preserve the blank text. If false, the blank text (a non-empty string consisting of whitespaces) are ignored. If true, they are converted to a label child.

        Default: false.

        Since:
        3.5.0
        See Also:
        isBlankPreserved()
      • setChildAllowedInTextAs

        public void setChildAllowedInTextAs​(boolean allowed)
        Sets whether the child component is allowed within the element. For more information, please refer to ComponentDefinition.getTextAs().
        Since:
        6.0.0
      • setDeclarationURL

        public void setDeclarationURL​(java.net.URL url)
        Sets the URI where this definition is declared.
        Parameters:
        url - the URL. If null, it means not available.
        Since:
        3.0.3
      • getTextAs

        public java.lang.String getTextAs()
        Description copied from interface: ComponentDefinition
        Returns the property name to which the text enclosed within the element (associated with this component definition) is assigned to.

        Default: null (means to create a Label component as the child)

        For example, if ComponentDefinition.getTextAs() returns null, then a Label component is created as a child of comp with the "Hi Text" value in the following example:

        <comp>
          Hi Text
        </comp>

        In other words, it is equivalent to

        <comp>
          <label value="Hi Text"/>
        </comp>

        On the other hand, if ComponentDefinition.getTextAs() returns a non-empty string, say, "content", then "Hi Text" is assigned to the content property of comp. In other words, it is equivalent to

        <comp content="Hi Text"/>
        </comp>

        It is also the same as

        <comp>
          <attribute name="content"/>
          Hi Text
          </attribute>
        </comp>

        To enable it, you can declare text-as in the component definition in lang.xml or lang-addon.xml:

        <component>
          <component-name>html</component-name>
          <text-as>content</text-as>
        ...

        Notice that it is valid to have XML fragment, including XML elements, within the element. For example,

        <html>
                <ul>
                <li forEach="apple, orange">${each}</li>
                </ul>
                </html>

        If the component allows child components, it is better not to try XML fragment as the plain text. And then, it shall return true in ComponentDefinition.isChildAllowedInTextAs(). Example, A.

        Specified by:
        getTextAs in interface ComponentDefinition
        See Also:
        ComponentDefinition.isChildAllowedInTextAs()
      • isChildAllowedInTextAs

        public boolean isChildAllowedInTextAs()
        Description copied from interface: ComponentDefinition
        Returns if a child is allowed in the text-as area. It is meaningful only if ComponentDefinition.getTextAs() is not null. If true, the text enclosed within the element is considered as text only if there is no other XML element.

        For example, <div> in the following example won't be considered as text. Rather, a div component will be created.

        <a>
          <div>...</div>
        </a>

        Default: false.

        Specified by:
        isChildAllowedInTextAs in interface ComponentDefinition
        See Also:
        ComponentDefinition.getTextAs()
      • isBlankPreserved

        public boolean isBlankPreserved()
        Description copied from interface: ComponentDefinition
        Returns whether to preserve the blank text. If false, the blank text (a non-empty string consisting of whitespaces) are ignored. If true, they are converted to a label child.

        Default: false.

        Specified by:
        isBlankPreserved in interface ComponentDefinition
      • getImplementationClass

        public java.lang.Object getImplementationClass()
        Description copied from interface: ComponentDefinition
        Returns the class (Class) or the class name (String) that implements the component.

        If a string is returned, the real class may depend on which page a component will be created to. Reason: the zscript interpreter is associated with a page and it may define classes upon evaluating a page.

        Specified by:
        getImplementationClass in interface ComponentDefinition
      • setImplementationClass

        public void setImplementationClass​(java.lang.Class<? extends Component> cls)
        Description copied from interface: ComponentDefinition
        Sets the class to implements the component.

        Note: currently, classes specified in lang.xml or lang-addon.xml must be resolved when loading the files. However, classes specified in a page (by use of class or use attributes) might be resolved later because it might be defined by zscript.

        Specified by:
        setImplementationClass in interface ComponentDefinition
      • resolveImplementationClass

        public java.lang.Class<?> resolveImplementationClass​(Page page,
                                                             java.lang.String clsnm)
                                                      throws java.lang.ClassNotFoundException
        Description copied from interface: ComponentDefinition
        Resolves and returns the class that implements the component.

        Unlike ComponentDefinition.getImplementationClass(), this method will resolve a class name (String) to a class (Class), if necessary. In addition, if the clsnm argument is specified, it is used instead of ComponentDefinition.getImplementationClass(). In other words, it overrides the default class.

        Specified by:
        resolveImplementationClass in interface ComponentDefinition
        Parameters:
        page - the page to check whether the class is defined in its interpreters. Ignored if null. This method will search the class loader of the current thread. If not found, it will search the interpreters of the specified page (Page.getLoadedInterpreters()). Note: this method won't attach the component to the specified page.
        clsnm - [optional] If specified, clsnm is used instead of ComponentDefinition.getImplementationClass(). In other words, it overrides the default class.
        Throws:
        java.lang.ClassNotFoundException - if the class not found
      • setApply

        public void setApply​(java.lang.String apply)
        Description copied from interface: ComponentDefinition
        Sets the apply attribute that is is a list of Composer class or EL expressions returning classes, class names or composer instances.
        Specified by:
        setApply in interface ComponentDefinition
        Parameters:
        apply - the attribute this is a list of Composer class or EL expressions El expressions are allowed, but self means the parent, if available; or page, if no parent at all. (Note: the component is not created yet when the apply attribute is evaluated).
      • addProperty

        public void addProperty​(java.lang.String name,
                                java.lang.String value)
        Description copied from interface: ComponentDefinition
        Adds a property initializer. It will initialize a component when created with is definition.
        Specified by:
        addProperty in interface ComponentDefinition
        Parameters:
        name - the member name. The component must have a valid setter for it.
        value - the value. It might contain expressions (${}).
      • evalProperties

        public java.util.Map<java.lang.String,​java.lang.Object> evalProperties​(java.util.Map<java.lang.String,​java.lang.Object> propmap,
                                                                                     Page owner,
                                                                                     Component parent)
        Description copied from interface: ComponentDefinition
        Evaluates and retrieves properties to the specified map.
        Specified by:
        evalProperties in interface ComponentDefinition
        Parameters:
        propmap - the map to store the retrieved properties. If null, a HashMap instance is created. (String name, Object value).
        owner - the owner page; used if parent is null
        parent - the parent
      • addMold

        public void addMold​(java.lang.String name,
                            java.lang.String widgetClass)
        Description copied from interface: ComponentDefinition
        Adds a mold.
        Specified by:
        addMold in interface ComponentDefinition
        Parameters:
        name - the mold name.
        widgetClass - the widget class (a.k.a., name). Ignored if null.
      • getMoldNames

        public java.util.Collection<java.lang.String> getMoldNames()
        Description copied from interface: ComponentDefinition
        Returns a readonly collection of the names of the mold.
        Specified by:
        getMoldNames in interface ComponentDefinition
      • getDefaultWidgetClass

        public java.lang.String getDefaultWidgetClass​(Component comp)
        Description copied from interface: ComponentDefinition
        Returns the default widget class, or null if not available.
        Specified by:
        getDefaultWidgetClass in interface ComponentDefinition
        Parameters:
        comp - the component used to evaluate EL expression, if any, when retrieving the widget class. Ignored if null.
      • setDefaultWidgetClass

        public void setDefaultWidgetClass​(java.lang.String widgetClass)
        Description copied from interface: ComponentDefinition
        Sets the default widget class.
        Specified by:
        setDefaultWidgetClass in interface ComponentDefinition
        Parameters:
        widgetClass - the name of the widget class (JavaScript class), including the package name.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object