1 28 29 package com.idaremedia.antx.parameters; 30 31 import java.text.DecimalFormat ; 32 33 import org.apache.tools.ant.Project; 34 import org.apache.tools.ant.util.FileUtils; 35 36 import com.idaremedia.antx.helpers.DateTimeFormat; 37 import com.idaremedia.antx.helpers.DurationFormat; 38 import com.idaremedia.antx.helpers.Strings; 39 import com.idaremedia.antx.helpers.Tk; 40 41 42 74 75 public final class TransformHelper 76 { 77 84 public static final long toNumber(String s) 85 { 86 return Tk.longFrom(s,Tk.NO_NUM); 87 } 88 89 90 91 99 public static final long toTimeNumber(String s) 100 { 101 if (Strings.NOW.equals(s)) { 102 return System.currentTimeMillis(); 103 } 104 return Tk.longFrom(s,Tk.NO_NUM); 105 } 106 107 108 109 117 public static final String toInvertCase(String s) 118 { 119 if (s==null) { 120 return s; 121 } 122 StringBuffer sb = new StringBuffer (s); 123 for (int i=0,n=s.length();i<n;i++) { 124 char c = s.charAt(i); 125 if (Character.isLowerCase(c)) { 126 sb.setCharAt(i,Character.toUpperCase(c)); 127 } 128 else if (Character.isUpperCase(c)) { 129 sb.setCharAt(i,Character.toLowerCase(c)); 130 } 131 } 132 s = sb.substring(0); 133 return s; 134 } 135 136 137 138 144 public static CaseTransform toCaseTransform(ValueTransform gt) 145 { 146 if (gt==null) { 147 throw new IllegalArgumentException (); 148 } 149 return CaseTransform.from(gt.getValue()); 150 } 151 152 153 154 155 161 public static ValueTransform toValueTransform(CaseTransform ct) 162 { 163 if (ct==null) { 164 throw new IllegalArgumentException (); 165 } 166 return ValueTransform.from(ct.getValue()); 167 } 168 169 170 171 180 public static final String toPath(String fileRef, Project P) 181 { 182 return apply(ValueTransform.OSPATH,fileRef,P); 183 } 184 185 186 187 194 public static final String apply(CaseTransform t, String s) 195 { 196 if (t==null) { 197 throw new IllegalArgumentException (); 198 } 199 if (s==null) { 200 return null; 201 } 202 switch(t.getIndex()) { 203 case CaseTransform.LOWERCASE_INDEX: { 204 s = s.toLowerCase(); 205 break; 206 } 207 case CaseTransform.UPPERCASE_INDEX: { 208 s = s.toUpperCase(); 209 break; 210 } 211 case CaseTransform.INVERTCASE_INDEX:{ 212 s = toInvertCase(s); 213 break; 214 } 215 } 216 return s; 217 } 218 219 220 221 231 public static final String apply(ValueTransform t, String s, Project P) 232 { 233 if (t==null || P==null) { 234 throw new IllegalArgumentException (); 235 } 236 if (s==null) { 237 return null; 238 } 239 switch(t.getIndex()) { 240 case ValueTransform.TRIM_INDEX: { 241 s = s.trim(); 242 break; 243 } 244 case ValueTransform.STRIPWS_INDEX: { 245 s = Tk.stripWhitespace(s); 246 break; 247 } 248 case ValueTransform.LOWERCASE_INDEX: { 249 s = s.toLowerCase(); 250 break; 251 } 252 case ValueTransform.UPPERCASE_INDEX: { 253 s = s.toUpperCase(); 254 break; 255 } 256 case ValueTransform.INVERTCASE_INDEX: { 257 s = toInvertCase(s); 258 break; 259 } 260 case ValueTransform.DURATION_INDEX: { 261 long l= toNumber(s); 262 if (l!=Tk.NO_NUM) { 263 s = DurationFormat.INSTANCE.format(l,true); 264 } else { 265 P.log("Unable to convert '"+s+"' to time duration.", 266 Project.MSG_WARN); 267 } 268 break; 269 } 270 case ValueTransform.DATETIME_INDEX: { 271 long l= toTimeNumber(s); 272 if (l!=Tk.NO_NUM) { 273 s = DateTimeFormat.shortformat(l); 274 } else { 275 P.log("Unable to convert '"+s+"' to datetime.", 276 Project.MSG_WARN); 277 } 278 break; 279 } 280 case ValueTransform.CHECKPOINT_INDEX: { 281 long l= toTimeNumber(s); 282 if (l!=Tk.NO_NUM) { 283 s = DateTimeFormat.GMTformat(l); 284 } else { 285 P.log("Unable to convert '"+s+"' to GMT timestamp.", 286 Project.MSG_WARN); 287 } 288 break; 289 } 290 case ValueTransform.LONGDATETIME_INDEX: { 291 long l= toTimeNumber(s); 292 if (l!=Tk.NO_NUM) { 293 s = DateTimeFormat.format(l); 294 } else { 295 P.log("Unable to convert '"+s+"' to full datetime.", 296 Project.MSG_WARN); 297 } 298 break; 299 } 300 case ValueTransform.OSPATH_INDEX: { 301 FileUtils fu= FileUtils.getFileUtils(); 302 if (s.startsWith("file:")) { 303 s = fu.fromURI(s); 304 } else { 305 s = P.resolveFile(s).getPath(); 307 } 308 break; 309 } 310 case ValueTransform.OSPATHURL_INDEX: { 311 FileUtils fu= FileUtils.getFileUtils(); 312 if (s.startsWith("file:")) { 313 s = fu.fromURI(s); 314 } else { 315 s = P.resolveFile(s).getPath(); 316 } 317 s = fu.toURI(s); 318 break; 319 } 320 case ValueTransform.DECIMAL_INDEX: { 321 Number n = Tk.numberFrom(s); 322 if (n==Tk.NO_NUM_NUM) { 323 s = ""; 324 } else { 325 synchronized(DFI) { 326 s = DFI.format(n); 327 } 328 } 329 break; 330 } 331 } 332 return s; 333 } 334 335 private static final DecimalFormat DFI = new DecimalFormat ("#.###");} 337 338 339 | Popular Tags |