Package uk.org.woodcraft.bookings.reports

Source Code of uk.org.woodcraft.bookings.reports.GroupedBookingsReport

package uk.org.woodcraft.bookings.reports;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import uk.org.woodcraft.bookings.BookingGrouper;
import uk.org.woodcraft.bookings.BookingGrouper.AgeTransformer;
import uk.org.woodcraft.bookings.BookingGrouper.AllDatesAtEventTransformer;
import uk.org.woodcraft.bookings.BookingGrouper.BookingTransformer;
import uk.org.woodcraft.bookings.BookingGrouper.DietTransformer;
import uk.org.woodcraft.bookings.BookingGrouper.OrgTransformer;
import uk.org.woodcraft.bookings.BookingGrouper.UnitTransformer;
import uk.org.woodcraft.bookings.BookingGrouper.VillageTransformer;
import uk.org.woodcraft.bookings.CannedReport;
import uk.org.woodcraft.bookings.CannedReportLabel;
import uk.org.woodcraft.bookings.datamodel.Booking;
import uk.org.woodcraft.bookings.datamodel.Event;
import uk.org.woodcraft.bookings.persistence.CannedQueries;

public class GroupedBookingsReport extends CannedReport {

  private static Map<String, List<? extends BookingTransformer>> GroupedReports = new HashMap<String, List<? extends BookingTransformer>>();
  static{
    GroupedReports.put("Bookings count by age", Arrays.asList(new AgeTransformer()));
    GroupedReports.put("Bookings count by org, unit", Arrays.asList(new OrgTransformer(), new UnitTransformer()));
    GroupedReports.put("Bookings count by org, unit, village", Arrays.asList(new OrgTransformer(), new UnitTransformer(), new VillageTransformer()));
    GroupedReports.put("Bookings count by village", Arrays.asList(new VillageTransformer()));
    GroupedReports.put("Bookings count by village, age", Arrays.asList(new VillageTransformer(),new AgeTransformer()));
    GroupedReports.put("Bookings count by day", Arrays.asList(new AllDatesAtEventTransformer()));
    GroupedReports.put("Bookings count by day, village, age", Arrays.asList(new AllDatesAtEventTransformer(), new VillageTransformer(), new AgeTransformer()));
    GroupedReports.put("Bookings count by day, village", Arrays.asList(new AllDatesAtEventTransformer(), new VillageTransformer()));
    GroupedReports.put("Bookings count by village, diet", Arrays.asList(new VillageTransformer(), new DietTransformer()));
    GroupedReports.put("Bookings count by day, village, diet", Arrays.asList(new AllDatesAtEventTransformer(), new VillageTransformer(), new DietTransformer()));
  }
 
  private Event currentEvent;
 
  public GroupedBookingsReport(Event event) {
    this.currentEvent = event;
  }
 
  @SuppressWarnings({ "rawtypes", "unchecked" })
  @Override
  protected Collection getRows(CannedReportLabel selectedReport) {
    // FIXME: Assumes one event only
   
    List<BookingTransformer> transformers = (List<BookingTransformer>) GroupedReports.get(selectedReport.getTag());
    BookingGrouper grouper = new BookingGrouper(transformers);
   
    Map<List<Object>, List<Booking>> groupedBookings = grouper.group(CannedQueries.allBookings(true));
   
    List rows = new ArrayList();
    for(Map.Entry<List<Object>, List<Booking>> entry : groupedBookings.entrySet())
    {
      rows.add(buildRow(entry.getKey(), entry.getValue()));
    }
    return rows;
  }

  @SuppressWarnings({ "rawtypes" })
  private List buildRow(List<Object> group, List<Booking> bookings)
  {
    List<Object> cols = new ArrayList<Object>();
    cols.addAll(group);
    cols.add(bookings.size());
   
    return cols;
  }
 
  @Override
  protected List<String> getHeaders(CannedReportLabel selectedReport, List<Method> reportedMethods) {
    @SuppressWarnings("unchecked")
    List<BookingTransformer> transformers = (List<BookingTransformer>) GroupedReports.get(selectedReport.getTag());
    List<String> headers = new ArrayList<String>();
    for(BookingTransformer transformer : transformers)
      headers.add(transformer.columnName());
   
    headers.add("Count");
   
    return headers;
  }

  @Override
  protected List<Method> getReportedMethods(CannedReportLabel selectedReport) {
    return null;
  }
 
  @Override
  protected List<CannedReportLabel> getAvailableReports() {
    List<CannedReportLabel> reports = new ArrayList<CannedReportLabel>();
    for (String reportName : GroupedReports.keySet())
      reports.add(new CannedReportLabel(reportName, reportName, reportName));
   
    return reports;
  }

  @SuppressWarnings("unchecked")
  @Override
  protected List<Object> renderRow(List<Method> reportedMethods, Object data) {
    return (List<Object>)data;
  }

}
TOP

Related Classes of uk.org.woodcraft.bookings.reports.GroupedBookingsReport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.