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 }