/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm.tools.ant; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; /** * Task for copying a task from one file to another thile replacing non-ascii * chars with ? ensuring it is an ascii value. */ public class ToAsciiTask extends Task { private File src; private File dest; public void setSrc(final File src) { this.src = src; } public void setDest(final File dest) { this.dest = dest; } public void execute() { validate(); processFiles(); } private void processFiles() { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { if (dest.exists()) dest.delete(); inputStream = new FileInputStream(src); outputStream = new FileOutputStream(dest); while (inputStream.available() > 0) { final int value = inputStream.read(); final int output = isPrintable(value) ? value : '?'; outputStream.write(output); } } catch (IOException ioe) { throw new BuildException("Error loading file " + src, ioe, getLocation()); } finally { if (null != inputStream) { try { inputStream.close(); } catch (final IOException ioe) { //ignore } } if (null != outputStream) { try { outputStream.close(); } catch (final IOException ioe) { //ignore } } } } private boolean isPrintable(final int value) { return !(value < 32 || value > 126) || Character.isWhitespace(value); } private void validate() { if (null == src) throw new BuildException("Src not set."); if (!src.exists()) throw new BuildException("Src does not exist. - " + src); if (!src.isFile()) throw new BuildException("Src is not a regular file. - " + src); if (null == dest) throw new BuildException("Dest not set."); } }