/*
 * 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;

import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.sample.mobilewebapp.presenter.task.TaskEditView;
import com.google.gwt.sample.mobilewebapp.presenter.task.TaskReadView;
import com.google.gwt.sample.mobilewebapp.presenter.tasklist.TaskListView;
import com.google.gwt.sample.mobilewebapp.shared.MobileWebAppRequestFactory;
import com.google.web.bindery.event.shared.EventBus;

/**
 * The factory responsible for instantiating everything interesting in this
 * application. Typically this might be a <a href=
 * "https://google.github.io/dagger/api/latest/dagger/Component.html"
 * >Component</a> code generated by <a
 * href="https://google.github.io/dagger/">Dagger</a>.
 */
public interface ClientFactory {
  /**
   * Create the App.
   * 
   * @return a new instance of the {@link App}
   */
  App getApp();

  /**
   * Get the {@link EventBus}
   * 
   * @return the event bus used through the app
   */
  EventBus getEventBus();

  /**
   * Get the {@link PlaceController}.
   * 
   * @return the place controller
   */
  PlaceController getPlaceController();

  /**
   * Get the RequestFactory used to query the server.
   * 
   * @return the request factory
   */
  MobileWebAppRequestFactory getRequestFactory();

  /**
   * Get the UI shell.
   * 
   * @return the shell
   */
  MobileWebAppShell getShell();

  /**
   * Get an implementation of {@link TaskEditView}.
   */
  TaskEditView getTaskEditView();

  /**
   * Get an implementation of {@link TaskListView}.
   */
  TaskListView getTaskListView();

  /**
   * Get the {@link TaskProxyLocalStorage} that stores tasks.
   */
  TaskProxyLocalStorage getTaskProxyLocalStorage();

  /**
   * Get an implementation of {@link TaskEditView}.
   */
  TaskReadView getTaskReadView();
}
