001package net.sf.cpsolver.studentsct; 002 003import java.io.BufferedReader; 004import java.io.File; 005import java.io.FileReader; 006import java.io.FileWriter; 007import java.io.PrintWriter; 008import java.util.ArrayList; 009import java.util.Iterator; 010import java.util.List; 011 012/** 013 * Process all choice files (files choices.csv) in all subfolders of the given 014 * folder and create a CSV (comma separated values text file) combining all 015 * choices (one column for each choice file) of the found choices files. 016 * 017 * @version StudentSct 1.2 (Student Sectioning)<br> 018 * Copyright (C) 2007 - 2010 Tomáš Müller<br> 019 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br> 020 * <a href="http://muller.unitime.org">http://muller.unitime.org</a><br> 021 * <br> 022 * This library is free software; you can redistribute it and/or modify 023 * it under the terms of the GNU Lesser General Public License as 024 * published by the Free Software Foundation; either version 3 of the 025 * License, or (at your option) any later version. <br> 026 * <br> 027 * This library is distributed in the hope that it will be useful, but 028 * 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. <br> 031 * <br> 032 * You should have received a copy of the GNU Lesser General Public 033 * License along with this library; if not see 034 * <a href='http://www.gnu.org/licenses/'>http://www.gnu.org/licenses/</a>. 035 */ 036public class GetChoices { 037 038 public static void getChoicesFile(File folder, List<List<String>> choices, String prefix) { 039 File choicesFile = new File(folder, "choices.csv"); 040 if (choicesFile.exists()) { 041 System.out.println("Reading " + choicesFile + " ..."); 042 try { 043 List<String> prefixes = null; 044 if (choices.isEmpty()) { 045 prefixes = new ArrayList<String>(); 046 choices.add(prefixes); 047 } else { 048 prefixes = choices.get(0); 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 List<String> cx = null; 055 if (choices.size() <= idx) { 056 cx = new ArrayList<String>(); 057 choices.add(cx); 058 } else { 059 cx = choices.get(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, List<List<String>> 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(List<List<String>> choices, File file) { 080 try { 081 System.out.println("Writing " + file + " ..."); 082 PrintWriter writer = new PrintWriter(new FileWriter(file, false)); 083 for (List<String> cx : choices) { 084 for (Iterator<String> f = cx.iterator(); f.hasNext();) { 085 String s = f.next(); 086 writer.print(s); 087 if (f.hasNext()) 088 writer.print(","); 089 } 090 writer.println(); 091 } 092 writer.flush(); 093 writer.close(); 094 } catch (Exception e) { 095 System.err.println("Error writing file " + file + ", message: " + e.getMessage()); 096 } 097 } 098 099 public static void main(String[] args) { 100 try { 101 File folder = new File(args[0]); 102 List<List<String>> choices = new ArrayList<List<String>>(); 103 getChoices(folder, choices, null); 104 if (!choices.isEmpty()) 105 writeChoices(choices, new File(folder, "all-choices.csv")); 106 } catch (Exception e) { 107 e.printStackTrace(); 108 } 109 } 110}