Package org.zkoss.zk.ui.ext

## Interface Macro

- All Superinterfaces:
    `AfterCompose`, `DynamicPropertied`, `IdSpace`, `Scope`
  All Known Implementing Classes:
    `HtmlMacroComponent`, `XmlMacroComponent`

      public interface Macro
      extends AfterCompose, IdSpace, DynamicPropertied

  Implemented with `Component` to represent a macro component.
  Author:
    tomyeh

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.String` | `getMacroURI()` | Returns the macro URI.
    `boolean` | `isInline()` | Returns whether this is an inline macro.
    `void` | `recreate()` | Detaches all child components and then recreate them.
    `boolean` | `setInlineParent​(Component parent, Component beforeSibling)` | Sets the parent to the given one and insert the children of the inline macro right before the given sibling (beforeSibling).
    `void` | `setMacroURI​(java.lang.String uri)` | Sets the macro URI.

    - ### Methods inherited from interface org.zkoss.zk.ui.ext.AfterCompose

      `afterCompose`

    - ### Methods inherited from interface org.zkoss.zk.ui.ext.DynamicPropertied

      `getDynamicProperties, getDynamicProperty, hasDynamicProperty, setDynamicProperty`

    - ### Methods inherited from interface org.zkoss.zk.ui.IdSpace

      `getFellow, getFellow, getFellowIfAny, getFellowIfAny, getFellows, hasFellow, hasFellow`

    - ### Methods inherited from interface org.zkoss.zk.ui.ext.Scope

      `addScopeListener, getAttribute, getAttribute, getAttributes, hasAttribute, hasAttribute, removeAttribute, removeAttribute, removeScopeListener, setAttribute, setAttribute`

- - ### Method Detail

    - #### setMacroURI

          void setMacroURI​(java.lang.String uri)

      Sets the macro URI. It affects only this component.

      Note: this method calls `recreate()` automatically if uri is changed.

      Parameters:
        `uri` - the URI of this macro. If null, the default is used.

    - #### getMacroURI

          java.lang.String getMacroURI()

      Returns the macro URI.

      If `setMacroURI(java.lang.String)` wasn't called, it returns the URI defined in the macro definition.

      Since:
        3.6.0

    - #### recreate

          void recreate()

      Detaches all child components and then recreate them.

      It is used if you have assigned new values to dynamic properties and want to re-create child components to reflect the new values. Note: it is convenient but the performance is better if you can manipulate only the child components that need to be changed. Refer to ZK Developer's Reference for details.

    - #### isInline

          boolean isInline()

      Returns whether this is an inline macro. The only way to create an inline macro is by use of `ComponentDefinition.newInstance(org.zkoss.zk.ui.Page, java.lang.String)`.
      Since:
        2.4.0

    - #### setInlineParent

          boolean setInlineParent​(Component parent,
                                  Component beforeSibling)

      Sets the parent to the given one and insert the children of the inline macro right before the given sibling (beforeSibling).

      This method is used only internally.

      Notice that when `AbstractComponent.insertBefore(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.Component)` is called to insert an inline macro (`isInline()`), the invocation will be forwarded to this method. It is called only `isInline()` is true.

      Parameters:
        `parent` - the parent
        `beforeSibling` - a child of the parent that the macro component will be inserted before
      Returns:
        if it has been added successfully
      Throws:
        `java.lang.IllegalStateException` - if `isInline()` is false.
      Since:
        5.0.4