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_17035_DUPLICATED_COMMON_ELEMENT,
64 mandatoryComponents[i] ) );
65 }
66 }
67 }
68
69 mandatoryComponentsMonitor = new MandatoryComponentsMonitor( mandatoryComponents );
70 optionalComponentsMonitor = new OptionalComponentsMonitor( optionalComponents );
71 }
72
73
74
75
76
77 @Override
78 public ComponentsMonitor useComponent( String component )
79 {
80 try
81 {
82 mandatoryComponentsMonitor.useComponent( component );
83 }
84 catch ( IllegalArgumentException e1 )
85 {
86 try
87 {
88 optionalComponentsMonitor.useComponent( component );
89 }
90 catch ( IllegalArgumentException e2 )
91 {
92 throw new IllegalArgumentException( I18n.err( I18n.ERR_17036_UNREGISTRED_COMPONENT, component ), e1 );
93 }
94 }
95
96 return this;
97 }
98
99
100
101
102
103 @Override
104 public boolean allComponentsUsed()
105 {
106 return mandatoryComponentsMonitor.allComponentsUsed() && optionalComponentsMonitor.allComponentsUsed();
107 }
108
109
110
111
112
113 @Override
114 public boolean finalStateValid()
115 {
116 return mandatoryComponentsMonitor.finalStateValid() && optionalComponentsMonitor.finalStateValid();
117 }
118
119
120
121
122
123 @Override
124 public List<String> getRemainingComponents()
125 {
126 List<String> remainingComponents = new LinkedList<>();
127
128 remainingComponents.addAll( mandatoryComponentsMonitor.getRemainingComponents() );
129 remainingComponents.addAll( optionalComponentsMonitor.getRemainingComponents() );
130
131 return Collections.unmodifiableList( remainingComponents );
132 }
133
134 }