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.SortedMap;
22
23 import javax.servlet.jsp.jstl.sql.Result;
24
25
26
27
28
29
30
31
32 public class ResultDataModel extends DataModel<SortedMap<String, Object>>
33 {
34
35 private int _rowIndex = -1;
36 private Result _data;
37
38
39 public ResultDataModel()
40 {
41 super();
42 }
43
44 public ResultDataModel(Result result)
45 {
46 if (result == null)
47 {
48 throw new NullPointerException("result");
49 }
50 setWrappedData(result);
51 }
52
53
54 @Override
55 public int getRowCount()
56 {
57 if (getRows() == null)
58 {
59 return -1;
60 }
61 return getRows().length;
62 }
63
64 @Override
65 public SortedMap<String, Object> getRowData()
66 {
67 if (getRows() == null)
68 {
69 return null;
70 }
71 if (!isRowAvailable())
72 {
73 throw new IllegalArgumentException("row is unavailable");
74 }
75 return getRows()[_rowIndex];
76 }
77
78 @Override
79 public int getRowIndex()
80 {
81 return _rowIndex;
82 }
83
84 @Override
85 public Object getWrappedData()
86 {
87 return _data;
88 }
89
90 @Override
91 public boolean isRowAvailable()
92 {
93 return getRows() != null && _rowIndex >= 0 && _rowIndex < getRows().length;
94 }
95
96 @Override
97 public void setRowIndex(int rowIndex)
98 {
99 if (rowIndex < -1)
100 {
101 throw new IllegalArgumentException("illegal rowIndex " + rowIndex);
102 }
103 int oldRowIndex = _rowIndex;
104 _rowIndex = rowIndex;
105 if (getRows() != null && oldRowIndex != _rowIndex)
106 {
107 SortedMap<String, Object> data = isRowAvailable() ? getRowData() : null;
108 DataModelEvent event = new DataModelEvent(this, _rowIndex, data);
109 DataModelListener[] listeners = getDataModelListeners();
110 for (int i = 0; i < listeners.length; i++)
111 {
112 listeners[i].rowSelected(event);
113 }
114 }
115 }
116
117 private SortedMap<String, Object>[] getRows()
118 {
119 if (_data == null)
120 {
121 return null;
122 }
123
124 return _data.getRows();
125 }
126
127 @Override
128 public void setWrappedData(Object data)
129 {
130 if (data == null)
131 {
132 setRowIndex(-1);
133 _data = null;
134 }
135 else
136 {
137 _data = ((Result)data);
138 _rowIndex = -1;
139 setRowIndex(0);
140 }
141 }
142
143 }