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 import org.apache.jetspeed.page.impl.DatabasePageManagerUtils;
22
23 /***
24 * FragmentPreferenceList
25 *
26 * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
27 * @version $Id$
28 */
29 class FragmentPreferenceList extends AbstractList
30 {
31 private FragmentImpl fragment;
32
33 private List removedPreferences;
34
35 FragmentPreferenceList(FragmentImpl fragment)
36 {
37 super();
38 this.fragment = fragment;
39 }
40
41 /***
42 * validatePreferenceForAdd
43 *
44 * Validates preference to be added to this list.
45 *
46 * @param preference preference to add
47 * @return list element to add
48 */
49 private FragmentPreferenceImpl validatePreferenceForAdd(FragmentPreferenceImpl preference)
50 {
51
52 if (preference == null)
53 {
54 throw new NullPointerException("Unable to add null to list.");
55 }
56
57 if (fragment.accessPreferences().contains(preference))
58 {
59 throw new IllegalArgumentException("Unable to add duplicate entry to list: " + preference.getName());
60 }
61
62
63
64 if (removedPreferences != null)
65 {
66 int removedIndex = removedPreferences.indexOf(preference);
67 if (removedIndex >= 0)
68 {
69 FragmentPreferenceImpl addPreference = preference;
70 preference = (FragmentPreferenceImpl)removedPreferences.remove(removedIndex);
71
72 preference.setReadOnly(addPreference.isReadOnly());
73 preference.setValueList(addPreference.getValueList());
74 }
75 }
76 return preference;
77 }
78
79 /***
80 * getRemovedPreferences
81 *
82 * @return removed preferences tracking collection
83 */
84 private List getRemovedPreferences()
85 {
86 if (removedPreferences == null)
87 {
88 removedPreferences = DatabasePageManagerUtils.createList();
89 }
90 return removedPreferences;
91 }
92
93
94
95
96 public void add(int index, Object element)
97 {
98
99
100 if ((index < 0) || (index > fragment.accessPreferences().size()))
101 {
102 throw new IndexOutOfBoundsException("Unable to add to list at index: " + index);
103 }
104
105 FragmentPreferenceImpl preference = validatePreferenceForAdd((FragmentPreferenceImpl)element);
106
107 fragment.accessPreferences().add(index, preference);
108 }
109
110
111
112
113 public Object get(int index)
114 {
115
116 return fragment.accessPreferences().get(index);
117 }
118
119
120
121
122 public Object remove(int index)
123 {
124
125
126 FragmentPreferenceImpl removed = (FragmentPreferenceImpl)fragment.accessPreferences().remove(index);
127 if (removed != null)
128 {
129 getRemovedPreferences().add(removed);
130 }
131 return removed;
132 }
133
134
135
136
137 public Object set(int index, Object element)
138 {
139
140
141 FragmentPreferenceImpl newPreference = validatePreferenceForAdd((FragmentPreferenceImpl)element);
142
143 FragmentPreferenceImpl preference = (FragmentPreferenceImpl)fragment.accessPreferences().set(index, newPreference);
144
145 getRemovedPreferences().add(preference);
146
147 return preference;
148 }
149
150
151
152
153 public int size()
154 {
155
156 return fragment.accessPreferences().size();
157 }
158 }