001 package calhoun.analysis.crf.io;
002
003 import java.io.File;
004
005 import calhoun.util.Assert;
006 import calhoun.util.FileUtil;
007
008 /** an implementation of {@link FilenameMapper} that changes file extensions or add a new file extension onto the source file.
009 * If the <code>append<code> property is set, the new extension will be added to the end of the existing filename. Otherwise,
010 * the existing file extension is replaced with the new extension.
011 */
012 public class ExtensionMapper implements FilenameMapper {
013
014 boolean append;
015 String extension;
016
017 /** returns the value of the append property. If true, the <code>extension<code> will be appended to the source filename.
018 * Otherwise, the existing extension will replaced with the new one. Default is false.
019 * @return the value of the append property.
020 */
021 public boolean isAppend() {
022 return append;
023 }
024
025 /** set the value of the append property.
026 * @param append set to true if the extension should be appended to create the new filename.
027 */
028 public void setAppend(boolean append) {
029 this.append = append;
030 }
031
032 /** the new extension to use in the mapped file. Must be set before {link #mapFilename} is called.
033 * @return the extension to use in the mapped file.
034 */
035 public String getExtension() {
036 return extension;
037 }
038
039 /** sets the extension.
040 * @param extension the extension to use in the mapped file.
041 */
042 public void setExtension(String extension) {
043 this.extension = extension;
044 }
045
046 /** Maps the source file name to a new name by altering the file extension. The new <code>extension</code>
047 * will either be added to the end of the existing filename or will replace the existing extension based on the
048 * value of the <code>append</code> property.
049 * @see calhoun.analysis.crf.io.FilenameMapper#mapFilename(java.io.File)
050 */
051 public File mapFilename(File source) {
052 Assert.a(extension != null, "Extension must be set befure mapFilename can be called.");
053 String dest;
054 if(append) {
055 dest = source.getPath()+extension;
056 }
057 else {
058 String[] baseAndExtension = FileUtil.getBaseAndExtension(source);
059 String directory = "";
060 if(source.getParent() != null) {
061 directory = source.getParent()+File.separator;
062 }
063 dest = directory+baseAndExtension[0]+extension;
064 }
065 return new File(dest);
066 }
067 }