1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.model.schema.syntaxCheckers;
21
22
23 import org.apache.directory.api.i18n.I18n;
24 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
25 import org.apache.directory.api.ldap.model.schema.SyntaxChecker;
26 import org.apache.directory.api.util.Strings;
27
28
29
30
31
32
33
34
35
36
37
38
39 @SuppressWarnings("serial")
40 public final class PostalAddressSyntaxChecker extends SyntaxChecker
41 {
42
43
44
45 public static final PostalAddressSyntaxChecker INSTANCE =
46 new PostalAddressSyntaxChecker( SchemaConstants.POSTAL_ADDRESS_SYNTAX );
47
48
49
50
51 public static final class Builder extends SCBuilder<PostalAddressSyntaxChecker>
52 {
53
54
55
56 private Builder()
57 {
58 super( SchemaConstants.POSTAL_ADDRESS_SYNTAX );
59 }
60
61
62
63
64
65
66 @Override
67 public PostalAddressSyntaxChecker build()
68 {
69 return new PostalAddressSyntaxChecker( oid );
70 }
71 }
72
73
74
75
76
77
78
79 private PostalAddressSyntaxChecker( String oid )
80 {
81 super( oid );
82 }
83
84
85
86
87
88 public static Builder builder()
89 {
90 return new Builder();
91 }
92
93
94
95
96
97 @Override
98 public boolean isValidSyntax( Object value )
99 {
100 String strValue;
101
102 if ( value == null )
103 {
104 if ( LOG.isDebugEnabled() )
105 {
106 LOG.debug( I18n.err( I18n.ERR_04488_SYNTAX_INVALID, "null" ) );
107 }
108
109 return false;
110 }
111
112 if ( value instanceof String )
113 {
114 strValue = ( String ) value;
115 }
116 else if ( value instanceof byte[] )
117 {
118 strValue = Strings.utf8ToString( ( byte[] ) value );
119 }
120 else
121 {
122 strValue = value.toString();
123 }
124
125 if ( strValue.length() == 0 )
126 {
127 if ( LOG.isDebugEnabled() )
128 {
129 LOG.debug( I18n.err( I18n.ERR_04488_SYNTAX_INVALID, value ) );
130 }
131
132 return false;
133 }
134
135
136 int dollar = strValue.indexOf( '$' );
137
138 if ( dollar == -1 )
139 {
140
141 LOG.debug( I18n.msg( I18n.MSG_04489_SYNTAX_VALID, value ) );
142 return true;
143 }
144
145 int pos = 0;
146 do
147 {
148
149 String address = strValue.substring( pos, dollar );
150
151 if ( Strings.isEmpty( address ) )
152 {
153 if ( LOG.isDebugEnabled() )
154 {
155 LOG.debug( I18n.err( I18n.ERR_04488_SYNTAX_INVALID, value ) );
156 }
157
158 return false;
159 }
160
161 pos = dollar + 1;
162
163 if ( pos == strValue.length() )
164 {
165
166 if ( LOG.isDebugEnabled() )
167 {
168 LOG.debug( I18n.err( I18n.ERR_04488_SYNTAX_INVALID, value ) );
169 }
170
171 return false;
172 }
173
174 dollar = strValue.indexOf( '$', pos );
175 }
176 while ( dollar > -1 );
177
178 return true;
179 }
180 }