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.Commandline;
24 import org.apache.tools.ant.types.DataType;
25 import org.apache.tools.ant.types.Path;
26
27 /**
28 * A class that represents nested <arg> or <jvmarg> elements. This class
29 * provides the same functionality as the class that represents these same
30 * elements in a "java" task. In addition, this class supports conditional "if"
31 * and "unless" attributes.
32 *
33 * @author Patrick Luby
34 */
35 public class ConditionalArgument extends DataType {
36
37 //------------------------------------------------------------------ Fields
38
39 /**
40 * Cached "if" condition flag.
41 */
42 private String ifCondition = null;
43
44 /**
45 * Cached "unless" condition flag.
46 */
47 private String unlessCondition = null;
48
49 /**
50 * Cached command line arguments.
51 */
52 private String[] parts = null;
53
54 //----------------------------------------------------------------- Methods
55
56 /**
57 * Get the "if" condition flag.
58 *
59 * @return the "if" condition flag
60 */
61 public String getIf() {
62
63 return ProjectHelper.replaceProperties(project, ifCondition, project.getProperties());
64
65 }
66
67 /**
68 * Get a single command line argument.
69 *
70 * @return a single command line argument
71 */
72 public String[] getParts() {
73
74 String[] list = new String[parts.length];
75 for (int i = 0; i < parts.length; i++)
76 list[i] = ProjectHelper.replaceProperties(project, parts[i], project.getProperties());
77 return list;
78
79 }
80
81 /**
82 * Get the "unless" condition flag.
83 *
84 * @return the "unless" condition flag
85 */
86 public String getUnless() {
87
88 return ProjectHelper.replaceProperties(project, unlessCondition, project.getProperties());
89
90 }
91
92 /**
93 * Set a single command line argument to the absolute
94 * filename of the specified file.
95 *
96 * @param file a single command line argument
97 */
98 public void setFile(File file) {
99
100 this.parts = new String[]{ file.getAbsolutePath() };
101
102 }
103
104 /**
105 * Set the "if" condition. Tasks that nest this class as an element
106 * should evaluate this flag in their {@link org.apache.tools.ant.Task#execute()} method. If the
107 * following conditions are true, the task should process this element:
108 * <ul>
109 * <ol>The flag is neither null nor a empty string
110 * <ol>The property that the flag resolves to after macro substitution
111 * is defined
112 * </ul>
113 *
114 * @param property a property name or macro
115 */
116 public void setIf(String property) {
117
118 this.ifCondition = property;
119
120 }
121
122 /**
123 * Set a line to split into several command line arguments.
124 *
125 * @param line line to split into several commandline arguments
126 */
127 public void setLine(String line) {
128
129 parts = Commandline.translateCommandline(line);
130
131 }
132
133 /**
134 * Set a single command line argument and treat it like a path. The
135 * correct path separator for the platform is used.
136 *
137 * @param path a single command line argument
138 */
139 public void setPath(Path path) {
140
141 this.parts = new String[]{ path.toString() };
142
143 }
144
145 /**
146 * Set the "unless" condition. Tasks that nest this class as an element
147 * should evaluate this flag in their {@link org.apache.tools.ant.Task#execute()} method. If the
148 * following conditions are true, the task should ignore this element:
149 * <ul>
150 * <ol>The flag is neither null nor a empty string
151 * <ol>The property that the flag resolves to after macro substitution
152 * is defined
153 * </ul>
154 *
155 * @param property a property name or macro
156 */
157 public void setUnless(String property) {
158
159 this.unlessCondition = property;
160
161 }
162
163 /**
164 * Set a single command line argument.
165 *
166 * @param value a single command line argument
167 */
168 public void setValue(String value) {
169
170 this.parts = new String[]{ value };
171
172 }
173
174 }