1 /* 2 * Portions of this software was developed by employees of the National Institute 3 * of Standards and Technology (NIST), an agency of the Federal Government and is 4 * being made available as a public service. Pursuant to title 17 United States 5 * Code Section 105, works of NIST employees are not subject to copyright 6 * protection in the United States. This software may be subject to foreign 7 * copyright. Permission in the United States and in foreign countries, to the 8 * extent that NIST may hold copyright, to use, copy, modify, create derivative 9 * works, and distribute this software and its documentation without fee is hereby 10 * granted on a non-exclusive basis, provided that this notice and disclaimer 11 * of warranty appears in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER 14 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY 15 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM 17 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE 18 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT 19 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, 20 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, 21 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, 22 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR 23 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT 24 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER. 25 */ 26 27 package gov.nist.secauto.metaschema.core.model.constraint; 28 29 import gov.nist.secauto.metaschema.core.model.IAssemblyDefinition; 30 import gov.nist.secauto.metaschema.core.model.IFieldDefinition; 31 import gov.nist.secauto.metaschema.core.model.IFlagDefinition; 32 import gov.nist.secauto.metaschema.core.model.ModelWalker; 33 34 // TODO: remove if unused 35 abstract class ConstraintVisitingModelWalker<DATA> 36 extends ModelWalker<DATA> { 37 38 @Override 39 protected boolean visit(IAssemblyDefinition def, DATA data) { 40 boolean retval = super.visit(def, data); 41 walkConstraints(def, data); 42 return retval; 43 } 44 45 /** 46 * A callback called when visiting the {@code constraint} associated with 47 * {@code def}. 48 * 49 * @param definition 50 * the definition the constraint is associated with 51 * @param constraint 52 * the constraint associated with the definition 53 * @param data 54 * other data to use for processing 55 */ 56 protected void visit(IAssemblyDefinition definition, IAllowedValuesConstraint constraint, DATA data) { // NOPMD - 57 // intentional 58 // subclasses may override this method to process the constraint 59 } 60 61 /** 62 * A callback called when visiting the {@code constraint} associated with 63 * {@code def}. 64 * 65 * @param definition 66 * the definition the constraint is associated with 67 * @param constraint 68 * the constraint associated with the definition 69 * @param data 70 * other data to use for processing 71 */ 72 protected void visit(IAssemblyDefinition definition, ICardinalityConstraint constraint, DATA data) { // NOPMD - 73 // intentional 74 // subclasses may override this method to process the constraint 75 } 76 77 /** 78 * A callback called when visiting the {@code constraint} associated with 79 * {@code def}. 80 * 81 * @param definition 82 * the definition the constraint is associated with 83 * @param constraint 84 * the constraint associated with the definition 85 * @param data 86 * other data to use for processing 87 */ 88 protected void visit(IAssemblyDefinition definition, IExpectConstraint constraint, DATA data) { // NOPMD - intentional 89 // subclasses may override this method to process the constraint 90 } 91 92 /** 93 * A callback called when visiting the {@code constraint} associated with 94 * {@code def}. 95 * 96 * @param definition 97 * the definition the constraint is associated with 98 * @param constraint 99 * the constraint associated with the definition 100 * @param data 101 * other data to use for processing 102 */ 103 protected void visit(IAssemblyDefinition definition, IIndexConstraint constraint, DATA data) { // NOPMD - intentional 104 // subclasses may override this method to process the constraint 105 } 106 107 /** 108 * A callback called when visiting the {@code constraint} associated with 109 * {@code def}. 110 * 111 * @param definition 112 * the definition the constraint is associated with 113 * @param constraint 114 * the constraint associated with the definition 115 * @param data 116 * other data to use for processing 117 */ 118 protected void visit(IAssemblyDefinition definition, IIndexHasKeyConstraint constraint, // NOPMD - intentional 119 DATA data) { 120 // subclasses may override this method to process the constraint 121 } 122 123 /** 124 * A callback called when visiting the {@code constraint} associated with 125 * {@code def}. 126 * 127 * @param definition 128 * the definition the constraint is associated with 129 * @param constraint 130 * the constraint associated with the definition 131 * @param data 132 * other data to use for processing 133 */ 134 protected void visit(IAssemblyDefinition definition, IMatchesConstraint constraint, // NOPMD - intentional 135 DATA data) { 136 // subclasses may override this method to process the constraint 137 } 138 139 /** 140 * A callback called when visiting the {@code constraint} associated with 141 * {@code def}. 142 * 143 * @param definition 144 * the definition the constraint is associated with 145 * @param constraint 146 * the constraint associated with the definition 147 * @param data 148 * other data to use for processing 149 */ 150 protected void visit(IAssemblyDefinition definition, IUniqueConstraint constraint, DATA data) { // NOPMD - intentional 151 // subclasses may override this method to process the constraint 152 } 153 154 @Override 155 protected boolean visit(IFieldDefinition def, DATA data) { 156 boolean retval = super.visit(def, data); 157 walkConstraints(def, data); 158 return retval; 159 } 160 161 /** 162 * A callback called when visiting the {@code constraint} associated with 163 * {@code def}. 164 * 165 * @param definition 166 * the definition the constraint is associated with 167 * @param constraint 168 * the constraint associated with the definition 169 * @param data 170 * other data to use for processing 171 */ 172 protected void visit(IFieldDefinition definition, IAllowedValuesConstraint constraint, // NOPMD - intentional 173 DATA data) { 174 // subclasses may override this method to process the constraint 175 } 176 177 /** 178 * A callback called when visiting the {@code constraint} associated with 179 * {@code def}. 180 * 181 * @param definition 182 * the definition the constraint is associated with 183 * @param constraint 184 * the constraint associated with the definition 185 * @param data 186 * other data to use for processing 187 */ 188 protected void visit(IFieldDefinition definition, IExpectConstraint constraint, DATA data) { // NOPMD - intentional 189 // subclasses may override this method to process the constraint 190 } 191 192 /** 193 * A callback called when visiting the {@code constraint} associated with 194 * {@code def}. 195 * 196 * @param definition 197 * the definition the constraint is associated with 198 * @param constraint 199 * the constraint associated with the definition 200 * @param data 201 * other data to use for processing 202 */ 203 protected void visit(IFieldDefinition definition, IIndexHasKeyConstraint constraint, // NOPMD - intentional 204 DATA data) { 205 // subclasses may override this method to process the constraint 206 } 207 208 /** 209 * A callback called when visiting the {@code constraint} associated with 210 * {@code def}. 211 * 212 * @param definition 213 * the definition the constraint is associated with 214 * @param constraint 215 * the constraint associated with the definition 216 * @param data 217 * other data to use for processing 218 */ 219 protected void visit(IFieldDefinition definition, IMatchesConstraint constraint, DATA data) { // NOPMD - intentional 220 // subclasses may override this method to process the constraint 221 } 222 223 @Override 224 protected void visit(IFlagDefinition def, DATA data) { 225 walkConstraints(def, data); 226 } 227 228 /** 229 * A callback called when visiting the {@code constraint} associated with 230 * {@code def}. 231 * 232 * @param definition 233 * the definition the constraint is associated with 234 * @param constraint 235 * the constraint associated with the definition 236 * @param data 237 * other data to use for processing 238 */ 239 protected void visit(IFlagDefinition definition, IAllowedValuesConstraint constraint, // NOPMD - intentional 240 DATA data) { 241 // subclasses may override this method to process the constraint 242 } 243 244 /** 245 * A callback called when visiting the {@code constraint} associated with 246 * {@code def}. 247 * 248 * @param definition 249 * the definition the constraint is associated with 250 * @param constraint 251 * the constraint associated with the definition 252 * @param data 253 * other data to use for processing 254 */ 255 protected void visit(IFlagDefinition definition, IExpectConstraint constraint, DATA data) { // NOPMD - intentional 256 // subclasses may override this method to process the constraint 257 } 258 259 /** 260 * A callback called when visiting the {@code constraint} associated with 261 * {@code def}. 262 * 263 * @param definition 264 * the definition the constraint is associated with 265 * @param constraint 266 * the constraint associated with the definition 267 * @param data 268 * other data to use for processing 269 */ 270 protected void visit(IFlagDefinition definition, IIndexHasKeyConstraint constraint, // NOPMD - intentional 271 DATA data) { 272 // subclasses may override this method to process the constraint 273 } 274 275 /** 276 * A callback called when visiting the {@code constraint} associated with 277 * {@code def}. 278 * 279 * @param definition 280 * the definition the constraint is associated with 281 * @param constraint 282 * the constraint associated with the definition 283 * @param data 284 * other data to use for processing 285 */ 286 protected void visit(IFlagDefinition definition, IMatchesConstraint constraint, DATA data) { // NOPMD - intentional 287 // subclasses may override this method to process the constraint 288 } 289 290 /** 291 * Walk the constraints associated with the {@code definition}. 292 * 293 * @param definition 294 * the definition the constraints to walk are associated with 295 * @param data 296 * other data to use for processing 297 */ 298 protected void walkConstraints(IAssemblyDefinition definition, DATA data) { 299 for (IAllowedValuesConstraint constraint : definition.getAllowedValuesConstraints()) { 300 visit(definition, constraint, data); 301 } 302 303 for (IMatchesConstraint constraint : definition.getMatchesConstraints()) { 304 visit(definition, constraint, data); 305 } 306 307 for (IExpectConstraint constraint : definition.getExpectConstraints()) { 308 visit(definition, constraint, data); 309 } 310 311 for (IUniqueConstraint constraint : definition.getUniqueConstraints()) { 312 visit(definition, constraint, data); 313 } 314 315 for (IIndexConstraint constraint : definition.getIndexConstraints()) { 316 visit(definition, constraint, data); 317 } 318 319 for (IIndexHasKeyConstraint constraint : definition.getIndexHasKeyConstraints()) { 320 visit(definition, constraint, data); 321 } 322 323 for (ICardinalityConstraint constraint : definition.getHasCardinalityConstraints()) { 324 visit(definition, constraint, data); 325 } 326 } 327 328 /** 329 * Walk the constraints associated with the {@code definition}. 330 * 331 * @param definition 332 * the definition the constraints to walk are associated with 333 * @param data 334 * other data to use for processing 335 */ 336 protected void walkConstraints(IFieldDefinition definition, DATA data) { 337 for (IAllowedValuesConstraint constraint : definition.getAllowedValuesConstraints()) { 338 visit(definition, constraint, data); 339 } 340 341 for (IMatchesConstraint constraint : definition.getMatchesConstraints()) { 342 visit(definition, constraint, data); 343 } 344 345 for (IExpectConstraint constraint : definition.getExpectConstraints()) { 346 visit(definition, constraint, data); 347 } 348 349 for (IIndexHasKeyConstraint constraint : definition.getIndexHasKeyConstraints()) { 350 visit(definition, constraint, data); 351 } 352 } 353 354 /** 355 * Walk the constraints associated with the {@code definition}. 356 * 357 * @param definition 358 * the definition the constraints to walk are associated with 359 * @param data 360 * other data to use for processing 361 */ 362 protected void walkConstraints(IFlagDefinition definition, DATA data) { 363 for (IAllowedValuesConstraint constraint : definition.getAllowedValuesConstraints()) { 364 visit(definition, constraint, data); 365 } 366 367 for (IMatchesConstraint constraint : definition.getMatchesConstraints()) { 368 visit(definition, constraint, data); 369 } 370 371 for (IExpectConstraint constraint : definition.getExpectConstraints()) { 372 visit(definition, constraint, data); 373 } 374 375 for (IIndexHasKeyConstraint constraint : definition.getIndexHasKeyConstraints()) { 376 visit(definition, constraint, data); 377 } 378 } 379 380 }