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