1 /******************************************************************************** 2 * CruiseControl, a Continuous Integration Toolkit 3 * Copyright (c) 2001-2003, ThoughtWorks, Inc. 4 * 651 W Washington Ave. Suite 600 5 * Chicago, IL 60661 USA 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * 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 ********************************************************************************/ 37 38 package net.sourceforge.cruisecontrol; 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 { 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 public 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 public 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 public boolean isValidLabel(String label); 83 84 /** 85 * Called by Project when there is no previously serialized label. 86 * @return defaultLabel 87 */ 88 public String getDefaultLabel(); 89 } 90