EMMA Coverage Report (generated Tue Jul 10 07:50:22 IST 2012)
[all classes][org.wso2.siddhi.core.stream.handler.window]

COVERAGE SUMMARY FOR SOURCE FILE [TimeWindowHandler.java]

nameclass, %method, %block, %line, %
TimeWindowHandler.java100% (1/1)100% (4/4)85%  (101/119)83%  (25/30)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TimeWindowHandler100% (1/1)100% (4/4)85%  (101/119)83%  (25/30)
process (ComplexEvent): void 100% (1/1)72%  (38/53)73%  (8/11)
run (): void 100% (1/1)93%  (38/41)86%  (12/14)
TimeWindowHandler (): void 100% (1/1)100% (3/3)100% (1/1)
setParameters (Object []): void 100% (1/1)100% (22/22)100% (4/4)

1/*
2*  Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
3*
4*  WSO2 Inc. licenses this file to you under the Apache License,
5*  Version 2.0 (the "License"); you may not use this file except
6*  in compliance with the License.
7*  You may obtain a copy of the License at
8*
9*    http://www.apache.org/licenses/LICENSE-2.0
10*
11* Unless required by applicable law or agreed to in writing,
12* software distributed under the License is distributed on an
13* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14* KIND, either express or implied.  See the License for the
15* specific language governing permissions and limitations
16* under the License.
17*/
18package org.wso2.siddhi.core.stream.handler.window;
19 
20import org.wso2.siddhi.core.event.ComplexEvent;
21import org.wso2.siddhi.core.event.Event;
22import org.wso2.siddhi.core.event.ListEvent;
23import org.wso2.siddhi.core.event.StreamEvent;
24import org.wso2.siddhi.core.event.remove.RemoveEvent;
25import org.wso2.siddhi.core.event.remove.RemoveListEvent;
26import org.wso2.siddhi.core.event.remove.RemoveStream;
27import org.wso2.siddhi.query.api.expression.constant.IntConstant;
28 
29import java.util.concurrent.TimeUnit;
30 
31public class TimeWindowHandler extends WindowHandler implements Runnable {
32 
33    int timeToKeep;
34 
35    @Override
36    public void setParameters(Object[] parameters) {
37        if (parameters[0] instanceof Integer) {
38            timeToKeep = (Integer) parameters[0];
39        } else {
40            timeToKeep = ((IntConstant) parameters[0]).getValue();
41        }
42    }
43 
44    @Override
45    public void process(ComplexEvent complexEvent) {
46        if (complexEvent instanceof StreamEvent) {
47            try {
48                StreamEvent streamEvent;
49                if (complexEvent instanceof Event) {
50                    streamEvent = new RemoveEvent(((Event) complexEvent), System.currentTimeMillis() + timeToKeep);
51                } else {
52                    streamEvent = new RemoveListEvent(((ListEvent) complexEvent).getEvents(), System.currentTimeMillis() + timeToKeep);
53                }
54                if (!getWindow().put(streamEvent)) {
55                    getEventRemoverScheduler().schedule(this, timeToKeep, TimeUnit.MILLISECONDS);
56                }
57            } catch (InterruptedException e) {
58                e.printStackTrace();
59            }
60            getNextPreStreamFlowProcessor().process(complexEvent);
61        }
62    }
63 
64 
65    @Override
66    public void run() {
67        while (true) {
68            StreamEvent streamEvent = getWindow().peek();
69            try {
70                if (streamEvent == null) {
71                    break;
72                }
73                long timeDiff = ((RemoveStream) streamEvent).getExpiryTime() - System.currentTimeMillis();
74                if (timeDiff > 0) {
75                    getEventRemoverScheduler().schedule(this, timeDiff, TimeUnit.MILLISECONDS);
76                    break;
77                } else {
78                    streamEvent = getWindow().poll();
79                    getNextPreStreamFlowProcessor().process(streamEvent);
80                }
81            } catch (Throwable e) {
82                e.printStackTrace();
83            }
84        }
85    }
86}
87 

[all classes][org.wso2.siddhi.core.stream.handler.window]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov