This file is indexed.

/usr/share/doc/libolap4j-java/api/src-html/org/olap4j/CellSetListener.AxisChange.html is in libolap4j-java-doc 1.0.1.500-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span>// $Id: CellSetListener.java 482 2012-01-05 23:27:27Z jhyde $<a name="line.2"></a>
<span class="sourceLineNo">003</span>//<a name="line.3"></a>
<span class="sourceLineNo">004</span>// Licensed to Julian Hyde under one or more contributor license<a name="line.4"></a>
<span class="sourceLineNo">005</span>// agreements. See the NOTICE file distributed with this work for<a name="line.5"></a>
<span class="sourceLineNo">006</span>// additional information regarding copyright ownership.<a name="line.6"></a>
<span class="sourceLineNo">007</span>//<a name="line.7"></a>
<span class="sourceLineNo">008</span>// Julian Hyde licenses this file to you under the Apache License,<a name="line.8"></a>
<span class="sourceLineNo">009</span>// Version 2.0 (the "License"); you may not use this file except in<a name="line.9"></a>
<span class="sourceLineNo">010</span>// compliance with the License. You may obtain a copy of the License at:<a name="line.10"></a>
<span class="sourceLineNo">011</span>//<a name="line.11"></a>
<span class="sourceLineNo">012</span>// http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span>//<a name="line.13"></a>
<span class="sourceLineNo">014</span>// Unless required by applicable law or agreed to in writing, software<a name="line.14"></a>
<span class="sourceLineNo">015</span>// distributed under the License is distributed on an "AS IS" BASIS,<a name="line.15"></a>
<span class="sourceLineNo">016</span>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.16"></a>
<span class="sourceLineNo">017</span>// See the License for the specific language governing permissions and<a name="line.17"></a>
<span class="sourceLineNo">018</span>// limitations under the License.<a name="line.18"></a>
<span class="sourceLineNo">019</span>*/<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.olap4j;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
<span class="sourceLineNo">025</span> * Listener interface for receiving events when the contents of a<a name="line.25"></a>
<span class="sourceLineNo">026</span> * {@link CellSet} have changed.<a name="line.26"></a>
<span class="sourceLineNo">027</span> *<a name="line.27"></a>
<span class="sourceLineNo">028</span> * &lt;p&gt;NOTE: This functionality is experimental and is subject to change or<a name="line.28"></a>
<span class="sourceLineNo">029</span> * removal without notice.<a name="line.29"></a>
<span class="sourceLineNo">030</span> *<a name="line.30"></a>
<span class="sourceLineNo">031</span> * &lt;p&gt;The client can ask the server to provide the listener with a specific<a name="line.31"></a>
<span class="sourceLineNo">032</span> * {@link Granularity granularity} of events, but the server can decline to<a name="line.32"></a>
<span class="sourceLineNo">033</span> * provide that granularity.<a name="line.33"></a>
<span class="sourceLineNo">034</span> *<a name="line.34"></a>
<span class="sourceLineNo">035</span> * &lt;p&gt;Fine granularity deals with changes such as cell values changing (and<a name="line.35"></a>
<span class="sourceLineNo">036</span> * reports the before and after value, before and after formatted value),<a name="line.36"></a>
<span class="sourceLineNo">037</span> * positions being deleted, positions being changed.<a name="line.37"></a>
<span class="sourceLineNo">038</span> *<a name="line.38"></a>
<span class="sourceLineNo">039</span> * &lt;p&gt;When an atomic change happens on the server (say a cache flush, if the<a name="line.39"></a>
<span class="sourceLineNo">040</span> * server is mondrian) then an event will arrive on the client containing all of<a name="line.40"></a>
<span class="sourceLineNo">041</span> * those changes. Although {@link CellSetChange#getCellChanges} and<a name="line.41"></a>
<span class="sourceLineNo">042</span> * {@link CellSetChange#getAxisChanges} return lists, the client should assume<a name="line.42"></a>
<span class="sourceLineNo">043</span> * that all of the events in these lists simultaneously.<a name="line.43"></a>
<span class="sourceLineNo">044</span> *<a name="line.44"></a>
<span class="sourceLineNo">045</span> * &lt;p&gt;At any point, the server is free to throw up its hands and say 'there are<a name="line.45"></a>
<span class="sourceLineNo">046</span> * too many changes' by sending null values for {@code getCellChanges} or<a name="line.46"></a>
<span class="sourceLineNo">047</span> * {@code getAxisChanges}. This prevents situations where there are huge numbers<a name="line.47"></a>
<span class="sourceLineNo">048</span> * of changes that might overwhelm the server, the network link, or the client,<a name="line.48"></a>
<span class="sourceLineNo">049</span> * such as might happen if a large axis is re-sorted.<a name="line.49"></a>
<span class="sourceLineNo">050</span> *<a name="line.50"></a>
<span class="sourceLineNo">051</span> * &lt;p&gt;The client should always be ready for that to happen (even for providers<a name="line.51"></a>
<span class="sourceLineNo">052</span> * that claim to provide fine granularity events), and should re-execute the<a name="line.52"></a>
<span class="sourceLineNo">053</span> * query to get the cell set. In fact, we recommend that clients re-execute the<a name="line.53"></a>
<span class="sourceLineNo">054</span> * query to get a new cellset whenever they get an event. Then the client can<a name="line.54"></a>
<span class="sourceLineNo">055</span> * use the details in the event to highlight cells that have changed.<a name="line.55"></a>
<span class="sourceLineNo">056</span> *<a name="line.56"></a>
<span class="sourceLineNo">057</span> * &lt;h3&gt;Notes for implementors&lt;/h3&gt;<a name="line.57"></a>
<span class="sourceLineNo">058</span> *<a name="line.58"></a>
<span class="sourceLineNo">059</span> * &lt;p&gt;The purpose of registering a listener before creating a cell set is to<a name="line.59"></a>
<span class="sourceLineNo">060</span> * ensure that no events "leak out" between creating a cell set and registering<a name="line.60"></a>
<span class="sourceLineNo">061</span> * a listener, or while a statement is being re-executed to produce a new cell<a name="line.61"></a>
<span class="sourceLineNo">062</span> * set.<a name="line.62"></a>
<span class="sourceLineNo">063</span> *<a name="line.63"></a>
<span class="sourceLineNo">064</span> * &lt;p&gt;The {@link #cellSetOpened(CellSet)} and {@link #cellSetClosed(CellSet)}<a name="line.64"></a>
<span class="sourceLineNo">065</span> * methods are provided so that the listener knows what is going on when a<a name="line.65"></a>
<span class="sourceLineNo">066</span> * statement is re-executed. In particular, suppose a statement receives an<a name="line.66"></a>
<span class="sourceLineNo">067</span> * change event decides to re-execute. The listener is attached to the<a name="line.67"></a>
<span class="sourceLineNo">068</span> * statement, so receives notifications about both old and new cell sets. The<a name="line.68"></a>
<span class="sourceLineNo">069</span> * driver implicitls closes the previous cell set and calls<a name="line.69"></a>
<span class="sourceLineNo">070</span> * {@code cellSetClosed}, then calls {@code cellSetOpened} with the new cell<a name="line.70"></a>
<span class="sourceLineNo">071</span> * set.<a name="line.71"></a>
<span class="sourceLineNo">072</span> *<a name="line.72"></a>
<span class="sourceLineNo">073</span> * &lt;p&gt;If changes are occurring regularly on the server, there will soon be a<a name="line.73"></a>
<span class="sourceLineNo">074</span> * call to {@link #cellSetChanged}. It is important to note that this event<a name="line.74"></a>
<span class="sourceLineNo">075</span> * contains only changes that have occurred since the new cell set was opened.<a name="line.75"></a>
<span class="sourceLineNo">076</span> *<a name="line.76"></a>
<span class="sourceLineNo">077</span> * &lt;p&gt;The granularity parameter is provided to {@link OlapStatement#addListener}<a name="line.77"></a>
<span class="sourceLineNo">078</span> * for the server's benefit. If granularity is only {@link Granularity#COARSE},<a name="line.78"></a>
<span class="sourceLineNo">079</span> * the server may be able to store less information in order to track the cell<a name="line.79"></a>
<span class="sourceLineNo">080</span> * set.<a name="line.80"></a>
<span class="sourceLineNo">081</span> *<a name="line.81"></a>
<span class="sourceLineNo">082</span> * @version $Id: CellSetListener.java 482 2012-01-05 23:27:27Z jhyde $<a name="line.82"></a>
<span class="sourceLineNo">083</span> */<a name="line.83"></a>
<span class="sourceLineNo">084</span>public interface CellSetListener {<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>    /**<a name="line.86"></a>
<span class="sourceLineNo">087</span>     * Invoked when a cell set is opened.<a name="line.87"></a>
<span class="sourceLineNo">088</span>     *<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * @param cellSet Cell set<a name="line.89"></a>
<span class="sourceLineNo">090</span>     */<a name="line.90"></a>
<span class="sourceLineNo">091</span>    void cellSetOpened(CellSet cellSet);<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * Invoked when a cell set is closed.<a name="line.94"></a>
<span class="sourceLineNo">095</span>     *<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * @param cellSet Cell set<a name="line.96"></a>
<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
<span class="sourceLineNo">098</span>    void cellSetClosed(CellSet cellSet);<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>    /**<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * Invoked when a cell set has changed.<a name="line.101"></a>
<span class="sourceLineNo">102</span>     *<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * @param cellSetChange Change descriptor<a name="line.103"></a>
<span class="sourceLineNo">104</span>     */<a name="line.104"></a>
<span class="sourceLineNo">105</span>    void cellSetChanged(CellSetChange cellSetChange);<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>    /**<a name="line.107"></a>
<span class="sourceLineNo">108</span>     * Granularity of notifications that should be sent to a cellset listener.<a name="line.108"></a>
<span class="sourceLineNo">109</span>     */<a name="line.109"></a>
<span class="sourceLineNo">110</span>    enum Granularity {<a name="line.110"></a>
<span class="sourceLineNo">111</span>        FINE,<a name="line.111"></a>
<span class="sourceLineNo">112</span>        COARSE<a name="line.112"></a>
<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>    /**<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * Description of changes that have occurred to the cell set.<a name="line.116"></a>
<span class="sourceLineNo">117</span>     */<a name="line.117"></a>
<span class="sourceLineNo">118</span>    interface CellSetChange {<a name="line.118"></a>
<span class="sourceLineNo">119</span>        /**<a name="line.119"></a>
<span class="sourceLineNo">120</span>         * Returns the cell set affected by this change.<a name="line.120"></a>
<span class="sourceLineNo">121</span>         *<a name="line.121"></a>
<span class="sourceLineNo">122</span>         * @return Cell set affected by this change.<a name="line.122"></a>
<span class="sourceLineNo">123</span>         */<a name="line.123"></a>
<span class="sourceLineNo">124</span>        CellSet getCellSet();<a name="line.124"></a>
<span class="sourceLineNo">125</span><a name="line.125"></a>
<span class="sourceLineNo">126</span>        /**<a name="line.126"></a>
<span class="sourceLineNo">127</span>         * Returns a list of cells that have changed, or null if the server<a name="line.127"></a>
<span class="sourceLineNo">128</span>         * cannot provide detailed changes.<a name="line.128"></a>
<span class="sourceLineNo">129</span>         *<a name="line.129"></a>
<span class="sourceLineNo">130</span>         * &lt;p&gt;The server is always at liberty to provide a {@code CellSetChange}<a name="line.130"></a>
<span class="sourceLineNo">131</span>         * without a detailed list of changes, even if<a name="line.131"></a>
<span class="sourceLineNo">132</span>         * {@link Granularity#COARSE} was specified when the listener was<a name="line.132"></a>
<span class="sourceLineNo">133</span>         * attached. Here are some typical reasons:&lt;ul&gt;<a name="line.133"></a>
<span class="sourceLineNo">134</span>         *<a name="line.134"></a>
<span class="sourceLineNo">135</span>         * &lt;li&gt;If there are very many changes. (Transmitting these changes over<a name="line.135"></a>
<span class="sourceLineNo">136</span>         * the network would be costly, and the user interface also might<a name="line.136"></a>
<span class="sourceLineNo">137</span>         * struggle to redisplay so many cells.)<a name="line.137"></a>
<span class="sourceLineNo">138</span>         *<a name="line.138"></a>
<span class="sourceLineNo">139</span>         * &lt;li&gt;If the axes have changed significantly. (If an axis position has<a name="line.139"></a>
<span class="sourceLineNo">140</span>         * changed, all of the cells at that position will necssarily have<a name="line.140"></a>
<span class="sourceLineNo">141</span>         * changed.)<a name="line.141"></a>
<span class="sourceLineNo">142</span>         *<a name="line.142"></a>
<span class="sourceLineNo">143</span>         * &lt;li&gt;If the client did not ask for detailed changes<a name="line.143"></a>
<span class="sourceLineNo">144</span>         *<a name="line.144"></a>
<span class="sourceLineNo">145</span>         * &lt;li&gt;If the the provider is not capable of giving detailed changes.<a name="line.145"></a>
<span class="sourceLineNo">146</span>         * &lt;/ul&gt;<a name="line.146"></a>
<span class="sourceLineNo">147</span>         */<a name="line.147"></a>
<span class="sourceLineNo">148</span>        List&lt;CellChange&gt; getCellChanges();<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>        /**<a name="line.150"></a>
<span class="sourceLineNo">151</span>         * Returns a list of axis changes, or null if server cannot provide<a name="line.151"></a>
<span class="sourceLineNo">152</span>         * detailed changes.<a name="line.152"></a>
<span class="sourceLineNo">153</span>         *<a name="line.153"></a>
<span class="sourceLineNo">154</span>         * &lt;p&gt;The reasons why this method returns null are similar to the<a name="line.154"></a>
<span class="sourceLineNo">155</span>         * reasons why {@link #getCellChanges()} returns null.<a name="line.155"></a>
<span class="sourceLineNo">156</span>         *<a name="line.156"></a>
<span class="sourceLineNo">157</span>         * @return List of changes to positions on axes, or null if the server<a name="line.157"></a>
<span class="sourceLineNo">158</span>         * cannot provide detailed changes.<a name="line.158"></a>
<span class="sourceLineNo">159</span>         */<a name="line.159"></a>
<span class="sourceLineNo">160</span>        List&lt;AxisChange&gt; getAxisChanges();<a name="line.160"></a>
<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
<span class="sourceLineNo">162</span><a name="line.162"></a>
<span class="sourceLineNo">163</span>    /**<a name="line.163"></a>
<span class="sourceLineNo">164</span>     * Description of a change to a particular {@link Cell}; part of a<a name="line.164"></a>
<span class="sourceLineNo">165</span>     * {@link CellSetChange}.<a name="line.165"></a>
<span class="sourceLineNo">166</span>     */<a name="line.166"></a>
<span class="sourceLineNo">167</span>    interface CellChange {<a name="line.167"></a>
<span class="sourceLineNo">168</span>        /**<a name="line.168"></a>
<span class="sourceLineNo">169</span>         * Returns the cell before the change.<a name="line.169"></a>
<span class="sourceLineNo">170</span>         */<a name="line.170"></a>
<span class="sourceLineNo">171</span>        Cell getBeforeCell();<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>        /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>         * Returns the cell after the change.<a name="line.174"></a>
<span class="sourceLineNo">175</span>         */<a name="line.175"></a>
<span class="sourceLineNo">176</span>        Cell getAfterCell();<a name="line.176"></a>
<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>    /**<a name="line.179"></a>
<span class="sourceLineNo">180</span>     * Description of a change to a particular {@link CellSetAxis}; part of a<a name="line.180"></a>
<span class="sourceLineNo">181</span>     * {@link CellSetChange}.<a name="line.181"></a>
<span class="sourceLineNo">182</span>     */<a name="line.182"></a>
<span class="sourceLineNo">183</span>    interface AxisChange {<a name="line.183"></a>
<span class="sourceLineNo">184</span>        /**<a name="line.184"></a>
<span class="sourceLineNo">185</span>         * Returns the axis affected by this change.<a name="line.185"></a>
<span class="sourceLineNo">186</span>         *<a name="line.186"></a>
<span class="sourceLineNo">187</span>         * @return Axis affected by this change<a name="line.187"></a>
<span class="sourceLineNo">188</span>         */<a name="line.188"></a>
<span class="sourceLineNo">189</span>        CellSetAxis getAxis();<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
<span class="sourceLineNo">191</span>        /**<a name="line.191"></a>
<span class="sourceLineNo">192</span>         * Returns the position before the change. Null if the change created a<a name="line.192"></a>
<span class="sourceLineNo">193</span>         * new position.<a name="line.193"></a>
<span class="sourceLineNo">194</span>         *<a name="line.194"></a>
<span class="sourceLineNo">195</span>         * @return Position before the change, or null if the position is newly<a name="line.195"></a>
<span class="sourceLineNo">196</span>         * created<a name="line.196"></a>
<span class="sourceLineNo">197</span>         */<a name="line.197"></a>
<span class="sourceLineNo">198</span>        Position getBeforePosition();<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>        /**<a name="line.200"></a>
<span class="sourceLineNo">201</span>         * Returns the position after the change. Null if the change deleted<a name="line.201"></a>
<span class="sourceLineNo">202</span>         * this position.<a name="line.202"></a>
<span class="sourceLineNo">203</span>         *<a name="line.203"></a>
<span class="sourceLineNo">204</span>         * @return Position after the change, or null if the position is deleted<a name="line.204"></a>
<span class="sourceLineNo">205</span>         */<a name="line.205"></a>
<span class="sourceLineNo">206</span>        Position getAfterPosition();<a name="line.206"></a>
<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
<span class="sourceLineNo">208</span>}<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>// End CellSetListener.java<a name="line.210"></a>




























































</pre>
</div>
</body>
</html>