001    package com.oxygenxml.validate.nvdl;
002    
003    import org.xml.sax.ContentHandler;
004    
005    /**
006     * Attach place holder result action. 
007     * This action replaces a section with a placeholder element.
008     */
009    class AttachPlaceholderAction extends ResultAction {
010      /**
011       * Creates an attachPlaceHolder action with a given mode usage.
012       * 
013       * @param modeUsage
014       *          The action mode usage.
015       */
016      AttachPlaceholderAction(ModeUsage modeUsage) {
017        super(modeUsage);
018      }
019    
020      /**
021       * Perform this action.
022       * 
023       * @param handler
024       *          the handler this action is performed on
025       * @param state
026       *          the section state.
027       */
028      void perform(ContentHandler handler, SectionState state) {
029        state.attachPlaceholder(getModeUsage(), handler);
030      }
031    
032      /**
033       * Get a new attach place holder action with a mode usage with the current mode changed.
034       * This is useful when we have modes extending other modes as we need to get
035       * the actions from the base mode as actions on the new mode.
036       */
037      ResultAction changeCurrentMode(Mode mode) {
038        return new AttachPlaceholderAction(getModeUsage().changeCurrentMode(mode));
039      }
040    }