1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.modeshape.jcr;
25
26 import javax.jcr.PropertyType;
27 import javax.jcr.Value;
28 import javax.jcr.nodetype.ConstraintViolationException;
29 import org.modeshape.graph.ExecutionContext;
30 import org.modeshape.graph.property.Name;
31 import org.modeshape.graph.property.Path;
32 import org.modeshape.graph.property.ValueFactories;
33 import org.modeshape.jcr.nodetype.PropertyDefinitionTemplate;
34
35
36
37
38 class JcrPropertyDefinitionTemplate extends JcrItemDefinitionTemplate implements PropertyDefinitionTemplate {
39
40 private boolean multiple = false;
41 private Value[] defaultValues = null;
42 private int requiredType = PropertyType.STRING;
43 private String[] valueConstraints = null;
44 private boolean fullTextSearchable = true;
45 private boolean queryOrderable = true;
46 private String[] availableQueryOperators;
47
48 JcrPropertyDefinitionTemplate( ExecutionContext context ) {
49 super(context);
50 }
51
52 JcrPropertyDefinitionTemplate( JcrPropertyDefinitionTemplate original,
53 ExecutionContext context ) {
54 super(original, context);
55 this.multiple = original.multiple;
56 this.requiredType = original.requiredType;
57 this.valueConstraints = original.valueConstraints;
58 this.fullTextSearchable = original.fullTextSearchable;
59 this.queryOrderable = original.queryOrderable;
60 this.availableQueryOperators = original.availableQueryOperators;
61 this.defaultValues = original.defaultValues != null ? new Value[original.defaultValues.length] : null;
62 if (original.defaultValues != null) {
63 for (int i = 0; i != original.defaultValues.length; ++i) {
64 Value originalValue = original.defaultValues[i];
65 assert originalValue instanceof JcrValue;
66 JcrValue jcrValue = ((JcrValue)originalValue);
67 SessionCache cache = jcrValue.sessionCache();
68 this.defaultValues[i] = new JcrValue(context.getValueFactories(), cache, jcrValue.getType(), jcrValue.value());
69 switch (jcrValue.getType()) {
70 case PropertyType.NAME:
71 Name nameValue = original.getContext().getValueFactories().getNameFactory().create(jcrValue.value());
72 JcrItemDefinitionTemplate.registerMissingNamespaces(original.getContext(), context, nameValue);
73 break;
74 case PropertyType.PATH:
75 Path pathValue = original.getContext().getValueFactories().getPathFactory().create(jcrValue.value());
76 JcrItemDefinitionTemplate.registerMissingNamespaces(original.getContext(), context, pathValue);
77 break;
78 }
79 }
80 }
81 }
82
83 JcrPropertyDefinitionTemplate with( ExecutionContext context ) {
84 return context == super.getContext() ? this : new JcrPropertyDefinitionTemplate(this, context);
85 }
86
87
88
89
90
91
92 public void setDefaultValues( String[] defaultValues ) {
93 if (defaultValues != null) {
94 this.defaultValues = new Value[defaultValues.length];
95 ValueFactories factories = getExecutionContext().getValueFactories();
96 for (int i = 0; i < defaultValues.length; i++) {
97 this.defaultValues[i] = new JcrValue(factories, null, PropertyType.STRING, defaultValues[i]);
98 }
99 } else {
100 this.defaultValues = null;
101 }
102 }
103
104
105
106
107
108
109 public void setDefaultValues( Value[] defaultValues ) {
110 this.defaultValues = defaultValues;
111 }
112
113
114
115
116
117
118 public void setMultiple( boolean multiple ) {
119 this.multiple = multiple;
120 }
121
122
123
124
125
126
127 public void setRequiredType( int requiredType ) {
128 assert requiredType == PropertyType.BINARY || requiredType == PropertyType.BOOLEAN || requiredType == PropertyType.DATE
129 || requiredType == PropertyType.DOUBLE || requiredType == PropertyType.DECIMAL
130 || requiredType == PropertyType.LONG || requiredType == PropertyType.NAME || requiredType == PropertyType.PATH
131 || requiredType == PropertyType.REFERENCE || requiredType == PropertyType.WEAKREFERENCE
132 || requiredType == PropertyType.URI || requiredType == PropertyType.STRING
133 || requiredType == PropertyType.UNDEFINED;
134 this.requiredType = requiredType;
135 }
136
137
138
139
140
141
142 public void setValueConstraints( String[] constraints ) {
143 this.valueConstraints = constraints;
144 }
145
146
147
148
149
150
151 public Value[] getDefaultValues() {
152 return this.defaultValues;
153 }
154
155
156
157
158
159
160 public int getRequiredType() {
161 return requiredType;
162 }
163
164
165
166
167
168
169 public String[] getValueConstraints() {
170 return valueConstraints;
171 }
172
173
174
175
176
177
178 public boolean isMultiple() {
179 return multiple;
180 }
181
182 public boolean isFullTextSearchable() {
183 return this.fullTextSearchable;
184 }
185
186
187
188
189
190
191 public void setFullTextSearchable( boolean fullTextSearchable ) {
192 this.fullTextSearchable = fullTextSearchable;
193 }
194
195 public String[] getAvailableQueryOperators() {
196 return this.availableQueryOperators;
197 }
198
199
200
201
202
203
204 public void setAvailableQueryOperators( String[] queryOperators ) {
205 this.availableQueryOperators = queryOperators;
206 }
207
208 public boolean isQueryOrderable() {
209 return this.queryOrderable;
210 }
211
212
213
214
215
216
217 public void setQueryOrderable( boolean queryOrderable ) {
218 this.queryOrderable = queryOrderable;
219 }
220
221
222
223
224
225
226 @Override
227 public void setName( String name ) throws ConstraintViolationException {
228 super.setName(name);
229 }
230
231
232
233
234
235
236 @Override
237 public void setAutoCreated( boolean autoCreated ) {
238 super.setAutoCreated(autoCreated);
239 }
240
241
242
243
244
245
246 @Override
247 public void setMandatory( boolean mandatory ) {
248 super.setMandatory(mandatory);
249 }
250
251
252
253
254
255
256 @Override
257 public void setOnParentVersion( int onParentVersion ) {
258 super.setOnParentVersion(onParentVersion);
259 }
260
261
262
263
264
265
266 @Override
267 public void setProtected( boolean isProtected ) {
268 super.setProtected(isProtected);
269 }
270 }