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 /***
26 * PageMenuDefinitionList
27 *
28 * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
29 * @version $Id$
30 */
31 class PageMenuDefinitionList extends AbstractList
32 {
33 private PageImpl page;
34
35 private List removedMenuDefinitions;
36
37 PageMenuDefinitionList(PageImpl page)
38 {
39 super();
40 this.page = page;
41 }
42
43 /***
44 * validateDefinitionForAdd
45 *
46 * Validates menu definition to be added to this list.
47 *
48 * @param definition menu definition to add
49 * @return list element to add
50 */
51 private PageMenuDefinitionImpl validateDefinitionForAdd(PageMenuDefinitionImpl definition)
52 {
53
54 if (definition == null)
55 {
56 throw new NullPointerException("Unable to add null to list.");
57 }
58
59 if (page.accessMenus().contains(definition))
60 {
61 throw new IllegalArgumentException("Unable to add duplicate entry to list: " + (definition).getName());
62 }
63
64
65
66 if (removedMenuDefinitions != null)
67 {
68 int removedIndex = removedMenuDefinitions.indexOf(definition);
69 if (removedIndex >= 0)
70 {
71
72 PageMenuDefinitionImpl addDefinition = definition;
73 definition = (PageMenuDefinitionImpl)removedMenuDefinitions.remove(removedIndex);
74
75
76 definition.setOptions(addDefinition.getOptions());
77 definition.setDepth(addDefinition.getDepth());
78 definition.setPaths(addDefinition.isPaths());
79 definition.setRegexp(addDefinition.isRegexp());
80 definition.setProfile(addDefinition.getProfile());
81 definition.setOrder(addDefinition.getOrder());
82 definition.setSkin(addDefinition.getSkin());
83 definition.setTitle(addDefinition.getTitle());
84 definition.setShortTitle(addDefinition.getShortTitle());
85 definition.setMenuElements(addDefinition.getMenuElements());
86
87
88
89
90
91
92
93
94
95 definition.getMetadata().copyFields(addDefinition.getMetadata().getFields());
96 }
97 }
98 return definition;
99 }
100
101 /***
102 * getRemovedMenuDefinitions
103 *
104 * @return removed menu definitions tracking collection
105 */
106 private List getRemovedMenuDefinitions()
107 {
108 if (removedMenuDefinitions == null)
109 {
110 removedMenuDefinitions = DatabasePageManagerUtils.createList();
111 }
112 return removedMenuDefinitions;
113 }
114
115
116
117
118 public void add(int index, Object element)
119 {
120
121
122 if ((index < 0) || (index > page.accessMenus().size()))
123 {
124 throw new IndexOutOfBoundsException("Unable to add to list at index: " + index);
125 }
126
127 PageMenuDefinitionImpl definition = validateDefinitionForAdd((PageMenuDefinitionImpl)element);
128
129 page.accessMenus().add(index, definition);
130 }
131
132
133
134
135 public Object get(int index)
136 {
137
138 return page.accessMenus().get(index);
139 }
140
141
142
143
144 public Object remove(int index)
145 {
146
147
148 PageMenuDefinitionImpl removed = (PageMenuDefinitionImpl)page.accessMenus().remove(index);
149 if (removed != null)
150 {
151 getRemovedMenuDefinitions().add(removed);
152 }
153 return removed;
154 }
155
156
157
158
159 public Object set(int index, Object element)
160 {
161
162
163 PageMenuDefinitionImpl newDefinition = validateDefinitionForAdd((PageMenuDefinitionImpl)element);
164
165 PageMenuDefinitionImpl definition = (PageMenuDefinitionImpl)page.accessMenus().set(index, newDefinition);
166
167 getRemovedMenuDefinitions().add(definition);
168
169 return definition;
170 }
171
172
173
174
175 public int size()
176 {
177
178 return page.accessMenus().size();
179 }
180 }