001/*
002 *   Copyright (C) Christian Schulte, 2005-206
003 *   All rights reserved.
004 *
005 *   Redistribution and use in source and binary forms, with or without
006 *   modification, are permitted provided that the following conditions
007 *   are met:
008 *
009 *     o Redistributions of source code must retain the above copyright
010 *       notice, this list of conditions and the following disclaimer.
011 *
012 *     o Redistributions in binary form must reproduce the above copyright
013 *       notice, this list of conditions and the following disclaimer in
014 *       the documentation and/or other materials provided with the
015 *       distribution.
016 *
017 *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
018 *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
019 *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
020 *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
021 *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
022 *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
023 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
024 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
026 *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027 *
028 *   $JOMC: AntExecutionResult.java 4613 2012-09-22 10:07:08Z schulte $
029 *
030 */
031package org.jomc.ant.test.support;
032
033import java.util.LinkedList;
034import java.util.List;
035import org.apache.tools.ant.BuildEvent;
036
037/**
038 * Result of an execution of an Ant target.
039 *
040 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
041 * @version $JOMC: AntExecutionResult.java 4613 2012-09-22 10:07:08Z schulte $
042 */
043public class AntExecutionResult
044{
045
046    /** The characters written to the system output stream during execution of the target. */
047    private String systemOutput;
048
049    /** The characters written to the system error stream during execution of the target. */
050    private String systemError;
051
052    /** List of {@code buildStarted} events fired during execution of the target. */
053    private List<BuildEvent> buildStartedEvents;
054
055    /** List of {@code buildFinished} events fired during execution of the target. */
056    private List<BuildEvent> buildFinishedEvents;
057
058    /** List of {@code targetStarted} events fired during execution of the target. */
059    private List<BuildEvent> targetStartedEvents;
060
061    /** List of {@code targetFinished} events fired during execution of the target. */
062    private List<BuildEvent> targetFinishedEvents;
063
064    /** List of {@code taskStarted} events fired during execution of the target. */
065    private List<BuildEvent> taskStartedEvents;
066
067    /** List of {@code taskFinished} events fired during execution of the target. */
068    private List<BuildEvent> taskFinishedEvents;
069
070    /** List of {@code messageLogged} events fired during execution of the target. */
071    private List<BuildEvent> messageLoggedEvents;
072
073    /** The throwable thrown by the execution of the target. */
074    private Throwable throwable;
075
076    /**  Creates a new {@code AntExecutionResult}. */
077    public AntExecutionResult()
078    {
079        super();
080    }
081
082    /**
083     * Gets the characters written to the system output stream during execution of the target.
084     *
085     * @return The characters written to the system output stream during execution of the target or {@code null}.
086     */
087    public final String getSystemOutput()
088    {
089        return this.systemOutput;
090    }
091
092    /**
093     * Set the characters written to the system output stream during execution of the target.
094     *
095     * @param value The new characters written to the system output stream during execution of the target or
096     * {@code null}.
097     */
098    public final void setSystemOutput( final String value )
099    {
100        this.systemOutput = value;
101    }
102
103    /**
104     * Gets the characters written to the system error stream during execution of the target.
105     *
106     * @return The characters written to the system error stream during execution of the target or {@code null}.
107     */
108    public final String getSystemError()
109    {
110        return this.systemError;
111    }
112
113    /**
114     * Set the characters written to the system error stream during execution of the target.
115     *
116     * @param value The new characters written to the system error stream during execution of the target or
117     * {@code null}.
118     */
119    public final void setSystemError( final String value )
120    {
121        this.systemError = value;
122    }
123
124    /**
125     * Gets the throwable thrown by the execution of the target.
126     *
127     * @return The throwable thrown by the execution of the target or {@code null}.
128     */
129    public final Throwable getThrowable()
130    {
131        return this.throwable;
132    }
133
134    /**
135     * Sets the throwable thrown by the execution of the target.
136     *
137     * @param value The new throwable thrown by the execution of the target or {@code null}.
138     */
139    public final void setThrowable( final Throwable value )
140    {
141        this.throwable = value;
142    }
143
144    /**
145     * Gets the list of {@code buildStarted} events fired during execution of the target.
146     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
147     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
148     * build started events property.</p>
149     *
150     * @return The list of {@code buildStarted} events fired during execution of the target.
151     */
152    public final List<BuildEvent> getBuildStartedEvents()
153    {
154        if ( this.buildStartedEvents == null )
155        {
156            this.buildStartedEvents = new LinkedList<BuildEvent>();
157        }
158
159        return this.buildStartedEvents;
160    }
161
162    /**
163     * Gets the list of {@code buildFinished} events fired during execution of the target.
164     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
165     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
166     * build finished events property.</p>
167     *
168     * @return The list of {@code buildFinished} events fired during execution of the target.
169     */
170    public final List<BuildEvent> getBuildFinishedEvents()
171    {
172        if ( this.buildFinishedEvents == null )
173        {
174            this.buildFinishedEvents = new LinkedList<BuildEvent>();
175        }
176
177        return this.buildFinishedEvents;
178    }
179
180    /**
181     * Gets the list of {@code targetStarted} events fired during execution of the target.
182     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
183     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
184     * target started events property.</p>
185     *
186     * @return The list of {@code targetStarted} events fired during execution of the target.
187     */
188    public final List<BuildEvent> getTargetStartedEvents()
189    {
190        if ( this.targetStartedEvents == null )
191        {
192            this.targetStartedEvents = new LinkedList<BuildEvent>();
193        }
194
195        return this.targetStartedEvents;
196    }
197
198    /**
199     * Gets the list of {@code targetFinished} events fired during execution of the target.
200     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
201     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
202     * target finished events property.</p>
203     *
204     * @return The list of {@code targetFinished} events fired during execution of the target.
205     */
206    public final List<BuildEvent> getTargetFinishedEvents()
207    {
208        if ( this.targetFinishedEvents == null )
209        {
210            this.targetFinishedEvents = new LinkedList<BuildEvent>();
211        }
212
213        return this.targetFinishedEvents;
214    }
215
216    /**
217     * Gets the list of {@code taskStarted} events fired during execution of the target.
218     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
219     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
220     * task started events property.</p>
221     *
222     * @return The list of {@code taskStarted} events fired during execution of the target.
223     */
224    public final List<BuildEvent> getTaskStartedEvents()
225    {
226        if ( this.taskStartedEvents == null )
227        {
228            this.taskStartedEvents = new LinkedList<BuildEvent>();
229        }
230
231        return this.taskStartedEvents;
232    }
233
234    /**
235     * Gets the list of {@code taskFinished} events fired during execution of the target.
236     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
237     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
238     * task finished events property.</p>
239     *
240     * @return The list of {@code taskFinished} events fired during execution of the target.
241     */
242    public final List<BuildEvent> getTaskFinishedEvents()
243    {
244        if ( this.taskFinishedEvents == null )
245        {
246            this.taskFinishedEvents = new LinkedList<BuildEvent>();
247        }
248
249        return this.taskFinishedEvents;
250    }
251
252    /**
253     * Gets the list of {@code messageLogged} events fired during execution of the target.
254     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
255     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
256     * message logged events property.</p>
257     *
258     * @return The list of {@code messageLogger} events fired during execution of the target.
259     */
260    public final List<BuildEvent> getMessageLoggedEvents()
261    {
262        if ( this.messageLoggedEvents == null )
263        {
264            this.messageLoggedEvents = new LinkedList<BuildEvent>();
265        }
266
267        return this.messageLoggedEvents;
268    }
269
270}