1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.directory.api.util;
22
23
24 import java.util.Collections;
25 import java.util.LinkedList;
26 import java.util.List;
27
28 import org.apache.directory.api.i18n.I18n;
29
30
31
32
33
34
35
36 public class MandatoryAndOptionalComponentsMonitor implements ComponentsMonitor
37 {
38
39
40 private ComponentsMonitor mandatoryComponentsMonitor;
41
42
43 private ComponentsMonitor optionalComponentsMonitor;
44
45
46
47
48
49
50
51
52
53
54 public MandatoryAndOptionalComponentsMonitor( String[] mandatoryComponents, String[] optionalComponents )
55 {
56
57 for ( int i = 0; i < mandatoryComponents.length; i++ )
58 {
59 for ( int j = 0; j < optionalComponents.length; j++ )
60 {
61 if ( mandatoryComponents[i].equals( optionalComponents[j] ) )
62 {
63 throw new IllegalArgumentException( I18n.err( I18n.ERR_04415, mandatoryComponents[i] ) );
64 }
65 }
66 }
67
68 mandatoryComponentsMonitor = new MandatoryComponentsMonitor( mandatoryComponents );
69 optionalComponentsMonitor = new OptionalComponentsMonitor( optionalComponents );
70 }
71
72
73
74
75
76 public ComponentsMonitor useComponent( String component )
77 {
78 try
79 {
80 mandatoryComponentsMonitor.useComponent( component );
81 }
82 catch ( IllegalArgumentException e1 )
83 {
84 try
85 {
86 optionalComponentsMonitor.useComponent( component );
87 }
88 catch ( IllegalArgumentException e2 )
89 {
90 throw new IllegalArgumentException( I18n.err( I18n.ERR_04416, component ), e1 );
91 }
92 }
93
94 return this;
95 }
96
97
98
99
100
101 public boolean allComponentsUsed()
102 {
103 return ( mandatoryComponentsMonitor.allComponentsUsed() && optionalComponentsMonitor.allComponentsUsed() );
104 }
105
106
107
108
109
110 public boolean finalStateValid()
111 {
112 return ( mandatoryComponentsMonitor.finalStateValid() && optionalComponentsMonitor.finalStateValid() );
113 }
114
115
116
117
118
119 public List<String> getRemainingComponents()
120 {
121 List<String> remainingComponents = new LinkedList<String>();
122
123 remainingComponents.addAll( mandatoryComponentsMonitor.getRemainingComponents() );
124 remainingComponents.addAll( optionalComponentsMonitor.getRemainingComponents() );
125
126 return Collections.unmodifiableList( remainingComponents );
127 }
128
129 }