001    package com.oxygenxml.validate.nvdl;
002    
003    /**
004     * Base action class. 
005     */
006    abstract class Action {
007      /**
008       * Use mode when performing this action.
009       */
010      private final ModeUsage modeUsage;
011    
012      /**
013       * Creates an action with a given mode usage.
014       * @param modeUsage The mode usage.
015       */
016       Action(ModeUsage modeUsage) {
017         this.modeUsage = modeUsage;
018       }
019    
020       /**
021        * Getter for the mode usage.
022        * @return The mode usage for this action.
023        */
024       ModeUsage getModeUsage() {
025         return modeUsage;
026       }
027    
028       /**
029        * Checks for equality, we need to have the same action class with the same modeUsage.
030        */
031       public boolean equals(Object obj) {
032         return obj != null && obj.getClass() == getClass() && ((Action)obj).modeUsage.equals(modeUsage);
033       }
034    
035       /**
036        * Computes a hashCode for this action.
037        */
038      public int hashCode() {
039        return getClass().hashCode() ^ modeUsage.hashCode();
040      }
041    }