| /* |
| * 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 com.google.apphosting.api.DeadlineExceededException; |
| import com.google.gwt.sample.expenses.client.DataGenerationService; |
| import com.google.gwt.sample.expenses.server.domain.Employee; |
| import com.google.gwt.sample.expenses.server.domain.EntityCounter; |
| import com.google.gwt.sample.expenses.server.domain.Expense; |
| import com.google.gwt.sample.expenses.server.domain.Report; |
| import com.google.gwt.user.server.rpc.RemoteServiceServlet; |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.logging.Logger; |
| |
| /** |
| * Server-side implementation. |
| */ |
| @SuppressWarnings("serial") |
| public class DataGenerationServiceImpl extends RemoteServiceServlet implements |
| DataGenerationService { |
| |
| private static final Logger log = Logger.getLogger(DataGenerationServiceImpl.class.getName()); |
| |
| // private long endTime; |
| |
| private ReportGenerator reportGenerator; |
| |
| public long countEmployees() { |
| return EntityCounter.updateEmployeeCount(); |
| } |
| |
| public long countExpenses() { |
| return EntityCounter.updateExpenseCount(); |
| } |
| |
| public long countReports() { |
| return EntityCounter.updateReportCount(); |
| } |
| |
| public void delete() { |
| try { |
| log.info("Expenses before: " + Expense.countExpenses()); |
| List<Expense> expenses = Expense.findAllExpenses(); |
| log.info("ids from " + expenses.get(0).getId() + " to " + |
| expenses.get(expenses.size() - 1).getId()); |
| for (Expense e : expenses) { |
| log.info("Deleting expense " + e.getId()); |
| e.remove(); |
| } |
| for (Report r : Report.findAllReports()) { |
| log.info("Deleting report " + r.getId()); |
| r.remove(); |
| } |
| for (Employee e : Employee.findAllEmployees()) { |
| log.info("Deleting employee " + e.getId()); |
| e.remove(); |
| } |
| } catch (DeadlineExceededException e) { |
| log.info("Expenses after: " + Expense.countExpenses()); |
| return; |
| } |
| } |
| |
| public void generate(final int amount) { |
| long startTime = System.currentTimeMillis(); |
| // endTime = startTime + amount; |
| final int startEmployees = (int) Employee.countEmployees(); |
| final int startReports = (int) Report.countReports(); |
| final int startExpenses = (int) Expense.countExpenses(); |
| int numEmployees; |
| |
| synchronized (DataGenerationServiceImpl.class) { |
| if (reportGenerator == null) { |
| reportGenerator = new ReportGenerator() { |
| @Override |
| public boolean shouldContinue() { |
| // return System.currentTimeMillis() < endTime; |
| int numReports = getNumReports(); |
| return numReports <= amount; |
| } |
| |
| @Override |
| public long storeEmployee(EmployeeDTO employee) { |
| Employee e = new Employee(); |
| e.setDepartment(employee.department); |
| e.setDisplayName(employee.displayName); |
| e.setPassword(employee.password); |
| e.setSupervisorKey(employee.supervisorKey); |
| e.setUserName(employee.userName); |
| e.persist(); |
| return e.getId(); |
| } |
| |
| @Override |
| public long storeExpense(ExpenseDTO expense) { |
| Expense e = new Expense(); |
| e.setReportId(expense.reportId); |
| e.setDescription(expense.description); |
| e.setCreated(expense.created); |
| e.setAmount(expense.amount); |
| e.setCategory(expense.category); |
| e.setApproval(expense.approval); |
| e.setReasonDenied(expense.reasonDenied); |
| e.persist(); |
| return e.getId(); |
| } |
| |
| @Override |
| public long storeReport(ReportDTO report) { |
| Report r = new Report(); |
| r.setApprovedSupervisorKey(report.approvedSupervisorKey); |
| r.setCreated(report.created); |
| r.setDepartment(report.department); |
| r.setNotes(report.notes); |
| r.setPurpose(report.purpose); |
| r.setReporterKey(report.reporterKey); |
| r.persist(); |
| return r.getId(); |
| } |
| }; |
| } |
| |
| try { |
| reportGenerator.init("dist.all.last.txt", "dist.female.first.txt", "dist.male.first.txt"); |
| } catch (IOException e) { |
| throw new RuntimeException(e.getMessage()); |
| } |
| } |
| |
| reportGenerator.reset(); |
| |
| // Use same manager for everyone |
| long supervisorId = 1; |
| while (reportGenerator.shouldContinue()) { |
| int department = reportGenerator.getDepartment(); |
| reportGenerator.makeEmployee(department, supervisorId); |
| } |
| |
| numEmployees = (int) Employee.countEmployees(); |
| int numReports = (int) Report.countReports(); |
| int numExpenses = (int) Expense.countExpenses(); |
| int reportsCreated = numReports - startReports; |
| int employeesCreated = numEmployees - startEmployees; |
| int expensesCreated = numExpenses - startExpenses; |
| log.info("Generated " + employeesCreated + " employees, " + |
| reportsCreated + " reports, and " + expensesCreated + " expenses in " + |
| (System.currentTimeMillis() - startTime) + " milliseconds"); |
| } |
| |
| public List<Integer> getCounts() { |
| synchronized (DataGenerationServiceImpl.class) { |
| List<Integer> counts = new ArrayList<Integer>(3); |
| counts.add((int) Employee.countEmployees()); |
| counts.add((int) Report.countReports()); |
| counts.add((int) Expense.countExpenses()); |
| return counts; |
| } |
| } |
| |
| public void resetCounters() { |
| EntityCounter.reset(); |
| } |
| } |