001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.krad.datadictionary.validation.constraint;
017
018 import org.kuali.rice.core.api.config.property.ConfigurationService;
019 import org.kuali.rice.krad.service.KRADServiceLocator;
020 import org.kuali.rice.krad.uif.UifConstants;
021
022 import java.util.ArrayList;
023 import java.util.List;
024
025 /**
026 * Parent abstract class that allows additional characters to be allowed in child constraint
027 * character sets, see AlphaNumericPatternConstraint, among others for example.
028 *
029 * By setting an allow flag to true you are allowing that character as a valid character in the set.
030 * AllowAll set to true will allow all characters which have a flag to be allowed in the set.
031 *
032 * @author Kuali Rice Team (rice.collab@kuali.org)
033 */
034 public abstract class AllowCharacterConstraint extends ValidCharactersPatternConstraint {
035 protected boolean allowWhitespace = false;
036 protected boolean omitNewline = false;
037 protected boolean allowUnderscore = false;
038 protected boolean allowPeriod = false;
039 protected boolean allowParenthesis = false;
040 protected boolean allowDollar = false;
041 protected boolean allowForwardSlash = false;
042 protected boolean allowDoubleQuote = false;
043 protected boolean allowApostrophe = false;
044 protected boolean allowComma = false;
045 protected boolean allowColon = false;
046 protected boolean allowSemiColon = false;
047 protected boolean allowQuestionMark = false;
048 protected boolean allowExclaimation = false;
049 protected boolean allowDash = false;
050 protected boolean allowPlus = false;
051 protected boolean allowEquals = false;
052 protected boolean allowAsterisk = false;
053 protected boolean allowAtSign = false;
054 protected boolean allowPercent = false;
055 protected boolean allowPound = false;
056 protected boolean allowGreaterThan = false;
057 protected boolean allowLessThan = false;
058 protected boolean allowBrackets = false;
059 protected boolean allowAmpersand = false;
060 protected boolean allowCurlyBraces = false;
061 protected boolean allowBackslash = false;
062 protected boolean allowAll = false;
063
064 /**
065 * @return the allowWhitespace
066 */
067 public boolean isAllowWhitespace() {
068 return this.allowWhitespace;
069 }
070
071 /**
072 * @param allowWhitespace the allowWhitespace to set
073 */
074 public void setAllowWhitespace(boolean allowWhitespace) {
075 this.allowWhitespace = allowWhitespace;
076 }
077
078 /**
079 * @return the allowUnderscore
080 */
081 public boolean isAllowUnderscore() {
082 return this.allowUnderscore;
083 }
084
085 /**
086 * @param allowUnderscore the allowUnderscore to set
087 */
088 public void setAllowUnderscore(boolean allowUnderscore) {
089 this.allowUnderscore = allowUnderscore;
090 }
091
092 /**
093 * @return the allowPeriod
094 */
095 public boolean isAllowPeriod() {
096 return this.allowPeriod;
097 }
098
099 /**
100 * @param allowPeriod the allowPeriod to set
101 */
102 public void setAllowPeriod(boolean allowPeriod) {
103 this.allowPeriod = allowPeriod;
104 }
105
106 /**
107 * @return the allowParenthesis
108 */
109 public boolean isAllowParenthesis() {
110 return this.allowParenthesis;
111 }
112
113 /**
114 * @param allowParenthesis the allowParenthesis to set
115 */
116 public void setAllowParenthesis(boolean allowParenthesis) {
117 this.allowParenthesis = allowParenthesis;
118 }
119
120 /**
121 * @return the allowDollar
122 */
123 public boolean isAllowDollar() {
124 return this.allowDollar;
125 }
126
127 /**
128 * @param allowDollar the allowDollar to set
129 */
130 public void setAllowDollar(boolean allowDollar) {
131 this.allowDollar = allowDollar;
132 }
133
134 /**
135 * @return the allowForwardSlash
136 */
137 public boolean isAllowForwardSlash() {
138 return this.allowForwardSlash;
139 }
140
141 /**
142 * @param allowForwardSlash the allowForwardSlash to set
143 */
144 public void setAllowForwardSlash(boolean allowForwardSlash) {
145 this.allowForwardSlash = allowForwardSlash;
146 }
147
148 /**
149 * @return the allowDoubleQuote
150 */
151 public boolean isAllowDoubleQuote() {
152 return this.allowDoubleQuote;
153 }
154
155 /**
156 * @param allowDoubleQuote the allowDoubleQuote to set
157 */
158 public void setAllowDoubleQuote(boolean allowDoubleQuote) {
159 this.allowDoubleQuote = allowDoubleQuote;
160 }
161
162 /**
163 * @return the allowApostrophe
164 */
165 public boolean isAllowApostrophe() {
166 return this.allowApostrophe;
167 }
168
169 /**
170 * @param allowApostrophe the allowApostrophe to set
171 */
172 public void setAllowApostrophe(boolean allowApostrophe) {
173 this.allowApostrophe = allowApostrophe;
174 }
175
176 /**
177 * @return the allowComma
178 */
179 public boolean isAllowComma() {
180 return this.allowComma;
181 }
182
183 /**
184 * @param allowComma the allowComma to set
185 */
186 public void setAllowComma(boolean allowComma) {
187 this.allowComma = allowComma;
188 }
189
190 /**
191 * @return the allowColon
192 */
193 public boolean isAllowColon() {
194 return this.allowColon;
195 }
196
197 /**
198 * @param allowColon the allowColon to set
199 */
200 public void setAllowColon(boolean allowColon) {
201 this.allowColon = allowColon;
202 }
203
204 /**
205 * @return the allowSemiColon
206 */
207 public boolean isAllowSemiColon() {
208 return this.allowSemiColon;
209 }
210
211 /**
212 * @param allowSemiColon the allowSemiColon to set
213 */
214 public void setAllowSemiColon(boolean allowSemiColon) {
215 this.allowSemiColon = allowSemiColon;
216 }
217
218 /**
219 * @return the allowQuestionMark
220 */
221 public boolean isAllowQuestionMark() {
222 return this.allowQuestionMark;
223 }
224
225 /**
226 * @param allowQuestionMark the allowQuestionMark to set
227 */
228 public void setAllowQuestionMark(boolean allowQuestionMark) {
229 this.allowQuestionMark = allowQuestionMark;
230 }
231
232 /**
233 * @return the allowExclaimation
234 */
235 public boolean isAllowExclaimation() {
236 return this.allowExclaimation;
237 }
238
239 /**
240 * @param allowExclaimation the allowExclaimation to set
241 */
242 public void setAllowExclaimation(boolean allowExclaimation) {
243 this.allowExclaimation = allowExclaimation;
244 }
245
246 /**
247 * @return the allowDash
248 */
249 public boolean isAllowDash() {
250 return this.allowDash;
251 }
252
253 /**
254 * @param allowDash the allowDash to set
255 */
256 public void setAllowDash(boolean allowDash) {
257 this.allowDash = allowDash;
258 }
259
260 /**
261 * @return the allowPlus
262 */
263 public boolean isAllowPlus() {
264 return this.allowPlus;
265 }
266
267 /**
268 * @param allowPlus the allowPlus to set
269 */
270 public void setAllowPlus(boolean allowPlus) {
271 this.allowPlus = allowPlus;
272 }
273
274 /**
275 * @return the allowEquals
276 */
277 public boolean isAllowEquals() {
278 return this.allowEquals;
279 }
280
281 /**
282 * @param allowEquals the allowEquals to set
283 */
284 public void setAllowEquals(boolean allowEquals) {
285 this.allowEquals = allowEquals;
286 }
287
288 /**
289 * @return the allowAsterisk
290 */
291 public boolean isAllowAsterisk() {
292 return this.allowAsterisk;
293 }
294
295 /**
296 * @param allowAsterisk the allowAsterisk to set
297 */
298 public void setAllowAsterisk(boolean allowAsterisk) {
299 this.allowAsterisk = allowAsterisk;
300 }
301
302 /**
303 * @return the allowAtSign
304 */
305 public boolean isAllowAtSign() {
306 return this.allowAtSign;
307 }
308
309 /**
310 * @param allowAtSign the allowAtSign to set
311 */
312 public void setAllowAtSign(boolean allowAtSign) {
313 this.allowAtSign = allowAtSign;
314 }
315
316 /**
317 * @return the allowPercent
318 */
319 public boolean isAllowPercent() {
320 return this.allowPercent;
321 }
322
323 /**
324 * @param allowPercent the allowPercent to set
325 */
326 public void setAllowPercent(boolean allowPercent) {
327 this.allowPercent = allowPercent;
328 }
329
330 /**
331 * @return the allowPound
332 */
333 public boolean isAllowPound() {
334 return this.allowPound;
335 }
336
337 /**
338 * @param allowPound the allowPound to set
339 */
340 public void setAllowPound(boolean allowPound) {
341 this.allowPound = allowPound;
342 }
343
344 public boolean isAllowGreaterThan() {
345 return allowGreaterThan;
346 }
347
348 public void setAllowGreaterThan(boolean allowGreaterThan) {
349 this.allowGreaterThan = allowGreaterThan;
350 }
351
352 public boolean isAllowLessThan() {
353 return allowLessThan;
354 }
355
356 public void setAllowLessThan(boolean allowLessThan) {
357 this.allowLessThan = allowLessThan;
358 }
359
360 public boolean isAllowBrackets() {
361 return allowBrackets;
362 }
363
364 public void setAllowBrackets(boolean allowBrackets) {
365 this.allowBrackets = allowBrackets;
366 }
367
368 public boolean isAllowAmpersand() {
369 return allowAmpersand;
370 }
371
372 public void setAllowAmpersand(boolean allowAmpersand) {
373 this.allowAmpersand = allowAmpersand;
374 }
375
376 public boolean isAllowCurlyBraces() {
377 return allowCurlyBraces;
378 }
379
380 public void setAllowCurlyBraces(boolean allowCurlyBraces) {
381 this.allowCurlyBraces = allowCurlyBraces;
382 }
383
384 public boolean isAllowBackslash() {
385 return allowBackslash;
386 }
387
388 public void setAllowBackslash(boolean allowBackslash) {
389 this.allowBackslash = allowBackslash;
390 }
391
392 /**
393 * If true, this constraint will allow all symbols that have flags for them. Equivalent to
394 * setting each flag to true separately.
395 *
396 * @return the allowAll
397 */
398 public boolean isAllowAll() {
399 return this.allowAll;
400 }
401
402 /**
403 * @param allowAll the allowAll to set
404 */
405 public void setAllowAll(boolean allowAll) {
406 this.allowAll = allowAll;
407 }
408
409 public boolean isOmitNewline() {
410 return omitNewline;
411 }
412
413 /**
414 * When set to true, omit new line characters from the set of valid characters. This flag
415 * will only have an effect if the allowWhitespace flag is true, otherwise all whitespace
416 * including new lines characters are omitted.
417 *
418 * @param omitNewline
419 */
420 public void setOmitNewline(boolean omitNewline) {
421 this.omitNewline = omitNewline;
422 }
423
424 /**
425 * This method returns the allowed set of characters allowed by this constraint, based on the
426 * flags set. This string is intended to be placed within the or set of a regex, ie between the
427 * [ ] symbols
428 *
429 * @return
430 */
431 protected String getAllowedCharacterRegex() {
432 StringBuilder regexString = new StringBuilder("");
433 if (allowWhitespace || allowAll) {
434 regexString.append("\\t\\v\\040");
435 if (!omitNewline) {
436 regexString.append("\\f\\r\\n");
437 }
438 }
439 if (allowUnderscore || allowAll) {
440 regexString.append("_");
441 }
442 if (allowPeriod || allowAll) {
443 regexString.append(".");
444 }
445 if (allowParenthesis || allowAll) {
446 regexString.append("(");
447 regexString.append(")");
448 }
449 if (allowDollar || allowAll) {
450 regexString.append("$");
451 }
452 if (allowForwardSlash || allowAll) {
453 regexString.append("/");
454 }
455 if (allowDoubleQuote || allowAll) {
456 regexString.append("\\\"");
457 }
458 if (allowApostrophe || allowAll) {
459 regexString.append("'");
460 }
461 if (allowComma || allowAll) {
462 regexString.append(",");
463 }
464 if (allowColon || allowAll) {
465 regexString.append(":");
466 }
467 if (allowSemiColon || allowAll) {
468 regexString.append(";");
469 }
470 if (allowQuestionMark || allowAll) {
471 regexString.append("?");
472 }
473 if (allowExclaimation || allowAll) {
474 regexString.append("!");
475 }
476 if (allowDash || allowAll) {
477 regexString.append("\\-");
478 }
479 if (allowPlus || allowAll) {
480 regexString.append("+");
481 }
482 if (allowEquals || allowAll) {
483 regexString.append("=");
484 }
485 if (allowAsterisk || allowAll) {
486 regexString.append("*");
487 }
488 if (allowAtSign || allowAll) {
489 regexString.append("@");
490 }
491 if (allowPercent || allowAll) {
492 regexString.append("%");
493 }
494 if (allowPound || allowAll) {
495 regexString.append("#");
496 }
497 if (allowLessThan || allowAll) {
498 regexString.append("\\0074");
499 }
500 if (allowGreaterThan || allowAll) {
501 regexString.append("\\0076");
502 }
503 if (allowAmpersand || allowAll) {
504 regexString.append("\\0046");
505 }
506 if (allowBackslash || allowAll) {
507 regexString.append("\\0134");
508 }
509 if (allowCurlyBraces || allowAll) {
510 regexString.append("\\0173\\0175");
511 }
512 if (allowBrackets || allowAll) {
513 regexString.append("\\0133\\0135");
514 }
515 return regexString.toString();
516 }
517
518 /**
519 * Generates a comma separated string of the allowed set of characters, for the {0} parameter to
520 * be used within its validation message
521 *
522 * @return the validationMessageParams
523 */
524 public List<String> getValidationMessageParams() {
525 if (validationMessageParams == null) {
526 validationMessageParams = new ArrayList<String>();
527 ConfigurationService configService = KRADServiceLocator.getKualiConfigurationService();
528 StringBuilder paramString = new StringBuilder("");
529
530 if (allowWhitespace || allowAll) {
531 paramString.append(", " + configService.getPropertyValueAsString(
532 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "whitespace"));
533 if (!omitNewline) {
534 paramString.append(", " + configService.getPropertyValueAsString(
535 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "newline"));
536 }
537 }
538 if (allowUnderscore || allowAll) {
539 paramString.append(", " + configService.getPropertyValueAsString(
540 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "underscore"));
541 }
542 if (allowPeriod || allowAll) {
543 paramString.append(", " + configService.getPropertyValueAsString(
544 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "period"));
545 }
546 if (allowParenthesis || allowAll) {
547 paramString.append(", " + configService.getPropertyValueAsString(
548 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "parenthesis"));
549 }
550 if (allowDollar || allowAll) {
551 paramString.append(", " + configService.getPropertyValueAsString(
552 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "dollar"));
553 }
554 if (allowForwardSlash || allowAll) {
555 paramString.append(", " + configService.getPropertyValueAsString(
556 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "forwardSlash"));
557 }
558 if (allowDoubleQuote || allowAll) {
559 paramString.append(", " + configService.getPropertyValueAsString(
560 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "doubleQuote"));
561 }
562 if (allowApostrophe || allowAll) {
563 paramString.append(", " + configService.getPropertyValueAsString(
564 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "apostrophe"));
565 }
566 if (allowComma || allowAll) {
567 paramString.append(", " + configService.getPropertyValueAsString(
568 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "comma"));
569 }
570 if (allowColon || allowAll) {
571 paramString.append(", " + configService.getPropertyValueAsString(
572 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "colon"));
573 }
574 if (allowSemiColon || allowAll) {
575 paramString.append(", " + configService.getPropertyValueAsString(
576 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "semiColon"));
577 }
578 if (allowQuestionMark || allowAll) {
579 paramString.append(", " + configService.getPropertyValueAsString(
580 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "questionMark"));
581 }
582 if (allowExclaimation || allowAll) {
583 paramString.append(", " + configService.getPropertyValueAsString(
584 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "exclaimation"));
585 }
586 if (allowDash || allowAll) {
587 paramString.append(", " + configService.getPropertyValueAsString(
588 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "dash"));
589 }
590 if (allowPlus || allowAll) {
591 paramString.append(", " + configService.getPropertyValueAsString(
592 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "plus"));
593 }
594 if (allowEquals || allowAll) {
595 paramString.append(", " + configService.getPropertyValueAsString(
596 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "equals"));
597 }
598 if (allowAsterisk || allowAll) {
599 paramString.append(", " + configService.getPropertyValueAsString(
600 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "asterisk"));
601 }
602 if (allowAtSign || allowAll) {
603 paramString.append(", " + configService.getPropertyValueAsString(
604 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "atSign"));
605 }
606 if (allowPercent || allowAll) {
607 paramString.append(", " + configService.getPropertyValueAsString(
608 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "percent"));
609 }
610 if (allowPound || allowAll) {
611 paramString.append(", " + configService.getPropertyValueAsString(
612 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "pound"));
613 }
614 if (allowLessThan || allowAll) {
615 paramString.append(", " + configService.getPropertyValueAsString(
616 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "lessThan"));
617 }
618 if (allowGreaterThan || allowAll) {
619 paramString.append(", " + configService.getPropertyValueAsString(
620 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "greaterThan"));
621 }
622 if (allowAmpersand || allowAll) {
623 paramString.append(", " + configService.getPropertyValueAsString(
624 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "ampersand"));
625 }
626 if (allowBackslash || allowAll) {
627 paramString.append(", " + configService.getPropertyValueAsString(
628 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "backslash"));
629 }
630 if (allowCurlyBraces || allowAll) {
631 paramString.append(", " + configService.getPropertyValueAsString(
632 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "curlyBraces"));
633 }
634 if (allowBrackets || allowAll) {
635 paramString.append(", " + configService.getPropertyValueAsString(
636 UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "brackets"));
637 }
638
639 validationMessageParams.add(paramString.toString());
640 }
641 return this.validationMessageParams;
642 }
643
644 }