Home | History | Annotate | Download | only in generators
      1 /*******************************************************************************
      2  * Copyright (c) 2000, 2006 IBM Corporation and others.
      3  * All rights reserved. This program and the accompanying materials
      4  * are made available under the terms of the Eclipse Public License v1.0
      5  * which accompanies this distribution, and is available at
      6  * http://www.eclipse.org/legal/epl-v10.html
      7  *
      8  * Contributors:
      9  *     IBM Corporation - initial API and implementation
     10  *******************************************************************************/
     11 
     12 package org.eclipse.releng.generators;
     13 
     14 import java.io.File;
     15 import java.io.FileNotFoundException;
     16 import java.io.FileOutputStream;
     17 import java.io.IOException;
     18 import java.util.StringTokenizer;
     19 import org.apache.tools.ant.BuildException;
     20 import org.apache.tools.ant.Task;
     21 
     22 /**
     23  * This task will count the number of fils in a given directory
     24  * that match a given filter.  The number of fils will be output
     25  * to a given output file.  The output file will be overwritten
     26  * if it already exists.
     27  *
     28  * Note: Filter comparison is NOT case sensitive.  Do not use wild cards.
     29  * ie .zip counts all files with .zip anywere in the name.
     30  */
     31 public class FileCounter extends Task {
     32 
     33 	private String sourceDirectory = "";
     34 	private String filterString = ".zip";
     35 	private String outputFile = "";
     36 
     37 	public static void main(String args[]) {
     38 		// For testing only.
     39 		FileCounter aFileCounter = new FileCounter();
     40 		aFileCounter.setSourceDirectory("c:\\RelEng\\dean");
     41 		aFileCounter.setOutputFile("c:\\RelEng\\dean\\files.count");
     42 		aFileCounter.setFilterString(".zip");
     43 		aFileCounter.execute();
     44 	}
     45 
     46 	public void execute() throws BuildException {
     47 		// Do the work.
     48 
     49 		int count = 0;
     50 
     51 		System.out.println("Source Directory: " + this.getSourceDirectory());
     52 		System.out.println("Output File: " + this.getOutputFile());
     53 		System.out.println("Filter String: " + this.getFilterString());
     54 
     55 		File aDirectory = new File(this.getSourceDirectory());
     56 		if (aDirectory == null) {
     57 			throw new BuildException("Directory " + this.getSourceDirectory() + " not found.");
     58 		}
     59 
     60 		String[] names = aDirectory.list();
     61 		if (names == null) {
     62 			throw new BuildException("Directory " + this.getSourceDirectory() + " not found.");
     63 		}
     64 
     65 		System.out.println("List size: " + names.length);
     66 
     67 		for (int i = 0; i < names.length; i++) {
     68 			System.out.println("Name: " + names[i]);
     69 
     70 			int index = -1;
     71 			StringTokenizer types = getFileTypes();
     72 
     73 			while (types.hasMoreTokens()){
     74 				index = names[i].toLowerCase().indexOf(types.nextToken().toLowerCase());
     75 				if (index != -1) {
     76 					count++;
     77 				}
     78 			}
     79 
     80 		}
     81 
     82 		try {
     83 			FileOutputStream anOutputStream = new FileOutputStream(this.getOutputFile());
     84 			anOutputStream.write(String.valueOf(count).getBytes());
     85 			anOutputStream.close();
     86 		} catch (FileNotFoundException e) {
     87 			throw new BuildException("Can not create file.count file");
     88 		} catch (IOException e) {
     89 			throw new BuildException("Can not create file.count file");
     90 		}
     91 
     92 	}
     93 
     94 	private StringTokenizer getFileTypes(){
     95 		return new StringTokenizer(getFilterString(),",");
     96 	}
     97 
     98 	/**
     99 	 * Gets the sourceDirectory.
    100 	 * @return Returns a String
    101 	 */
    102 	public String getSourceDirectory() {
    103 		return sourceDirectory;
    104 	}
    105 
    106 	/**
    107 	 * Sets the sourceDirectory.
    108 	 * @param sourceDirectory The sourceDirectory to set
    109 	 */
    110 	public void setSourceDirectory(String sourceDirectory) {
    111 		this.sourceDirectory = sourceDirectory;
    112 	}
    113 
    114 	/**
    115 	 * Gets the filterString.
    116 	 * @return Returns a String
    117 	 */
    118 	public String getFilterString() {
    119 		return filterString;
    120 	}
    121 
    122 	/**
    123 	 * Sets the filterString.
    124 	 * @param filterString The filterString to set
    125 	 */
    126 	public void setFilterString(String filterString) {
    127 		this.filterString = filterString;
    128 	}
    129 
    130 	/**
    131 	 * Gets the outputFile.
    132 	 * @return Returns a String
    133 	 */
    134 	public String getOutputFile() {
    135 		return outputFile;
    136 	}
    137 
    138 	/**
    139 	 * Sets the outputFile.
    140 	 * @param outputFile The outputFile to set
    141 	 */
    142 	public void setOutputFile(String outputFile) {
    143 		this.outputFile = outputFile;
    144 	}
    145 
    146 }
    147