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.graph.connector.federation;
25
26 import java.util.List;
27 import java.util.Map;
28 import org.modeshape.graph.ExecutionContext;
29 import org.modeshape.graph.Location;
30 import org.modeshape.graph.cache.CachePolicy;
31 import org.modeshape.graph.observe.Observer;
32 import org.modeshape.graph.property.DateTime;
33 import org.modeshape.graph.property.Name;
34 import org.modeshape.graph.property.Property;
35 import org.modeshape.graph.request.AccessQueryRequest;
36 import org.modeshape.graph.request.CacheableRequest;
37 import org.modeshape.graph.request.CloneBranchRequest;
38 import org.modeshape.graph.request.CloneWorkspaceRequest;
39 import org.modeshape.graph.request.CopyBranchRequest;
40 import org.modeshape.graph.request.CreateNodeRequest;
41 import org.modeshape.graph.request.CreateWorkspaceRequest;
42 import org.modeshape.graph.request.DeleteBranchRequest;
43 import org.modeshape.graph.request.DeleteChildrenRequest;
44 import org.modeshape.graph.request.DestroyWorkspaceRequest;
45 import org.modeshape.graph.request.FullTextSearchRequest;
46 import org.modeshape.graph.request.GetWorkspacesRequest;
47 import org.modeshape.graph.request.LockBranchRequest;
48 import org.modeshape.graph.request.MoveBranchRequest;
49 import org.modeshape.graph.request.ReadAllChildrenRequest;
50 import org.modeshape.graph.request.ReadAllPropertiesRequest;
51 import org.modeshape.graph.request.ReadBlockOfChildrenRequest;
52 import org.modeshape.graph.request.ReadBranchRequest;
53 import org.modeshape.graph.request.ReadNextBlockOfChildrenRequest;
54 import org.modeshape.graph.request.ReadNodeRequest;
55 import org.modeshape.graph.request.ReadPropertyRequest;
56 import org.modeshape.graph.request.RemovePropertyRequest;
57 import org.modeshape.graph.request.RenameNodeRequest;
58 import org.modeshape.graph.request.Request;
59 import org.modeshape.graph.request.RequestType;
60 import org.modeshape.graph.request.SetPropertyRequest;
61 import org.modeshape.graph.request.UnlockBranchRequest;
62 import org.modeshape.graph.request.UpdatePropertiesRequest;
63 import org.modeshape.graph.request.UpdateValuesRequest;
64 import org.modeshape.graph.request.VerifyNodeExistsRequest;
65 import org.modeshape.graph.request.VerifyWorkspaceRequest;
66 import org.modeshape.graph.request.processor.RequestProcessor;
67
68
69
70
71
72
73 class JoinMirrorRequestProcessor extends RequestProcessor {
74
75 private FederatedRequest federatedRequest;
76
77 JoinMirrorRequestProcessor( String sourceName,
78 ExecutionContext context,
79 Observer observer,
80 DateTime now,
81 CachePolicy defaultCachePolicy ) {
82 super(sourceName, context, observer, now, defaultCachePolicy);
83
84 }
85
86
87
88
89 void setFederatedRequest( FederatedRequest federatedRequest ) {
90 this.federatedRequest = federatedRequest;
91 }
92
93 protected boolean checkErrorOrCancel( Request request,
94 Request sourceRequest ) {
95 if (sourceRequest.hasError()) {
96 request.setError(sourceRequest.getError());
97 return true;
98 }
99 if (sourceRequest.isCancelled()) {
100 request.cancel();
101 return true;
102 }
103 return false;
104 }
105
106
107
108
109
110
111 @Override
112 public void process( ReadNodeRequest request ) {
113 ReadNodeRequest source = (ReadNodeRequest)federatedRequest.getFirstProjectedRequest().getRequest();
114 if (checkErrorOrCancel(request, source)) return;
115 request.setActualLocationOfNode(source.getActualLocationOfNode());
116 for (Location childInSource : source.getChildren()) {
117 request.addChild(childInSource);
118 }
119 for (Property propertyInSource : source.getProperties()) {
120 request.addProperties(propertyInSource);
121 }
122 request.setCachePolicy(getDefaultCachePolicy());
123 setCacheableInfo(request, source.getCachePolicy());
124 }
125
126
127
128
129
130
131 @Override
132 public void process( ReadAllChildrenRequest request ) {
133 ReadAllChildrenRequest source = (ReadAllChildrenRequest)federatedRequest.getFirstProjectedRequest().getRequest();
134 if (checkErrorOrCancel(request, source)) return;
135 request.setActualLocationOfNode(source.getActualLocationOfNode());
136 for (Location childInSource : source.getChildren()) {
137 request.addChild(childInSource);
138 }
139 request.setCachePolicy(getDefaultCachePolicy());
140 setCacheableInfo(request, source.getCachePolicy());
141 }
142
143
144
145
146
147
148 @Override
149 public void process( ReadAllPropertiesRequest request ) {
150 ReadAllPropertiesRequest source = (ReadAllPropertiesRequest)federatedRequest.getFirstProjectedRequest().getRequest();
151 if (checkErrorOrCancel(request, source)) return;
152 request.setActualLocationOfNode(source.getActualLocationOfNode());
153 for (Property propertyInSource : source.getProperties()) {
154 request.addProperties(propertyInSource);
155 }
156 request.setCachePolicy(getDefaultCachePolicy());
157 setCacheableInfo(request, source.getCachePolicy());
158 }
159
160
161
162
163
164
165 @Override
166 public void process( ReadBlockOfChildrenRequest request ) {
167 ReadBlockOfChildrenRequest source = (ReadBlockOfChildrenRequest)federatedRequest.getFirstProjectedRequest().getRequest();
168 if (checkErrorOrCancel(request, source)) return;
169 request.setActualLocationOfNode(source.getActualLocationOfNode());
170 for (Location childInSource : source.getChildren()) {
171 request.addChild(childInSource);
172 }
173 request.setCachePolicy(getDefaultCachePolicy());
174 setCacheableInfo(request, source.getCachePolicy());
175 }
176
177
178
179
180
181
182 @Override
183 public void process( ReadNextBlockOfChildrenRequest request ) {
184 ReadNextBlockOfChildrenRequest source = (ReadNextBlockOfChildrenRequest)federatedRequest.getFirstProjectedRequest()
185 .getRequest();
186 if (checkErrorOrCancel(request, source)) return;
187 request.setActualLocationOfStartingAfterNode(source.getActualLocationOfStartingAfterNode());
188 for (Location childInSource : source.getChildren()) {
189 request.addChild(childInSource);
190 }
191 request.setCachePolicy(getDefaultCachePolicy());
192 setCacheableInfo(request, source.getCachePolicy());
193 }
194
195
196
197
198
199
200 @Override
201 public void process( ReadPropertyRequest request ) {
202 ReadPropertyRequest source = (ReadPropertyRequest)federatedRequest.getFirstProjectedRequest().getRequest();
203 if (checkErrorOrCancel(request, source)) return;
204 request.setActualLocationOfNode(source.getActualLocationOfNode());
205 request.setProperty(source.getProperty());
206 request.setCachePolicy(getDefaultCachePolicy());
207 setCacheableInfo(request, source.getCachePolicy());
208 }
209
210
211
212
213
214
215 @Override
216 public void process( SetPropertyRequest request ) {
217 SetPropertyRequest source = (SetPropertyRequest)federatedRequest.getFirstProjectedRequest().getRequest();
218 if (checkErrorOrCancel(request, source)) return;
219
220 request.setActualLocationOfNode(source.getActualLocationOfNode());
221 request.setNewProperty(source.isNewProperty());
222 }
223
224
225
226
227
228
229 @Override
230 public void process( VerifyNodeExistsRequest request ) {
231 VerifyNodeExistsRequest source = (VerifyNodeExistsRequest)federatedRequest.getFirstProjectedRequest().getRequest();
232 if (checkErrorOrCancel(request, source)) return;
233 request.setActualLocationOfNode(source.getActualLocationOfNode());
234 request.setCachePolicy(getDefaultCachePolicy());
235 setCacheableInfo(request, source.getCachePolicy());
236 }
237
238
239
240
241
242
243 @Override
244 public void process( RemovePropertyRequest request ) {
245 RemovePropertyRequest source = (RemovePropertyRequest)federatedRequest.getFirstProjectedRequest().getRequest();
246 if (checkErrorOrCancel(request, source)) return;
247 request.setActualLocationOfNode(source.getActualLocationOfNode());
248 }
249
250
251
252
253
254
255 @Override
256 public void process( RenameNodeRequest request ) {
257 RenameNodeRequest source = (RenameNodeRequest)federatedRequest.getFirstProjectedRequest().getRequest();
258 if (checkErrorOrCancel(request, source)) return;
259 request.setActualLocations(source.getActualLocationBefore(), source.getActualLocationAfter());
260 }
261
262
263
264
265
266
267 @Override
268 public void process( ReadBranchRequest request ) {
269 CacheableRequest source = (CacheableRequest)federatedRequest.getFirstProjectedRequest().getRequest();
270 if (checkErrorOrCancel(request, source)) return;
271 if (RequestType.READ_BRANCH == source.getType()) {
272 ReadBranchRequest readSource = (ReadBranchRequest)source;
273 request.setActualLocationOfNode(readSource.getActualLocationOfNode());
274 for (Location node : readSource) {
275 List<Location> children = readSource.getChildren(node);
276 if (children != null) request.setChildren(node, children);
277 Map<Name, Property> props = readSource.getPropertiesFor(node);
278 if (props != null) request.setProperties(node, props.values());
279 }
280 } else if (RequestType.READ_NODE == source.getType()) {
281 ReadNodeRequest readSource = (ReadNodeRequest)source;
282 request.setActualLocationOfNode(readSource.getActualLocationOfNode());
283 Location parent = readSource.getActualLocationOfNode();
284 request.setChildren(parent, readSource.getChildren());
285 request.setProperties(parent, readSource.getPropertiesByName().values());
286 }
287 request.setCachePolicy(getDefaultCachePolicy());
288 setCacheableInfo(request, source.getCachePolicy());
289 }
290
291
292
293
294
295
296 @Override
297 public void process( CreateNodeRequest request ) {
298 CreateNodeRequest source = (CreateNodeRequest)federatedRequest.getFirstProjectedRequest().getRequest();
299 if (checkErrorOrCancel(request, source)) return;
300 request.setActualLocationOfNode(source.getActualLocationOfNode());
301 }
302
303
304
305
306
307
308 @Override
309 public void process( UpdatePropertiesRequest request ) {
310 UpdatePropertiesRequest source = (UpdatePropertiesRequest)federatedRequest.getFirstProjectedRequest().getRequest();
311 if (checkErrorOrCancel(request, source)) return;
312 request.setActualLocationOfNode(source.getActualLocationOfNode());
313 request.setNewProperties(source.getNewPropertyNames());
314 }
315
316
317
318
319
320
321 @Override
322 public void process( UpdateValuesRequest request ) {
323 UpdateValuesRequest source = (UpdateValuesRequest)federatedRequest.getFirstProjectedRequest().getRequest();
324 if (checkErrorOrCancel(request, source)) return;
325 request.setActualLocation(source.getActualLocationOfNode(),
326 request.getActualAddedValues(),
327 request.getActualRemovedValues());
328 }
329
330
331
332
333
334
335 @Override
336 public void process( CopyBranchRequest request ) {
337 CopyBranchRequest source = (CopyBranchRequest)federatedRequest.getFirstProjectedRequest().getRequest();
338 if (checkErrorOrCancel(request, source)) return;
339 request.setActualLocations(source.getActualLocationBefore(), source.getActualLocationAfter());
340 }
341
342
343
344
345
346
347 @Override
348 public void process( CloneBranchRequest request ) {
349 CloneBranchRequest source = (CloneBranchRequest)federatedRequest.getFirstProjectedRequest().getRequest();
350 if (checkErrorOrCancel(request, source)) return;
351 request.setActualLocations(source.getActualLocationBefore(), source.getActualLocationAfter());
352 request.setRemovedNodes(source.getRemovedNodes());
353 }
354
355
356
357
358
359
360 @Override
361 public void process( DeleteBranchRequest request ) {
362 DeleteBranchRequest source = (DeleteBranchRequest)federatedRequest.getFirstProjectedRequest().getRequest();
363 if (checkErrorOrCancel(request, source)) return;
364 request.setActualLocationOfNode(source.getActualLocationOfNode());
365 }
366
367
368
369
370
371
372 @Override
373 public void process( DeleteChildrenRequest request ) {
374 DeleteChildrenRequest source = (DeleteChildrenRequest)federatedRequest.getFirstProjectedRequest().getRequest();
375 if (checkErrorOrCancel(request, source)) return;
376 request.setActualLocationOfNode(source.getActualLocationOfNode());
377 }
378
379
380
381
382
383
384 @Override
385 public void process( MoveBranchRequest request ) {
386 MoveBranchRequest source = (MoveBranchRequest)federatedRequest.getFirstProjectedRequest().getRequest();
387 if (checkErrorOrCancel(request, source)) return;
388 request.setActualLocations(source.getActualLocationBefore(), source.getActualLocationAfter());
389 }
390
391
392
393
394
395
396 @Override
397 public void process( LockBranchRequest request ) {
398 LockBranchRequest source = (LockBranchRequest)federatedRequest.getFirstProjectedRequest().getRequest();
399 if (checkErrorOrCancel(request, source)) return;
400 request.setActualLocation(source.getActualLocation());
401 }
402
403
404
405
406
407
408 @Override
409 public void process( UnlockBranchRequest request ) {
410 UnlockBranchRequest source = (UnlockBranchRequest)federatedRequest.getFirstProjectedRequest().getRequest();
411 if (checkErrorOrCancel(request, source)) return;
412 request.setActualLocation(source.getActualLocation());
413 }
414
415
416
417
418
419
420 @Override
421 public void process( VerifyWorkspaceRequest request ) {
422 VerifyNodeExistsRequest source = (VerifyNodeExistsRequest)federatedRequest.getFirstProjectedRequest().getRequest();
423 if (checkErrorOrCancel(request, source)) return;
424 assert source.getActualLocationOfNode().getPath().isRoot();
425 request.setActualRootLocation(source.getActualLocationOfNode());
426 }
427
428
429
430
431
432
433 @Override
434 public void process( GetWorkspacesRequest request ) {
435 throw new UnsupportedOperationException();
436 }
437
438
439
440
441
442
443 @Override
444 public void process( CreateWorkspaceRequest request ) {
445 throw new UnsupportedOperationException();
446 }
447
448
449
450
451
452
453 @Override
454 public void process( CloneWorkspaceRequest request ) {
455 throw new UnsupportedOperationException();
456 }
457
458
459
460
461
462
463 @Override
464 public void process( DestroyWorkspaceRequest request ) {
465 throw new UnsupportedOperationException();
466 }
467
468
469
470
471
472
473 @Override
474 public void process( AccessQueryRequest request ) {
475 throw new UnsupportedOperationException();
476 }
477
478
479
480
481
482
483 @Override
484 public void process( FullTextSearchRequest request ) {
485 throw new UnsupportedOperationException();
486 }
487 }