| /* |
| * 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.client; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.dom.client.Element; |
| import com.google.gwt.sample.expenses.shared.EmployeeProxy; |
| import com.google.gwt.sample.expenses.shared.ExpensesRequestFactory; |
| import com.google.gwt.sample.expenses.shared.ReportProxy; |
| import com.google.gwt.sample.expenses.shared.ReportRequest; |
| import com.google.gwt.uibinder.client.UiBinder; |
| import com.google.gwt.uibinder.client.UiField; |
| import com.google.gwt.user.client.ui.Composite; |
| import com.google.gwt.user.client.ui.ListBox; |
| import com.google.gwt.user.client.ui.TextBox; |
| import com.google.gwt.user.client.ui.Widget; |
| import com.google.web.bindery.requestfactory.shared.Receiver; |
| |
| import java.util.Date; |
| |
| /** |
| * Form to create a new ReportRecord. |
| */ |
| public class MobileReportEntry extends Composite implements MobilePage { |
| |
| /** |
| * TODO: doc. |
| */ |
| public interface Listener { |
| void onReportUpdated(); |
| } |
| |
| interface Binder extends UiBinder<Widget, MobileReportEntry> { |
| } |
| |
| private static Binder BINDER = GWT.create(Binder.class); |
| |
| @UiField |
| TextBox purposeText, notesText; |
| @UiField |
| ListBox dateYear, dateMonth, dateDay, departmentList; |
| @UiField |
| Element errorText; |
| |
| private ReportProxy report; |
| private final ExpensesRequestFactory requestFactory; |
| @SuppressWarnings("unused") |
| private final Listener listener; |
| private ReportRequest request; |
| |
| public MobileReportEntry(Listener listener, |
| ExpensesRequestFactory requestFactory) { |
| this.listener = listener; |
| this.requestFactory = requestFactory; |
| initWidget(BINDER.createAndBindUi(this)); |
| |
| for (String department : ExpensesApp.DEPARTMENTS) { |
| departmentList.addItem(department); |
| } |
| |
| populateList(dateYear, 2000, 2010); |
| populateList(dateMonth, 1, 12); |
| populateList(dateDay, 1, 31); |
| } |
| |
| @Override |
| public Widget asWidget() { |
| return this; |
| } |
| |
| public void create(EmployeeProxy reporter) { |
| request = requestFactory.reportRequest(); |
| report = request.create(ReportProxy.class); |
| request.persist().using(report); |
| report.setReporter(reporter); |
| displayReport(); |
| } |
| |
| public String getPageTitle() { |
| return report != null ? report.getPurpose() : ""; |
| } |
| |
| public boolean needsAddButton() { |
| return false; |
| } |
| |
| public String needsCustomButton() { |
| return "Done"; |
| } |
| |
| public boolean needsRefreshButton() { |
| return false; |
| } |
| |
| public void onAdd() { |
| } |
| |
| @SuppressWarnings("deprecation") |
| public void onCustom() { |
| ReportProxy editableReport = request.edit(report); |
| editableReport.setPurpose(purposeText.getText()); |
| editableReport.setNotes(notesText.getText()); |
| editableReport.setDepartment(departmentList.getValue(departmentList.getSelectedIndex())); |
| |
| // TODO(jgw): Use non-deprecated date methods for this. |
| Date date = new Date(dateYear.getSelectedIndex() + 100, |
| dateMonth.getSelectedIndex(), dateDay.getSelectedIndex() + 1); |
| editableReport.setCreated(date); |
| |
| // TODO: wait throbber |
| request.fire(new Receiver<Void>() { |
| @Override |
| public void onSuccess(Void ignore) { |
| } |
| |
| // use onViolations to check for ConstraintViolations. |
| }); |
| } |
| |
| public void onRefresh(boolean clear) { |
| } |
| |
| public void show(ReportProxy report) { |
| this.report = report; |
| displayReport(); |
| } |
| |
| private void displayReport() { |
| errorText.setInnerText(""); |
| purposeText.setText(report.getPurpose()); |
| notesText.setText(report.getNotes()); |
| String department = report.getDepartment(); |
| departmentList.setSelectedIndex(0); |
| for (int i = 0; i < ExpensesApp.DEPARTMENTS.length; i++) { |
| if (ExpensesApp.DEPARTMENTS[i].equals(department)) { |
| departmentList.setSelectedIndex(i); |
| } |
| } |
| |
| Date d = report.getCreated(); |
| showCreationDate(d); |
| } |
| |
| private void populateList(ListBox list, int start, int end) { |
| for (int i = start; i <= end; ++i) { |
| if (i < 10) { |
| list.addItem("0" + i); |
| } else { |
| list.addItem("" + i); |
| } |
| } |
| } |
| |
| @SuppressWarnings("deprecation") |
| private void showCreationDate(Date d) { |
| if (d != null) { |
| // TODO(jgw): Use non-deprecated date methods for this. |
| dateYear.setSelectedIndex(d.getYear() - 100); |
| dateMonth.setSelectedIndex(d.getMonth()); |
| dateDay.setSelectedIndex(d.getDate() - 1); |
| } else { |
| dateYear.setSelectedIndex(0); |
| dateMonth.setSelectedIndex(0); |
| dateDay.setSelectedIndex(0); |
| } |
| } |
| } |