Class MacroDefinitionTransformerImpl

java.lang.Object
com.atlassian.confluence.impl.content.render.xhtml.MacroDefinitionTransformerImpl
All Implemented Interfaces:
MacroDefinitionTransformer

public final class MacroDefinitionTransformerImpl extends Object implements MacroDefinitionTransformer
An implementation of MacroDefinitionTransformer based upon a ContentTransformerFactory.
Since:
7.6
See Also:
  • Constructor Details

    • MacroDefinitionTransformerImpl

      public MacroDefinitionTransformerImpl(ContentTransformerFactory contentTransformerFactory)
  • Method Details

    • updateMacroDefinitions

      public String updateMacroDefinitions(String storageFragment, ConversionContext context, MacroDefinitionUpdater updater) throws XhtmlException
      Description copied from interface: MacroDefinitionTransformer
      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;
              }
          }));
       
      Specified by:
      updateMacroDefinitions in interface MacroDefinitionTransformer
      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

      public String replaceMacroDefinitionsWithString(String storageFragment, ConversionContext context, MacroDefinitionReplacer replacer) throws XhtmlException
      Description copied from interface: MacroDefinitionTransformer
      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); } }));
      Specified by:
      replaceMacroDefinitionsWithString in interface MacroDefinitionTransformer
      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

      public void handleMacroDefinitions(String storageFragment, ConversionContext context, MacroDefinitionHandler handler) throws XhtmlException
      Description copied from interface: MacroDefinitionTransformer
      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();
       
      Specified by:
      handleMacroDefinitions in interface MacroDefinitionTransformer
      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

      public void handleMacroDefinitions(String storageFragment, ConversionContext context, MacroDefinitionHandler handler, MacroDefinitionMarshallingStrategy strategy) throws XhtmlException
      Description copied from interface: MacroDefinitionTransformer
      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();
       
      Specified by:
      handleMacroDefinitions in interface MacroDefinitionTransformer
      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.