Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
DataModel |
|
| 0.0;0 |
1 | /* | |
2 | * Licensed to the Apache Software Foundation (ASF) under one | |
3 | * or more contributor license agreements. See the NOTICE file | |
4 | * distributed with this work for additional information | |
5 | * regarding copyright ownership. The ASF licenses this file | |
6 | * to you under the Apache License, Version 2.0 (the | |
7 | * "License"); you may not use this file except in compliance | |
8 | * with the License. You may obtain a copy of the License at | |
9 | * | |
10 | * http://www.apache.org/licenses/LICENSE-2.0 | |
11 | * | |
12 | * Unless required by applicable law or agreed to in writing, | |
13 | * software distributed under the License is distributed on an | |
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
15 | * KIND, either express or implied. See the License for the | |
16 | * specific language governing permissions and limitations | |
17 | * under the License. | |
18 | */ | |
19 | package javax.faces.model; | |
20 | ||
21 | import java.util.ArrayList; | |
22 | import java.util.List; | |
23 | ||
24 | /** | |
25 | * Represents the data presented by a UIData component, together with | |
26 | * some state information about the currently selected row within the | |
27 | * datalist for use by listeners on UIData components. This class allows | |
28 | * managed bean code to avoid binding directly to UIData components for | |
29 | * typical uses. | |
30 | * <p> | |
31 | * Note that DataModel and its standard subclasses are not serializable, | |
32 | * as there is no state in a DataModel object itself that needs to be | |
33 | * preserved between render and restore-view. UIData components therefore | |
34 | * do not store their DataModel when serialized; they just evaluate their | |
35 | * "value" EL expression to refetch the object during the | |
36 | * apply-request-values phase. | |
37 | * <p> | |
38 | * Because DataModel is not serializable, any managed bean that needs to | |
39 | * be serialized and which has a member of type DataModel should therefore | |
40 | * mark that member transient. If there is a need to preserve the datalist | |
41 | * contained within the DataModel then ensure a reference to that list is | |
42 | * stored in a non-transient member, or use a custom serialization method | |
43 | * that explicitly serializes dataModel.getWrappedData. | |
44 | * | |
45 | * See Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a> for more. | |
46 | * | |
47 | * @author Thomas Spiegl (latest modification by $Author: skitching $) | |
48 | * @version $Revision: 676298 $ $Date: 2008-07-13 05:31:48 -0500 (Sun, 13 Jul 2008) $ | |
49 | */ | |
50 | 0 | public abstract class DataModel |
51 | { | |
52 | // FIELDS | |
53 | private List<DataModelListener> _listeners; | |
54 | ||
55 | // METHODS | |
56 | public void addDataModelListener(DataModelListener listener) | |
57 | { | |
58 | 0 | if (listener == null) throw new NullPointerException("listener"); |
59 | 0 | if (_listeners == null) |
60 | { | |
61 | 0 | _listeners = new ArrayList<DataModelListener>(); |
62 | } | |
63 | 0 | _listeners.add(listener); |
64 | 0 | } |
65 | ||
66 | public DataModelListener[] getDataModelListeners() | |
67 | { | |
68 | 0 | if (_listeners == null) |
69 | { | |
70 | 0 | return new DataModelListener[0]; |
71 | } | |
72 | 0 | return _listeners.toArray(new DataModelListener[_listeners.size()]); |
73 | } | |
74 | ||
75 | /** | |
76 | * Return the number of rows of data available. | |
77 | * <p> | |
78 | * If the number of rows of data available is not known then -1 is returned. | |
79 | * This may happen for DataModels that wrap sources of data such as | |
80 | * java.sql.ResultSet that provide an iterator to access the "next item" | |
81 | * rather than a fixed-size collection of data. | |
82 | */ | |
83 | abstract public int getRowCount(); | |
84 | ||
85 | /** | |
86 | * Return the object associated with the current row index. | |
87 | * <p> | |
88 | * Method isRowAvailable may be called before attempting to access | |
89 | * this method, to ensure that the data is available. | |
90 | * | |
91 | * @throws RuntimeException subclass of some kind if the current row index | |
92 | * is not within the range of the current wrappedData property. | |
93 | */ | |
94 | abstract public Object getRowData(); | |
95 | ||
96 | /** | |
97 | * Get the current row index. | |
98 | */ | |
99 | abstract public int getRowIndex(); | |
100 | ||
101 | /** | |
102 | * Get the entire collection of data associated with this component. Note that | |
103 | * the actual type of the returned object depends upon the concrete | |
104 | * subclass of DataModel; the object will represent an "ordered sequence | |
105 | * of components", but may be implemented as an array, java.util.List, | |
106 | * java.sql.ResultSet or other similar types. | |
107 | */ | |
108 | abstract public Object getWrappedData(); | |
109 | ||
110 | /** | |
111 | * Returns true if a call to getRowData will return a valid object. | |
112 | */ | |
113 | abstract public boolean isRowAvailable(); | |
114 | ||
115 | public void removeDataModelListener(DataModelListener listener) | |
116 | { | |
117 | 0 | if (listener == null) throw new NullPointerException("listener"); |
118 | 0 | if (_listeners != null) |
119 | { | |
120 | 0 | _listeners.remove(listener); |
121 | } | |
122 | 0 | } |
123 | ||
124 | /** | |
125 | * Set the current row index. This affects the behaviour of the | |
126 | * getRowData method in particular. | |
127 | * | |
128 | * Parameter rowIndex may be -1 to indicate "no row", or may be a value | |
129 | * between 0 and getRowCount()-1. | |
130 | */ | |
131 | abstract public void setRowIndex(int rowIndex); | |
132 | ||
133 | /** | |
134 | * Set the entire list of data associated with this component. Note that | |
135 | * the actual type of the provided object must match the expectations | |
136 | * of the concrete subclass of DataModel. See getWrappedData. | |
137 | */ | |
138 | abstract public void setWrappedData(Object data); | |
139 | } |