001 package com.oxygenxml.validate.nvdl; 002 003 /** 004 * Possible values for match, that is represented as a list of elements and attributes. 005 */ 006 class ElementsOrAttributes { 007 /** 008 * Flag for none. 009 */ 010 private static final int NONE_FLAG = 0; 011 012 /** 013 * Flag for elements. 014 */ 015 private static final int ELEMENTS_FLAG = 01; 016 017 /** 018 * Flag for attributes. 019 */ 020 private static final int ATTRIBUTES_FLAG = 02; 021 022 // Define constants for all possible values. 023 /** 024 * Neither elements nor attributes specified. 025 */ 026 static final ElementsOrAttributes NEITHER = new ElementsOrAttributes(NONE_FLAG); 027 /** 028 * Only elements is specified. 029 */ 030 static final ElementsOrAttributes ELEMENTS = new ElementsOrAttributes(ELEMENTS_FLAG); 031 032 /** 033 * Only attributes is specified. 034 */ 035 static final ElementsOrAttributes ATTRIBUTES = new ElementsOrAttributes(ATTRIBUTES_FLAG); 036 037 /** 038 * Bothe elements and attributes are specified. 039 */ 040 static final ElementsOrAttributes BOTH = new ElementsOrAttributes(ELEMENTS_FLAG|ATTRIBUTES_FLAG); 041 042 /** 043 * All possible values. 044 */ 045 private static final ElementsOrAttributes values[] = { 046 NEITHER, 047 ELEMENTS, 048 ATTRIBUTES, 049 BOTH 050 }; 051 052 /** 053 * Stores this instance flags. 054 */ 055 private int flags = NONE_FLAG; 056 057 /** 058 * Creates an instance with the given flags. 059 * @param flags 060 */ 061 private ElementsOrAttributes(int flags) { 062 this.flags = flags; 063 } 064 065 /** 066 * Get the value after adding elements to the current instance. 067 * @return The value that matches also elements. 068 */ 069 ElementsOrAttributes addElements() { 070 return values[flags | ELEMENTS_FLAG]; 071 } 072 073 /** 074 * Get the value after adding attributes to the current instance. 075 * @return The value that matches also attributes. 076 */ 077 ElementsOrAttributes addAttributes() { 078 return values[flags | ATTRIBUTES_FLAG]; 079 } 080 081 /** 082 * Checks whether the attributes are matched or not. 083 * @return true is attributes are matched. 084 */ 085 boolean containsAttributes() { 086 return (flags & ATTRIBUTES_FLAG) != 0; 087 } 088 089 /** 090 * Checks whether the elements are matched or not. 091 * @return true is elements are matched. 092 */ 093 boolean containsElements() { 094 return (flags & ELEMENTS_FLAG) != 0; 095 } 096 }