1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package javax.faces.model;
20
21 import java.util.List;
22
23
24
25
26
27
28
29 public class ListDataModel<E> extends DataModel<E>
30 {
31
32
33 private int _rowIndex = -1;
34 private List<E> _data;
35
36
37 public ListDataModel()
38 {
39 super();
40 }
41
42 public ListDataModel(List<E> list)
43 {
44 if (list == null)
45 throw new NullPointerException("list");
46 setWrappedData(list);
47 }
48
49
50 @Override
51 public int getRowCount()
52 {
53 if (_data == null)
54 {
55 return -1;
56 }
57 return _data.size();
58 }
59
60 @Override
61 public E getRowData()
62 {
63 if (_data == null)
64 {
65 return null;
66 }
67 if (!isRowAvailable())
68 {
69 throw new IllegalArgumentException("row is unavailable");
70 }
71 return _data.get(_rowIndex);
72 }
73
74 @Override
75 public int getRowIndex()
76 {
77 return _rowIndex;
78 }
79
80 @Override
81 public Object getWrappedData()
82 {
83 return _data;
84 }
85
86 @Override
87 public boolean isRowAvailable()
88 {
89 return _data != null && _rowIndex >= 0 && _rowIndex < _data.size();
90 }
91
92 @Override
93 public void setRowIndex(int rowIndex)
94 {
95 if (rowIndex < -1)
96 {
97 throw new IllegalArgumentException("illegal rowIndex " + rowIndex);
98 }
99 int oldRowIndex = _rowIndex;
100 _rowIndex = rowIndex;
101 if (_data != null && oldRowIndex != _rowIndex)
102 {
103 E data = isRowAvailable() ? getRowData() : null;
104 DataModelEvent event = new DataModelEvent(this, _rowIndex, data);
105 DataModelListener[] listeners = getDataModelListeners();
106 for (int i = 0; i < listeners.length; i++)
107 {
108 listeners[i].rowSelected(event);
109 }
110 }
111 }
112
113 @Override
114 public void setWrappedData(Object data)
115 {
116 if (data == null)
117 {
118 setRowIndex(-1);
119 _data = null;
120 }
121 else
122 {
123 _data = (List<E>)data;
124 _rowIndex = -1;
125 setRowIndex(0);
126 }
127 }
128
129 }