1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.om.page.impl;
18
19 import java.util.AbstractList;
20 import java.util.List;
21
22 import org.apache.jetspeed.page.impl.DatabasePageManagerUtils;
23
24 /***
25 * PageSecurityConstraintsDefList
26 *
27 * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
28 * @version $Id$
29 */
30 class PageSecurityConstraintsDefList extends AbstractList
31 {
32 private PageSecurityImpl pageSecurity;
33
34 private List removedConstraintsDefs;
35
36 PageSecurityConstraintsDefList(PageSecurityImpl pageSecurity)
37 {
38 super();
39 this.pageSecurity = pageSecurity;
40 }
41
42 /***
43 * validateConstraintsDefForAdd
44 *
45 * Validates constraints def to be added to this list.
46 *
47 * @param constraintsDef constraints definition to add
48 * @return list element to add
49 */
50 private SecurityConstraintsDefImpl validateConstraintsDefForAdd(SecurityConstraintsDefImpl constraintsDef)
51 {
52
53 if (constraintsDef == null)
54 {
55 throw new NullPointerException("Unable to add null to list.");
56 }
57
58 if (pageSecurity.accessConstraintsDefs().contains(constraintsDef))
59 {
60 throw new IllegalArgumentException("Unable to add duplicate entry to list: " + constraintsDef.getName());
61 }
62
63
64
65 if (removedConstraintsDefs != null)
66 {
67 int removedIndex = removedConstraintsDefs.indexOf(constraintsDef);
68 if (removedIndex >= 0)
69 {
70 SecurityConstraintsDefImpl addConstraintsDef = constraintsDef;
71 constraintsDef = (SecurityConstraintsDefImpl)removedConstraintsDefs.remove(removedIndex);
72
73 constraintsDef.setSecurityConstraints(addConstraintsDef.getSecurityConstraints());
74 }
75 }
76 return constraintsDef;
77 }
78
79 /***
80 * getRemovedConstraintsDefs
81 *
82 * @return removed constraints defs tracking collection
83 */
84 private List getRemovedConstraintsDefs()
85 {
86 if (removedConstraintsDefs == null)
87 {
88 removedConstraintsDefs = DatabasePageManagerUtils.createList();
89 }
90 return removedConstraintsDefs;
91 }
92
93
94
95
96 public void add(int index, Object element)
97 {
98
99
100 if ((index < 0) || (index > pageSecurity.accessConstraintsDefs().size()))
101 {
102 throw new IndexOutOfBoundsException("Unable to add to list at index: " + index);
103 }
104
105 SecurityConstraintsDefImpl constraintsDef = validateConstraintsDefForAdd((SecurityConstraintsDefImpl)element);
106
107 pageSecurity.accessConstraintsDefs().add(index, constraintsDef);
108
109 pageSecurity.clearSecurityConstraintsDefsMap();
110 }
111
112
113
114
115 public Object get(int index)
116 {
117
118 return pageSecurity.accessConstraintsDefs().get(index);
119 }
120
121
122
123
124 public Object remove(int index)
125 {
126
127 SecurityConstraintsDefImpl removed = (SecurityConstraintsDefImpl)pageSecurity.accessConstraintsDefs().remove(index);
128 if (removed != null)
129 {
130
131 getRemovedConstraintsDefs().add(removed);
132
133 pageSecurity.clearSecurityConstraintsDefsMap();
134 }
135 return removed;
136 }
137
138
139
140
141 public Object set(int index, Object element)
142 {
143
144
145 SecurityConstraintsDefImpl newConstraintsDef = validateConstraintsDefForAdd((SecurityConstraintsDefImpl)element);
146
147 SecurityConstraintsDefImpl constraintsDef = (SecurityConstraintsDefImpl)pageSecurity.accessConstraintsDefs().set(index, newConstraintsDef);
148
149 getRemovedConstraintsDefs().add(constraintsDef);
150
151 pageSecurity.clearSecurityConstraintsDefsMap();
152
153 return constraintsDef;
154 }
155
156
157
158
159 public int size()
160 {
161
162 return pageSecurity.accessConstraintsDefs().size();
163 }
164 }