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