EMMA Coverage Report (generated Mon Mar 20 21:27:43 EST 2006)
[all classes][com.webhydra.slug.process]

COVERAGE SUMMARY FOR SOURCE FILE [SluggishProcess.java]

nameclass, %method, %block, %line, %
SluggishProcess.java100% (1/1)100% (7/7)100% (78/78)100% (21/21)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class SluggishProcess100% (1/1)100% (7/7)100% (78/78)100% (21/21)
SluggishProcess (): void 100% (1/1)100% (3/3)100% (1/1)
cancel (): void 100% (1/1)100% (8/8)100% (2/2)
getProcessStatus (): ProcessStatus 100% (1/1)100% (3/3)100% (1/1)
postExecute (): ProcessStatus 100% (1/1)100% (23/23)100% (3/3)
preExecute (): ProcessStatus 100% (1/1)100% (6/6)100% (1/1)
run (): void 100% (1/1)100% (31/31)100% (11/11)
setProcessStatus (ProcessStatus): void 100% (1/1)100% (4/4)100% (2/2)

1/*
2 * @(#) $Id: SluggishProcess.java,v 1.1.1.1 2006/03/19 06:09:42 rossen Exp $
3 *
4 * Copyright (c) 2006, WebHydra.com
5 * All rights reserved.
6 * 
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 * 
10 *     * Redistributions of source code must retain the above copyright notice,
11 *       this list of conditions and the following disclaimer.
12 *     * Redistributions in binary form must reproduce the above copyright
13 *       notice, this list of conditions and the following disclaimer in the
14 *       documentation and/or other materials provided with the distribution.
15 *     * Neither the name of the WebHydra.com nor the names of its contributors
16 *       may be used to endorse or promote products derived from this software
17 *       without specific prior written permission.
18 * 
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31 
32package com.webhydra.slug.process;
33 
34import javax.servlet.http.HttpSession;
35 
36/**
37 * SluggishProcess - Extend this process and implement its execute() method in
38 * order to implement a SluggishProcess.
39 * @author rossen
40 */
41public abstract class SluggishProcess implements Runnable
42{
43    /**
44     * Holds value of property status.
45     */
46    private ProcessStatus status;
47 
48    /**
49     * Getter for property status.
50     * @return Value of property status.
51     */
52    public synchronized ProcessStatus getProcessStatus()
53    {
54        return this.status;
55    }
56 
57    /**
58     * Setter for property status.
59     * @param status New value of property status.
60     */
61    public synchronized void setProcessStatus(ProcessStatus status)
62    {
63        this.status = status;
64    }
65 
66    /**
67     * Interface implementation.
68     */
69    public void run() {
70        try
71        {
72            ProcessStatus status = preExecute();
73            setProcessStatus(status);
74            status = execute();
75            setProcessStatus(status);
76            status = postExecute();
77            setProcessStatus(status);
78        }
79        catch (Throwable t)
80        {
81            t.printStackTrace();
82            setProcessStatus(new ProcessStatus(Status.FAILED, t.getMessage()));
83        }
84    }
85 
86    /**
87     * Application defined method responsible for the long lasting action or series of actions.
88     * @return Updated ProcessStatus
89     * @exception Exception arbitrary exception.
90     */
91    public abstract ProcessStatus execute() throws Exception;
92 
93    /**
94     * Iteaction point allowing cancelation of a process.
95     * Default implementation only changes PoressStaus property.
96     * Override this methid if you can provide real process interruption and cancelation.
97     */
98    public void cancel()
99    {
100        setProcessStatus(new ProcessStatus(Status.CANCELED, "Canceled!"));
101    }
102 
103    /**
104     * Provides pre execution hook for process customization.
105     * Default implementation only changes ProcessStatus to <code>Status.RUNNING</code>
106     * @return Returns updated ProcessStatus.
107     */
108    public ProcessStatus preExecute()
109    {
110        return new ProcessStatus(Status.RUNNING,"Started...");
111    }
112 
113    /**
114     * Provides post execution hook for process customization.
115     * Default implementation only changes ProcessStatus to <code>Status.COMPLETED</code>
116     * if curren status is <code>Status.RUNNING</code>. Any other status is preserved unchanged.
117     * @return Updated PorcessStatus
118     */
119    public ProcessStatus postExecute()
120    {
121        if (getProcessStatus() == null)
122        {
123            return new ProcessStatus(Status.FAILED, "Execution status not provided!");
124        }
125        return (getProcessStatus().getStatus() == Status.RUNNING) ?
126            new ProcessStatus(Status.COMPLETED,"Done.") : getProcessStatus();
127    }
128 
129}

[all classes][com.webhydra.slug.process]
EMMA 2.0.5312 (C) Vladimir Roubtsov