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