source: release-kits/wirk3/ant-scripts/tasks/antelope/src/ise/antelope/tasks/SwitchTask.java@ 15023

Last change on this file since 15023 was 15023, checked in by oranfry, 16 years ago

did the bulk of the work on wirk3

File size: 4.9 KB
Line 
1/*
2* The Apache Software License, Version 1.1
3*
4* Copyright (c) 2001-2002 The Apache Software Foundation. All rights
5* reserved.
6*
7* Redistribution and use in source and binary forms, with or without
8* modification, are permitted provided that the following conditions
9* are met:
10*
11* 1. Redistributions of source code must retain the above copyright
12* notice, this list of conditions and the following disclaimer.
13*
14* 2. Redistributions in binary form must reproduce the above copyright
15* notice, this list of conditions and the following disclaimer in
16* the documentation and/or other materials provided with the
17* distribution.
18*
19* 3. The end-user documentation included with the redistribution, if
20* any, must include the following acknowlegement:
21* "This product includes software developed by the
22* Apache Software Foundation (http://www.apache.org/)."
23* Alternately, this acknowlegement may appear in the software itself,
24* if and wherever such third-party acknowlegements normally appear.
25*
26* 4. The names "The Jakarta Project", "Ant", and "Apache Software
27* Foundation" must not be used to endorse or promote products derived
28* from this software without prior written permission. For written
29* permission, please contact [email protected].
30*
31* 5. Products derived from this software may not be called "Apache"
32* nor may "Apache" appear in their names without prior written
33* permission of the Apache Group.
34*
35* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46* SUCH DAMAGE.
47* ====================================================================
48*
49* This software consists of voluntary contributions made by many
50* individuals on behalf of the Apache Software Foundation. For more
51* information on the Apache Software Foundation, please see
52* <http://www.apache.org/>.
53*/
54package ise.antelope.tasks;
55
56import java.util.Vector;
57import java.util.Enumeration;
58
59import org.apache.tools.ant.Task;
60import org.apache.tools.ant.TaskContainer;
61import org.apache.tools.ant.BuildException;
62
63/**
64 * This task emulates a Java switch.
65 * @author Dale Anson
66 */
67public class SwitchTask extends Task {
68
69 private Vector cases = new Vector();
70 private Case defaultCase = null;
71 private String name = null;
72
73 /**
74 * Register dependent tasks.
75 */
76 public void init() {
77 getProject().addTaskDefinition( "case", Case.class );
78 getProject().addTaskDefinition( "default", DefaultCase.class );
79 getProject().addTaskDefinition( "break", Break.class );
80 }
81
82 /**
83 * Set the name of the property to switch on.
84 * @param name the name of the property to switch on.
85 */
86 public void setName( String name ) {
87 this.name = name;
88 }
89
90 /**
91 * Adds a case to this switch. A switch can have any number of cases.
92 * @param c the case to add.
93 */
94 public void addCase( Case c ) {
95 cases.addElement( c );
96 }
97
98 /**
99 * Adds a default case to this switch. Only one case may be added.
100 * @param c the default case.
101 */
102 public void addDefault( DefaultCase c ) {
103 if ( defaultCase == null ) {
104 defaultCase = c;
105 return ;
106 }
107 else
108 throw new BuildException( "<switch> can have only one <default>" );
109 }
110
111 public void execute() throws BuildException {
112 if ( name == null )
113 throw new BuildException( "'name' attribute cannot be null." );
114 String value = getProject().getProperty( name );
115 if ( value == null )
116 throw new BuildException( "Property " + name + " does not exist." );
117 boolean disregardValue = false; // should the case fall through to the next?
118 Enumeration en = cases.elements();
119 while ( en.hasMoreElements() ) {
120 Case c = ( Case ) en.nextElement();
121 if ( disregardValue ) {
122 c.perform();
123 if ( c.doBreak() )
124 return ;
125 }
126 else if ( value.equals( c.getValue() ) ) {
127 c.perform();
128 if ( c.doBreak() )
129 return ;
130 else
131 disregardValue = true;
132 }
133 }
134 // if here, then do the default case
135 if ( defaultCase != null ) {
136 defaultCase.perform();
137 }
138 }
139}
Note: See TracBrowser for help on using the repository browser.