| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.sample.expenses.server; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.PrintWriter; |
| import java.util.Date; |
| |
| /** |
| * Command-line entry point for report generation. |
| */ |
| public class ReportGeneratorMain { |
| |
| protected static final int MAX_REPORTS = 18000000; |
| protected static final int REPORTS_PER_DIR = 1000000; |
| protected static final int VERSION = 1; |
| |
| static int index = 0; |
| static PrintWriter empWriter; |
| static PrintWriter repWriter; |
| static PrintWriter expWriter; |
| static String startDate = null; |
| |
| static void makeOutputDir() { |
| try { |
| if (startDate == null) { |
| startDate = dateToString(new Date()); |
| } |
| String dir = "/auto/gwt/io-expenses-" + MAX_REPORTS + "-" + twoDigit(index++) + "-" + startDate; |
| new File(dir).mkdirs(); |
| if (empWriter != null) { |
| empWriter.close(); |
| } |
| if (repWriter != null) { |
| repWriter.close(); |
| } |
| if (expWriter != null) { |
| expWriter.close(); |
| } |
| empWriter = new PrintWriter(dir + "/Employee.csv"); |
| repWriter = new PrintWriter(dir + "/Report.csv"); |
| expWriter = new PrintWriter(dir + "/Expense.csv"); |
| empWriter.println("userName,displayName,supervisorKey,VERSION,key,department,password"); |
| repWriter.println("created,notes,VERSION,approvedSupervisor,key,reporter,purposeLowerCase,purpose,department"); |
| expWriter.println("category,description,reasonDenied,amount,VERSION,report,key,created,approval"); |
| } catch (IOException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| /** |
| * @param args |
| */ |
| public static void main(String[] args) throws Exception { |
| try { |
| makeOutputDir(); |
| |
| ReportGenerator reportGenerator = new ReportGenerator() { |
| long allids = 10684381L; |
| |
| @Override |
| public boolean shouldContinue() { |
| return getNumReports() < MAX_REPORTS; |
| } |
| |
| @Override |
| public long storeEmployee(EmployeeDTO employee) { |
| // Start a new output directory every 1M reports |
| if (getNumReports() >= REPORTS_PER_DIR * index) { |
| ReportGeneratorMain.makeOutputDir(); |
| } |
| |
| long id = allids++; |
| // userName,displayName,supervisorKey,VERSION,key,department,password |
| empWriter.println(employee.userName + "," + employee.displayName + "," |
| + employee.supervisorKey + "," + VERSION + "," + id + "," |
| + employee.department + ","); |
| return id; |
| } |
| |
| @Override |
| public long storeExpense(ExpenseDTO expense) { |
| long id = allids++; |
| // category,description,reasonDenied,amount,VERSION,report,key,created,approval" |
| expWriter.println(expense.category + "," + expense.description + ",," + expense.amount + "," |
| + VERSION + "," + expense.reportId + "," + id + "," + dateToString(expense.created) |
| + ","); |
| return id; |
| } |
| |
| @Override |
| public long storeReport(ReportDTO report) { |
| long id = allids++; |
| // created,notes,VERSION,approvedSupervisor,key,reporter,purposeLowerCase,purpose,department |
| repWriter.println(dateToString(report.created) + ",\"" + report.notes + "\"," + VERSION + "," |
| + report.approvedSupervisorKey + "," + id + "," + report.reporterKey + ",\"" |
| + report.purpose.toLowerCase() + "\",\"" + report.purpose + "\"," + report.department); |
| return id; |
| } |
| }; |
| |
| reportGenerator.init("/home/rice/www/dist.all.last.txt", |
| "/home/rice/www/dist.female.first.txt", |
| "/home/rice/www/dist.male.first.txt"); |
| |
| // Use same manager for everyone |
| long supervisorId = 1; |
| while (reportGenerator.shouldContinue()) { |
| int department = reportGenerator.getDepartment(); |
| reportGenerator.makeEmployee(department, supervisorId); |
| } |
| |
| empWriter.close(); |
| repWriter.close(); |
| expWriter.close(); |
| } catch (Exception e) { |
| throw e; |
| } |
| } |
| |
| @SuppressWarnings("deprecation") |
| private static String dateToString(Date date) { |
| return (date.getYear() + 1900) + twoDigit(date.getMonth() + 1) |
| + twoDigit(date.getDate()) + "T" + twoDigit(date.getHours()) + ":" |
| + twoDigit(date.getMinutes()); |
| } |
| |
| private static String twoDigit(int i) { |
| return i < 10 ? "0" + i : "" + i; |
| } |
| } |