001 package net.sf.cpsolver.studentsct;
002
003 import java.io.BufferedReader;
004 import java.io.File;
005 import java.io.FileReader;
006 import java.io.FileWriter;
007 import java.io.PrintWriter;
008 import java.util.Enumeration;
009 import java.util.Vector;
010
011 /**
012 * Process all choice files (files choices.csv) in all subfolders of the given folder
013 * and create a CSV (comma separated values text file) combining all choices (one column for each
014 * choice file) of the found choices files.
015 *
016 * @version
017 * StudentSct 1.1 (Student Sectioning)<br>
018 * Copyright (C) 2007 Tomáš Müller<br>
019 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
020 * Lazenska 391, 76314 Zlin, Czech Republic<br>
021 * <br>
022 * This library is free software; you can redistribute it and/or
023 * modify it under the terms of the GNU Lesser General Public
024 * License as published by the Free Software Foundation; either
025 * version 2.1 of the License, or (at your option) any later version.
026 * <br><br>
027 * This library is distributed in the hope that it will be useful,
028 * but WITHOUT ANY WARRANTY; without even the implied warranty of
029 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
030 * Lesser General Public License for more details.
031 * <br><br>
032 * You should have received a copy of the GNU Lesser General Public
033 * License along with this library; if not, write to the Free Software
034 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
035 */
036 public class GetChoices {
037
038 public static void getChoicesFile(File folder, Vector choices, String prefix) {
039 File choicesFile = new File(folder, "choices.csv");
040 if (choicesFile.exists()) {
041 System.out.println("Reading "+choicesFile+" ...");
042 try {
043 Vector prefixes = null;
044 if (choices.isEmpty()) {
045 prefixes = new Vector();
046 choices.add(prefixes);
047 } else {
048 prefixes = (Vector)choices.firstElement();
049 }
050 prefixes.add(prefix);
051 BufferedReader reader = new BufferedReader(new FileReader(choicesFile));
052 String line = null;
053 for (int idx=1; (line=reader.readLine())!=null; idx++) {
054 Vector cx = null;
055 if (choices.size()<=idx) {
056 cx = new Vector();
057 choices.add(cx);
058 } else {
059 cx = (Vector)choices.elementAt(idx);
060 }
061 cx.add(line);
062 }
063 reader.close();
064 } catch (Exception e) {
065 System.err.println("Error reading file "+choicesFile+", message: "+e.getMessage());
066 }
067 }
068 }
069
070 public static void getChoices(File folder, Vector choices, String prefix) {
071 System.out.println("Checking "+folder+" ...");
072 File[] files = folder.listFiles();
073 getChoicesFile(folder, choices, (prefix==null?"":prefix));
074 for (int i=0;i<files.length;i++)
075 if (files[i].isDirectory())
076 getChoices(files[i], choices, (prefix==null?"":prefix+"/")+files[i].getName());
077 }
078
079 public static void writeChoices(Vector chocies, File file) {
080 try {
081 System.out.println("Writing "+file+" ...");
082 PrintWriter writer = new PrintWriter(new FileWriter(file,false));
083 for (Enumeration e=chocies.elements();e.hasMoreElements();) {
084 Vector cx = (Vector)e.nextElement();
085 for (Enumeration f=cx.elements();f.hasMoreElements();) {
086 String s = (String)f.nextElement();
087 writer.print(s);
088 if (f.hasMoreElements()) writer.print(",");
089 }
090 writer.println();
091 }
092 writer.flush(); writer.close();
093 } catch (Exception e) {
094 System.err.println("Error writing file "+file+", message: "+e.getMessage());
095 }
096 }
097
098 public static void main(String[] args) {
099 try {
100 File folder = new File(args[0]);
101 Vector choices = new Vector();
102 getChoices(folder, choices, null);
103 if (!choices.isEmpty())
104 writeChoices(choices,new File(folder,"all-choices.csv"));
105 } catch (Exception e) {
106 e.printStackTrace();
107 }
108 }
109 }