1
22
23 package com.liferay.portal.kernel.util;
24
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.List;
28
29
35 public abstract class TranslatedList<E, F> extends ListWrapper<E> {
36
37 public TranslatedList(List<E> newList, List<F> oldList) {
38 super(newList);
39
40 _oldList = oldList;
41 }
42
43 public boolean add(E o) {
44 _oldList.add(toOldObject(o));
45
46 return super.add(o);
47 }
48
49 public void add(int index, E element) {
50 _oldList.add(index, toOldObject(element));
51
52 super.add(index, element);
53 }
54
55 public boolean addAll(Collection<? extends E> c) {
56 for (E o : c) {
57 _oldList.add(toOldObject(o));
58 }
59
60 return super.addAll(c);
61 }
62
63 public boolean addAll(int index, Collection<? extends E> c) {
64 for (E o : c) {
65 _oldList.add(index++, toOldObject(o));
66 }
67
68 return super.addAll(c);
69 }
70
71 public boolean remove(Object o) {
72 _oldList.remove(toOldObject((E)o));
73
74 return super.remove(o);
75 }
76
77 public E remove(int index) {
78 _oldList.remove(index);
79
80 return super.remove(index);
81 }
82
83 public boolean removeAll(Collection<?> c) {
84 List<F> tempList = new ArrayList<F>();
85
86 for (Object o : c) {
87 tempList.add(toOldObject((E)o));
88 }
89
90 _oldList.removeAll(tempList);
91
92 return super.removeAll(c);
93 }
94
95 public boolean retainAll(Collection<?> c) {
96 List<F> tempList = new ArrayList<F>();
97
98 for (Object o : c) {
99 tempList.add(toOldObject((E)o));
100 }
101
102 _oldList.retainAll(tempList);
103
104 return super.retainAll(c);
105 }
106
107 public E set(int index, E element) {
108 _oldList.set(index, toOldObject(element));
109
110 return super.set(index, element);
111 }
112
113 public List<E> subList(int fromIndex, int toIndex) {
114 List<E> newList = super.subList(fromIndex, toIndex);
115 List<F> oldList = _oldList.subList(fromIndex, toIndex);
116
117 return newInstance(newList, oldList);
118 }
119
120 protected abstract TranslatedList<E, F> newInstance(
121 List<E> newList, List<F> oldList);
122
123 protected abstract F toOldObject(E o);
124
125 private List<F> _oldList;
126
127 }