001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018package org.apache.commons.launcher.types; 019 020import java.io.File; 021 022import org.apache.tools.ant.ProjectHelper; 023import org.apache.tools.ant.types.Commandline; 024import org.apache.tools.ant.types.DataType; 025import org.apache.tools.ant.types.Path; 026 027/** 028 * A class that represents nested <arg> or <jvmarg> elements. This class 029 * provides the same functionality as the class that represents these same 030 * elements in a "java" task. In addition, this class supports conditional "if" 031 * and "unless" attributes. 032 * 033 * @author Patrick Luby 034 */ 035public class ConditionalArgument extends DataType { 036 037 //------------------------------------------------------------------ Fields 038 039 /** 040 * Cached "if" condition flag. 041 */ 042 private String ifCondition = null; 043 044 /** 045 * Cached "unless" condition flag. 046 */ 047 private String unlessCondition = null; 048 049 /** 050 * Cached command line arguments. 051 */ 052 private String[] parts = null; 053 054 //----------------------------------------------------------------- Methods 055 056 /** 057 * Get the "if" condition flag. 058 * 059 * @return the "if" condition flag 060 */ 061 public String getIf() { 062 063 return ProjectHelper.replaceProperties(project, ifCondition, project.getProperties()); 064 065 } 066 067 /** 068 * Get a single command line argument. 069 * 070 * @return a single command line argument 071 */ 072 public String[] getParts() { 073 074 String[] list = new String[parts.length]; 075 for (int i = 0; i < parts.length; i++) 076 list[i] = ProjectHelper.replaceProperties(project, parts[i], project.getProperties()); 077 return list; 078 079 } 080 081 /** 082 * Get the "unless" condition flag. 083 * 084 * @return the "unless" condition flag 085 */ 086 public String getUnless() { 087 088 return ProjectHelper.replaceProperties(project, unlessCondition, project.getProperties()); 089 090 } 091 092 /** 093 * Set a single command line argument to the absolute 094 * filename of the specified file. 095 * 096 * @param file a single command line argument 097 */ 098 public void setFile(File file) { 099 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}