Class CmsSetNextRule

java.lang.Object
org.apache.commons.digester3.Rule
org.opencms.configuration.CmsSetNextRule

public class CmsSetNextRule extends org.apache.commons.digester3.Rule
Rule implementation that invokes a method on the (top-1) (parent) object, passing as implicit first argument of type CmsObject and as a further argument the top stack instance.

If no subsequent CallParamRule are matched for CmsObject which is the case in the OpenCms usage the first argument CmsObject will be null at method invocation time.

This is an alternative for SetNextRule if a parent to child-property configuration has been done but the setter for that property requires additional arguments that are only available at real runtime of the application.

The top stack element (child) that has to be set is matched against the constructor given Class[]: It is used as argument on the position where the Class[] has an instance of the same type as it's own Class.

Since:
6.0.0
See Also:
  • CallMethodRule
  • SetNextRule
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected String
    The body text collected from this element.
    protected String
    The method name to call on the parent object.
    protected int
    The number of parameters to collect from MethodParam rules.
    protected Class<?>[]
    The parameter types of the parameters to be collected.
    protected boolean
    Should MethodUtils.invokeExactMethod be used for reflection.
  • Constructor Summary

    Constructors
    Constructor
    Description
    CmsSetNextRule(String methodName, Class<?> clazz)
    Construct a "call method" rule with the specified method name.
    CmsSetNextRule(String methodName, Class<?>[] clazzes)
    Construct a "call method" rule with the specified method name and additional parameters.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    begin(String namespace, String name, Attributes attributes)
    Process the start of this element.
    void
    body(String namespace, String name, String bodyText)
    Process the body text of this element.
    void
    end(String namespace, String name)
    Process the end of this element.
    void
    finish(String namespace, String name)
    Clean up after parsing is complete.
    boolean
    Returns true if MethodUtils.invokeExactMethod shall be used for the reflection.
    protected void
    Subclasses may override this method to perform additional processing of the invoked method's result.
    void
    setDigester(org.apache.commons.digester3.Digester aDigester)
    Set the associated digester.
    void
    setUseExactMatch(boolean useExactMatch)
    Set the value to use for MethodUtils.invokeExactMethod to use.
    Returns a printable version of this Rule.

    Methods inherited from class org.apache.commons.digester3.Rule

    finish, getDigester, getNamespaceURI, setNamespaceURI

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • m_bodyText

      protected String m_bodyText
      The body text collected from this element.
    • m_methodName

      protected String m_methodName
      The method name to call on the parent object.
    • m_paramCount

      protected int m_paramCount
      The number of parameters to collect from MethodParam rules. If this value is zero, a single parameter will be collected from the body of this element.
    • m_paramTypes

      protected Class<?>[] m_paramTypes
      The parameter types of the parameters to be collected.
    • m_useExactMatch

      protected boolean m_useExactMatch
      Should MethodUtils.invokeExactMethod be used for reflection.
  • Constructor Details

    • CmsSetNextRule

      public CmsSetNextRule(String methodName, Class<?> clazz)
      Construct a "call method" rule with the specified method name.

      The 1st argument of the method will be of type CmsObject. It's value will remain null (except subsequent CallParamRule would put a value which currently is impossible at initialization time within OpenCms).

      The 2nd argument will be the top-stack element at digestion time. That instance has to be of the same type as the clazz argument to succeed.

      Parameters:
      methodName - Method name of the parent method to call
      clazz - The class of the top-stack element (child) that will be present at digestion-time
    • CmsSetNextRule

      public CmsSetNextRule(String methodName, Class<?>[] clazzes)
      Construct a "call method" rule with the specified method name and additional parameters.

      The 1st argument of the method will be of type CmsObject. It's value will remain null (except subsequent CallParamRule would put a value which currently is impossible at initialization time within OpenCms).

      The further arguments will be filled by the subsequent CallParamRule matches. If the first Class in the given array matches the top stack element (child) that value will be used. If at digestion time no parameters are found for the given types their values for invocation of the method remain null.

      Parameters:
      methodName - Method name of the parent method to call
      clazzes - an array with all parameter types for the method to invoke at digestion time
  • Method Details

    • begin

      public void begin(String namespace, String name, Attributes attributes) throws Exception
      Process the start of this element.
      Overrides:
      begin in class org.apache.commons.digester3.Rule
      Parameters:
      attributes - The attribute list for this element
      namespace - the namespace URI of the matching element, or an empty string if the parser is not namespace aware or the element has no namespace
      name - the local name if the parser is namespace aware, or just the element name otherwise
      Throws:
      Exception - if something goes wrong
    • body

      public void body(String namespace, String name, String bodyText) throws Exception
      Process the body text of this element.

      Overrides:
      body in class org.apache.commons.digester3.Rule
      Parameters:
      bodyText - The body text of this element
      namespace - the namespace URI of the matching element, or an empty string if the parser is not namespace aware or the element has no namespace
      name - the local name if the parser is namespace aware, or just the element name otherwise
      Throws:
      Exception - if something goes wrong
    • end

      public void end(String namespace, String name) throws Exception
      Process the end of this element.

      Overrides:
      end in class org.apache.commons.digester3.Rule
      Parameters:
      namespace - the namespace URI of the matching element, or an empty string if the parser is not namespace aware or the element has no namespace
      name - the local name if the parser is namespace aware, or just the element name otherwise
      Throws:
      Exception - if something goes wrong
    • finish

      public void finish(String namespace, String name) throws Exception
      Clean up after parsing is complete.

      Parameters:
      namespace - the namespace URI of the matching element, or an empty string if the parser is not namespace aware or the element has no namespace
      name - the local name if the parser is namespace aware, or just the element name otherwise
      Throws:
      Exception - if something goes wrong
    • getUseExactMatch

      public boolean getUseExactMatch()
      Returns true if MethodUtils.invokeExactMethod shall be used for the reflection.

      Returns:
      true if MethodUtils.invokeExactMethod shall be used for the reflection.
    • setDigester

      public void setDigester(org.apache.commons.digester3.Digester aDigester)
      Set the associated digester.

      The digester gets assigned to use the OpenCms conform logging If needed, this class loads the parameter classes from their names.

      Overrides:
      setDigester in class org.apache.commons.digester3.Rule
      Parameters:
      aDigester - the associated digester to set
    • setUseExactMatch

      public void setUseExactMatch(boolean useExactMatch)
      Set the value to use for MethodUtils.invokeExactMethod to use.

      Parameters:
      useExactMatch - the value to use for MethodUtils.invokeExactMethod to use
    • toString

      public String toString()
      Returns a printable version of this Rule.

      Overrides:
      toString in class Object
      Returns:
      a printable version of this Rule
    • processMethodCallResult

      protected void processMethodCallResult(Object result)
      Subclasses may override this method to perform additional processing of the invoked method's result.

      Parameters:
      result - the Object returned by the method invoked, possibly null