01: /********************************************************************************
02: * CruiseControl, a Continuous Integration Toolkit
03: * Copyright (c) 2001-2003, ThoughtWorks, Inc.
04: * 200 E. Randolph, 25th Floor
05: * Chicago, IL 60601 USA
06: * All rights reserved.
07: *
08: * Redistribution and use in source and binary forms, with or without
09: * modification, are permitted provided that the following conditions
10: * are met:
11: *
12: * + Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: *
15: * + Redistributions in binary form must reproduce the above
16: * copyright notice, this list of conditions and the following
17: * disclaimer in the documentation and/or other materials provided
18: * with the distribution.
19: *
20: * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
21: * names of its contributors may be used to endorse or promote
22: * products derived from this software without specific prior
23: * written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
29: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36: ********************************************************************************/package net.sourceforge.cruisecontrol;
37:
38: import java.io.Serializable;
39:
40: import org.jdom.Element;
41:
42: /**
43: * This interface defines the method required to increment
44: * the label used in the MasterBuild process. This label
45: * is incorporated into the log filename when a successful
46: * build occurs.
47: *
48: * @author <a href="mailto:alden@thoughtworks.com">alden almagro</a>
49: * @author <a href="mailto:pj@thoughtworks.com">Paul Julius</a>
50: */
51: public interface LabelIncrementer extends Serializable {
52:
53: /**
54: * Increments the label when a successful build occurs.
55: * The oldLabel should be transformed and returned as
56: * the new label. The build log is also passed in so that some
57: * more complex label incrementing can be handled. For example, a
58: * label incrementer could find the ant target that was called and increment based on that
59: * information.
60: *
61: * @param buildLog JDOM <code>Element</code> representation of the build.
62: * @param oldLabel Label from previous successful build.
63: * @return Label to use for most recent successful build.
64: */
65: String incrementLabel(String oldLabel, Element buildLog);
66:
67: /**
68: * Some implementations of <code>LabelIncrementer</code>, such as those involving
69: * dates, are better suited to being incremented before building rather
70: * than after building. This method determines whether to increment before
71: * building or after building.
72: */
73: boolean isPreBuildIncrementer();
74:
75: /**
76: * Check the validity of a user-supplied label, making sure that it can be incremented successfully by
77: * the appropriate implementation of <code>LabelIncrementer</code>
78: *
79: * @param label user-supplied label
80: * @return true if it is a valid label.
81: */
82: boolean isValidLabel(String label);
83:
84: /**
85: * Called by Project when there is no previously serialized label.
86: * @return defaultLabel
87: */
88: String getDefaultLabel();
89: }
|