1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.commons.launcher.types;
19
20 import java.io.File;
21
22 import org.apache.tools.ant.ProjectHelper;
23 import org.apache.tools.ant.types.DataType;
24 import org.apache.tools.ant.types.Path;
25
26 /**
27 * A class that represents nested <sysproperty> or <env> elements. This class
28 * provides the same functionality as the class that represents these same
29 * elements in a "java" task. In addition, this class supports conditional "if"
30 * and "unless" attributes.
31 *
32 * @author Patrick Luby
33 */
34 public class ConditionalVariable extends DataType {
35
36 //------------------------------------------------------------------ Fields
37
38 /**
39 * Cached "if" condition flag.
40 */
41 private String ifCondition = null;
42
43 /**
44 * Cached key.
45 */
46 private String key = null;
47
48 /**
49 * Cached "unless" condition flag.
50 */
51 private String unlessCondition = null;
52
53 /**
54 * Cached value.
55 */
56 private String value = null;
57
58 //----------------------------------------------------------------- Methods
59
60 /**
61 * Get the "if" condition flag.
62 *
63 * @return the "if" condition flag
64 */
65 public String getIf() {
66
67 return ProjectHelper.replaceProperties(project, ifCondition, project.getProperties());
68
69 }
70
71 /**
72 * Get the key.
73 *
74 * @return the key for this variable
75 */
76 public String getKey() {
77
78 return ProjectHelper.replaceProperties(project, key, project.getProperties());
79
80 }
81
82 /**
83 * Get the "unless" condition flag.
84 *
85 * @return the "unless" condition flag
86 */
87 public String getUnless() {
88
89 return ProjectHelper.replaceProperties(project, unlessCondition, project.getProperties());
90
91 }
92
93 /**
94 * Get the value.
95 *
96 * @return the value for this variable
97 */
98 public String getValue() {
99
100 return ProjectHelper.replaceProperties(project, value, project.getProperties());
101
102 }
103
104 /**
105 * Set the value to a {@link File}.
106 *
107 * @param file the {@link File} for this variable
108 */
109 public void setFile(File file) {
110
111 this.value = file.getAbsolutePath();
112
113 }
114
115 /**
116 * Set the value to a {@link Path}.
117 *
118 * @param path the {@link Path} for this variable
119 */
120 public void setPath(Path path) {
121
122 this.value = path.toString();
123
124 }
125
126 /**
127 * Set the "if" condition. Tasks that nest this class as an element
128 * should evaluate this flag in their {@link org.apache.tools.ant.Task#execute()} method. If the
129 * following conditions are true, the task should process this element:
130 * <ul>
131 * <ol>The flag is neither null nor a empty string
132 * <ol>The property that the flag resolves to after macro substitution
133 * is defined
134 * </ul>
135 *
136 * @param property a property name or macro
137 */
138 public void setIf(String property) {
139
140 this.ifCondition = property;
141
142 }
143
144 /**
145 * Set the key.
146 *
147 * @param key the key for this variable
148 */
149 public void setKey(String key) {
150
151 this.key = key;
152
153 }
154
155 /**
156 * Set the value to a {@link Path}.
157 *
158 * @param path the {@link Path} for this variable
159 */
160 public void setFile(Path path) {
161
162 this.value = path.toString();
163
164 }
165
166 /**
167 * Set the "unless" condition. Tasks that nest this class as an element
168 * should evaluate this flag in their {@link org.apache.tools.ant.Task#execute()} method. If the
169 * following conditions are true, the task should ignore this element:
170 * <ul>
171 * <ol>The flag is neither null nor a empty string
172 * <ol>The property that the flag resolves to after macro substitution
173 * is defined
174 * </ul>
175 *
176 * @param property a property name or macro
177 */
178 public void setUnless(String property) {
179
180 this.unlessCondition = property;
181
182 }
183
184 /**
185 * Set the value.
186 *
187 * @param value the value for this variable
188 */
189 public void setValue(String value) {
190
191 this.value = value;
192
193 }
194
195 }