1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springmodules.validation.bean.converter;
18
19 import java.io.Serializable;
20
21 import org.springframework.validation.DefaultMessageCodesResolver;
22 import org.springframework.validation.MessageCodesResolver;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public class ModelAwareMessageCodesResolver implements MessageCodesResolver, Serializable {
42
43 private MessageCodesResolver internalResolver;
44
45
46
47
48 public ModelAwareMessageCodesResolver() {
49 this(new DefaultMessageCodesResolver());
50 }
51
52
53
54
55
56
57 public ModelAwareMessageCodesResolver(MessageCodesResolver internalResolver) {
58 this.internalResolver = internalResolver;
59 }
60
61
62
63
64 public String[] resolveMessageCodes(String errorCode, String objectName) {
65 int prefixIndex = errorCode.lastIndexOf(ModelAwareErrorCodeConverter.ERROR_CODE_SEPERATOR_PREFIX);
66 int suffixIndex = errorCode.lastIndexOf(ModelAwareErrorCodeConverter.ERROR_CODE_SEPERATOR_SUFFIX);
67
68 if (prefixIndex < 0 || suffixIndex < 0 || suffixIndex != errorCode.length() - 1) {
69 return internalResolver.resolveMessageCodes(errorCode, objectName);
70 }
71
72 String basicCode = errorCode.substring(prefixIndex + 1, suffixIndex);
73 String[] basicCodes = internalResolver.resolveMessageCodes(basicCode, objectName);
74 String[] codes = new String[basicCodes.length + 1];
75 System.arraycopy(basicCodes, 0, codes, 1, basicCodes.length);
76 codes[0] = errorCode;
77
78 return codes;
79 }
80
81
82
83
84 public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class fieldType) {
85 int prefixIndex = errorCode.lastIndexOf(ModelAwareErrorCodeConverter.ERROR_CODE_SEPERATOR_PREFIX);
86 int suffixIndex = errorCode.lastIndexOf(ModelAwareErrorCodeConverter.ERROR_CODE_SEPERATOR_SUFFIX);
87
88 if (prefixIndex < 0 || suffixIndex < 0 || suffixIndex != errorCode.length() - 1) {
89 return internalResolver.resolveMessageCodes(errorCode, objectName, field, fieldType);
90 }
91
92 String basicCode = errorCode.substring(prefixIndex + 1, suffixIndex);
93 String[] basicCodes = internalResolver.resolveMessageCodes(basicCode, objectName, field, fieldType);
94 String[] codes = new String[basicCodes.length + 1];
95 System.arraycopy(basicCodes, 0, codes, 1, basicCodes.length);
96 codes[0] = errorCode;
97
98 return codes;
99 }
100 }