001    package com.oxygenxml.validate.nvdl;
002    
003    import org.xml.sax.ContentHandler;
004    
005    /**
006     * Result attach action.
007     * Attaches elements to the section.
008     */
009    class AttachAction extends ResultAction {
010      /**
011       * Creates an attach action with a given mode usage.
012       * @param modeUsage The mode usage.
013       */
014      AttachAction(ModeUsage modeUsage) {
015        super(modeUsage);
016      }
017    
018      /**
019       * Performs this action on the section state.
020       * 
021       * @param handler ???
022       * @param state The section state.
023       */
024      void perform(ContentHandler handler, SectionState state) {
025        final ModeUsage modeUsage = getModeUsage();
026        if (handler != null) {
027          state.addActiveHandler(handler, modeUsage);
028        } else {
029          state.addAttributeValidationModeUsage(modeUsage);
030        }
031        state.addChildMode(modeUsage, handler);
032      }
033    
034      /**
035       * Get a new attach action with a mode usage with the current mode changed.
036       * This is useful when we have modes extending other modes as we need to get
037       * the actions from the base mode as actions on the new mode.
038       */
039      ResultAction changeCurrentMode(Mode mode) {
040        return new AttachAction(getModeUsage().changeCurrentMode(mode));
041      }
042    }