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.DataType; 024import org.apache.tools.ant.types.Path; 025 026/** 027 * A class that represents nested <sysproperty> or <env> elements. This class 028 * provides the same functionality as the class that represents these same 029 * elements in a "java" task. In addition, this class supports conditional "if" 030 * and "unless" attributes. 031 * 032 * @author Patrick Luby 033 */ 034public class ConditionalVariable extends DataType { 035 036 //------------------------------------------------------------------ Fields 037 038 /** 039 * Cached "if" condition flag. 040 */ 041 private String ifCondition = null; 042 043 /** 044 * Cached key. 045 */ 046 private String key = null; 047 048 /** 049 * Cached "unless" condition flag. 050 */ 051 private String unlessCondition = null; 052 053 /** 054 * Cached value. 055 */ 056 private String value = null; 057 058 //----------------------------------------------------------------- Methods 059 060 /** 061 * Get the "if" condition flag. 062 * 063 * @return the "if" condition flag 064 */ 065 public String getIf() { 066 067 return ProjectHelper.replaceProperties(project, ifCondition, project.getProperties()); 068 069 } 070 071 /** 072 * Get the key. 073 * 074 * @return the key for this variable 075 */ 076 public String getKey() { 077 078 return ProjectHelper.replaceProperties(project, key, project.getProperties()); 079 080 } 081 082 /** 083 * Get the "unless" condition flag. 084 * 085 * @return the "unless" condition flag 086 */ 087 public String getUnless() { 088 089 return ProjectHelper.replaceProperties(project, unlessCondition, project.getProperties()); 090 091 } 092 093 /** 094 * Get the value. 095 * 096 * @return the value for this variable 097 */ 098 public String getValue() { 099 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}