1 package org.apache.onami.autobind.install;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.concurrent.Callable;
25
26
27
28
29
30 public class InstallationContext {
31
32 private final Map<BindingStage, List<Callable<?>>> context = new HashMap<BindingStage, List<Callable<?>>>();
33
34 public void process()
35 throws Exception
36 {
37 for ( BindingStage stage : BindingStage.ORDERED )
38 {
39 List<Callable<?>> requests = context.get( stage );
40 if ( requests != null )
41 {
42 for ( Callable<?> request : requests )
43 {
44 request.call();
45 }
46 }
47 }
48 }
49
50 public void add( BindingStage stage, Callable<?> request )
51 {
52 synchronized ( context )
53 {
54 List<Callable<?>> requests = context.get( stage );
55 if ( requests == null )
56 {
57 requests = new ArrayList<Callable<?>>();
58 context.put( stage, requests );
59 }
60 requests.add( request );
61 }
62 }
63
64 public void add( StageableRequest request )
65 {
66 synchronized ( context )
67 {
68 List<Callable<?>> requests = context.get( request.getExecutionStage() );
69 if ( requests == null )
70 {
71 requests = new ArrayList<Callable<?>>();
72 context.put( request.getExecutionStage(), requests );
73 }
74 requests.add( request );
75 }
76 }
77
78 public static interface StageableRequest
79 extends Callable<Void>
80 {
81
82 BindingStage getExecutionStage();
83
84 }
85
86 }