001 package com.oxygenxml.validate.nvdl; 002 003 import org.xml.sax.SAXException; 004 005 import com.thaiopensource.validate.Schema; 006 007 /** 008 * Validate no result action. 009 * 010 */ 011 class ValidateAction extends NoResultAction { 012 /** 013 * The schema to validate with. 014 */ 015 private final Schema schema; 016 017 /** 018 * Creates a validate action. 019 * @param modeUsage The mode usage. 020 * @param schema The schema. 021 */ 022 ValidateAction(ModeUsage modeUsage, Schema schema) { 023 super(modeUsage); 024 this.schema = schema; 025 } 026 027 /** 028 * Perform this action on the section state. 029 * @param state the section state. 030 */ 031 void perform(SectionState state) throws SAXException { 032 state.addValidator(schema, getModeUsage()); 033 } 034 035 /** 036 * Get a new validate action with a mode usage with the current mode changed. 037 * This is useful when we have modes extending other modes as we need to get 038 * the actions from the base mode as actions on the new mode. 039 */ 040 NoResultAction changeCurrentMode(Mode mode) { 041 return new ValidateAction(getModeUsage().changeCurrentMode(mode), schema); 042 } 043 044 /** 045 * Checks if this action is equal with a given action. 046 */ 047 public boolean equals(Object obj) { 048 return super.equals(obj) && schema.equals(((ValidateAction)obj).schema); 049 } 050 051 /** 052 * Computes a hashCode. 053 */ 054 public int hashCode() { 055 return super.hashCode() ^ schema.hashCode(); 056 } 057 }