Interface MacroDefinitionTransformer

All Known Subinterfaces:
XhtmlContent
All Known Implementing Classes:
DefaultXhtmlContent, MacroDefinitionTransformerImpl

public interface MacroDefinitionTransformer
Provides oprations fo transforming macro definitions, typically used by macro developers to obtain and optionally modify macro tags (as MacroDefinition objects) in a page of macro body content.
Since:
7.6
See Also:
  • Method Details

    • updateMacroDefinitions

      String updateMacroDefinitions(String storageFragment, ConversionContext context, MacroDefinitionUpdater updater) throws XhtmlException
      Updates MacroDefinitions in the supplied storageFragment.
       // Changes the name of all "mice" macros to "cheese".
       page.setBodyAsString(xhtmlContent.updateMacroDefinitions(page.getBodyAsString(), context, new XhtmlContent.MacroDefinitionUpdater()
          {
              public MacroDefinition update(MacroDefinition macroDefinition)
              {
                  if ("mice".equals(macroDefinition.getName()))
                      macroDefinition.setName("cheese");
      
                  return macroDefinition;
              }
          }));
       
      Parameters:
      storageFragment - or more typically the storage representation of a complete ContentEntityObject which might contain macro definitions.
      context - for the conversion.
      updater - which is called to update each MacroDefinition found.
      Returns:
      the storage representation of the modified fragment.
      Throws:
      XhtmlException - if there was a problem reading the storage fragment, creating the MacroDefinition or creating the modified fragment.
    • replaceMacroDefinitionsWithString

      String replaceMacroDefinitionsWithString(String storageFragment, ConversionContext context, MacroDefinitionReplacer replacer) throws XhtmlException
      Replaces MacroDefinitions in the supplied storageFragment with a String. Use {link #updateMacroDefinitions} rather than this method if you wish to replace or update one definition with another.
       // Replaces "cheese" macros with some XHTML.
       page.setBodyAsString(xhtmlContent.replaceMacroDefinitionsWithString(page.getBodyAsString(), context, new MacroDefinitionReplacer()
          {
              public String replace(MacroDefinition macroDefinition) throws XhtmlException
              {
                  if ("cheese".equals(macroDefinition.getName()))
                      return "

      I hate cheese!

      "; return xhtmlContent.convertMacroDefinitionToStorage(macroDefinition, context); } }));
      Parameters:
      storageFragment - or more typically the storage representation of a complete ContentEntityObject which might contain macro definitions.
      context - for the conversion.
      replacer - which is called to replace each MacroDefinition found with a replacement in storage format (typically XHTML).
      Returns:
      the storage representation of the modified fragment.
      Throws:
      XhtmlException - if there was a problem reading the storage fragment, creating the MacroDefinition or creating the modified fragment.
    • handleMacroDefinitions

      void handleMacroDefinitions(String storageFragment, ConversionContext context, MacroDefinitionHandler handler) throws XhtmlException
      Perform an operation on MacroDefinitions in the supplied storageFragment without making changes to the storage representation.
       // Finds the last macro on a page
       final AtomicReference atomicMacroDefinition = new AtomicReference();
       xhtmlContent.handleMacroDefinitions(page.getBodyAsString(), context, new MacroDefinitionHandler()
          {
              public void handle(MacroDefinition macroDefinition)
              {
                  atomicMacroDefinition.set(macroDefinition);
              }
          });
       MacroDefinition lastMacro = atomicMacroDefinition.get();
       
      Parameters:
      storageFragment - or more typically the storage representation of a complete ContentEntityObject which might contain macro definitions.
      context - for the conversion.
      handler - which is called each MacroDefinition found.
      Throws:
      XhtmlException - if there was a problem reading the storage fragment or creating the MacroDefinition.
    • handleMacroDefinitions

      void handleMacroDefinitions(String storageFragment, ConversionContext context, MacroDefinitionHandler handler, MacroDefinitionMarshallingStrategy strategy) throws XhtmlException
      Perform an operation on MacroDefinitions in the supplied storageFragment, with optional changes to the storage representation defined by the MacroDefinitionMarshallingStrategy.
       // Finds the last macro on a page, maintaining any nested macros within the MacroDefinition body
       final AtomicReference atomicMacroDefinition = new AtomicReference();
       xhtmlContent.handleMacroDefinitions(page.getBodyAsString(), context, new MacroDefinitionHandler()
          {
              public void handle(MacroDefinition macroDefinition)
              {
                  atomicMacroDefinition.set(macroDefinition);
              }
          }, MacroDefinitionMarshallingStrategy.MARSHALL_MACRO);
       MacroDefinition lastMacro = atomicMacroDefinition.get();
       
      Parameters:
      storageFragment - or more typically the storage representation of a complete ContentEntityObject which might contain macro definitions.
      context - for the conversion.
      handler - which is called each MacroDefinition found.
      strategy - the strategy used to transform the body of the handled macros
      Throws:
      XhtmlException - if there was a problem reading the storage fragment or creating the MacroDefinition.