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.asn1.util.Oid;
24 import org.apache.directory.api.i18n.I18n;
25 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
26 import org.apache.directory.api.ldap.model.schema.SyntaxChecker;
27 import org.apache.directory.api.util.Strings;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 @SuppressWarnings("serial")
50 public final class OidLenSyntaxChecker extends SyntaxChecker
51 {
52
53
54
55 public static final OidLenSyntaxChecker INSTANCE =
56 new OidLenSyntaxChecker( SchemaConstants.OID_LEN_SYNTAX );
57
58
59
60
61 public static final class Builder extends SCBuilder<OidLenSyntaxChecker>
62 {
63
64
65
66 private Builder()
67 {
68 super( SchemaConstants.OID_LEN_SYNTAX );
69 }
70
71
72
73
74
75
76 @Override
77 public OidLenSyntaxChecker build()
78 {
79 return new OidLenSyntaxChecker( oid );
80 }
81 }
82
83
84
85
86
87
88
89
90 private OidLenSyntaxChecker( String oid )
91 {
92 super( oid );
93 }
94
95
96
97
98
99 public static Builder builder()
100 {
101 return new Builder();
102 }
103
104
105
106
107
108 @Override
109 public boolean isValidSyntax( Object value )
110 {
111 String strValue;
112
113 if ( value == null )
114 {
115 if ( LOG.isDebugEnabled() )
116 {
117 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, "null" ) );
118 }
119
120 return false;
121 }
122
123 if ( value instanceof String )
124 {
125 strValue = ( String ) value;
126 }
127 else if ( value instanceof byte[] )
128 {
129 strValue = Strings.utf8ToString( ( byte[] ) value );
130 }
131 else
132 {
133 strValue = value.toString();
134 }
135
136 if ( strValue.length() == 0 )
137 {
138 if ( LOG.isDebugEnabled() )
139 {
140 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, value ) );
141 }
142
143 return false;
144 }
145
146
147 int pos = strValue.indexOf( '{' );
148
149 if ( pos < 0 )
150 {
151
152 boolean result = Oid.isOid( strValue );
153
154 if ( LOG.isDebugEnabled() )
155 {
156 if ( result )
157 {
158 LOG.debug( I18n.msg( I18n.MSG_13701_SYNTAX_VALID, value ) );
159 }
160 else
161 {
162 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, value ) );
163 }
164 }
165
166 return result;
167 }
168 else
169 {
170
171 String oid = strValue.substring( 0, pos );
172
173 if ( !Oid.isOid( oid ) )
174 {
175 if ( LOG.isDebugEnabled() )
176 {
177 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, value ) );
178 }
179
180 return false;
181 }
182
183 String len = strValue.substring( pos );
184
185
186 if ( len.charAt( len.length() - 1 ) != '}' )
187 {
188
189 if ( LOG.isDebugEnabled() )
190 {
191 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, value ) );
192 }
193
194 return false;
195 }
196
197 for ( int i = 1; i < len.length() - 1; i++ )
198 {
199 switch ( len.charAt( i ) )
200 {
201 case '0':
202 case '1':
203 case '2':
204 case '3':
205 case '4':
206 case '5':
207 case '6':
208 case '7':
209 case '8':
210 case '9':
211 break;
212
213 default:
214 if ( LOG.isDebugEnabled() )
215 {
216 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, value ) );
217 }
218
219 return false;
220 }
221 }
222
223 if ( ( len.charAt( 1 ) == '0' ) && len.length() > 3 )
224 {
225
226
227 if ( LOG.isDebugEnabled() )
228 {
229 LOG.debug( I18n.err( I18n.ERR_13210_SYNTAX_INVALID, value ) );
230 }
231
232 return false;
233 }
234
235 if ( LOG.isDebugEnabled() )
236 {
237 LOG.debug( I18n.msg( I18n.MSG_13701_SYNTAX_VALID, value ) );
238 }
239
240 return true;
241 }
242 }
243 }