| /* |
| * Copyright 2011 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.mobilewebapp.client.activity; |
| |
| import com.google.gwt.activity.shared.AbstractActivity; |
| import com.google.gwt.sample.mobilewebapp.client.ClientFactory; |
| import com.google.gwt.sample.mobilewebapp.client.event.TaskEditEvent; |
| import com.google.gwt.sample.mobilewebapp.presenter.task.TaskEditPresenter; |
| import com.google.gwt.sample.mobilewebapp.presenter.task.TaskPlace; |
| import com.google.gwt.sample.mobilewebapp.presenter.task.TaskReadPresenter; |
| import com.google.gwt.sample.mobilewebapp.shared.TaskProxy; |
| import com.google.gwt.sample.ui.client.PresentsWidgets; |
| import com.google.gwt.user.client.ui.AcceptsOneWidget; |
| import com.google.web.bindery.event.shared.ResettableEventBus; |
| |
| /** |
| * An activity that shows details on a particular task, and allows the user to |
| * edit it. |
| */ |
| public class TaskActivity extends AbstractActivity { |
| private PresentsWidgets presenter; |
| |
| private final TaskPlace place; |
| |
| private final ClientFactory clientFactory; |
| |
| private ResettableEventBus childEventBus; |
| |
| /** |
| * Construct a new {@link TaskActivity}. |
| * |
| * @param clientFactory the {@link ClientFactory} of shared resources |
| * @param place configuration for this activity |
| */ |
| public TaskActivity(ClientFactory clientFactory, TaskPlace place) { |
| this.place = place; |
| this.clientFactory = clientFactory; |
| } |
| |
| @Override |
| public String mayStop() { |
| return presenter.mayStop(); |
| } |
| |
| @Override |
| public void onCancel() { |
| presenter.stop(); |
| } |
| |
| @Override |
| public void onStop() { |
| childEventBus.removeHandlers(); |
| presenter.stop(); |
| } |
| |
| public void start(final AcceptsOneWidget container, com.google.gwt.event.shared.EventBus eventBus) { |
| this.childEventBus = new ResettableEventBus(eventBus); |
| eventBus.addHandler(TaskEditEvent.TYPE, new TaskEditEvent.Handler() { |
| @Override |
| public void onTaskEdit(TaskEditEvent event) { |
| // Stop the read presenter |
| onStop(); |
| presenter = startEdit(event.getReadOnlyTask()); |
| container.setWidget(presenter); |
| } |
| }); |
| |
| if (place.getTaskId() == null) { |
| presenter = startCreate(); |
| } else { |
| presenter = startDisplay(place); |
| } |
| container.setWidget(presenter); |
| } |
| |
| private PresentsWidgets startCreate() { |
| PresentsWidgets rtn = new TaskEditPresenter(clientFactory); |
| rtn.start(childEventBus); |
| return rtn; |
| } |
| |
| private PresentsWidgets startDisplay(TaskPlace place) { |
| PresentsWidgets rtn = new TaskReadPresenter(clientFactory, place); |
| rtn.start(childEventBus); |
| return rtn; |
| } |
| |
| private PresentsWidgets startEdit(TaskProxy readOnlyTask) { |
| PresentsWidgets rtn = new TaskEditPresenter(clientFactory, readOnlyTask); |
| rtn.start(childEventBus); |
| return rtn; |
| } |
| } |