// Path: src/main/java/org/springframework/social/google/api/tasks/TaskList.java
// public class TaskList extends ApiEntity {
// 
//   private String title;
// 
//   public TaskList() {
//   }
// 
//   public TaskList(final String id, final String title) {
//     super(id);
//     this.title = title;
//   }
// 
//   public TaskList(final String title) {
//     this.title = title;
//   }
// 
//   public String getTitle() {
//     return title;
//   }
// 
//   public void setTitle(final String title) {
//     this.title = title;
//   }
// }
// 
// Path: src/main/java/org/springframework/social/google/api/tasks/TaskListQueryBuilder.java
// public interface TaskListQueryBuilder extends ApiQueryBuilder<TaskListQueryBuilder, TaskListsPage> {
// 
// }
// 
// Path: src/main/java/org/springframework/social/google/api/tasks/TaskQueryBuilder.java
// public interface TaskQueryBuilder extends ApiQueryBuilder<TaskQueryBuilder, TasksPage> {
// 
//   TaskQueryBuilder fromTaskList(String taskListId);
// 
//   TaskQueryBuilder completedFrom(Date completedMin);
// 
//   TaskQueryBuilder completedUntil(Date completedMax);
// 
//   TaskQueryBuilder dueFrom(Date dueMin);
// 
//   TaskQueryBuilder dueUntil(Date dueMax);
// 
//   TaskQueryBuilder updatedFrom(Date updatedMin);
// 
//   TaskQueryBuilder includeCompleted(boolean includeCompleted);
// 
//   TaskQueryBuilder includeDeleted(boolean includeDeleted);
// 
//   TaskQueryBuilder includeHidden(boolean includeHidden);
// }
// 
// Path: src/main/java/org/springframework/social/google/api/tasks/TasksPage.java
// public class TasksPage extends ApiPage<Task> {
// 
// }


import static org.springframework.util.Assert.isNull;
import static org.springframework.util.Assert.isTrue;
import static org.springframework.util.Assert.notNull;
import static org.springframework.util.StringUtils.hasText;
import org.springframework.social.google.api.impl.AbstractGoogleApiOperations;
import org.springframework.social.google.api.tasks.Task;
import org.springframework.social.google.api.tasks.TaskList;
import org.springframework.social.google.api.tasks.TaskListQueryBuilder;
import org.springframework.social.google.api.tasks.TaskListsPage;
import org.springframework.social.google.api.tasks.TaskOperations;
import org.springframework.social.google.api.tasks.TaskQueryBuilder;
import org.springframework.social.google.api.tasks.TasksPage;
import org.springframework.web.client.RestTemplate;
  public TaskList getTaskList(final String id) {
    return getEntity(TASK_LISTS_URL + '/' + id, TaskList.class);
  }

  @Override
  public TaskList saveTaskList(final TaskList taskList) {
    return saveEntity(TASK_LISTS_URL, taskList);
  }

  @Override
  public void deleteTaskList(final TaskList taskList) {
    deleteTaskList(taskList.getId());
  }

  @Override
  public void deleteTaskList(final String taskListId) {
    deleteEntity(TASK_LISTS_URL, taskListId);
  }

  @Override
  public TaskListQueryBuilder taskListQuery() {
    return new TaskListQueryBuilderImpl(restTemplate);
  }

  @Override
  public TasksPage getTasks() {
    return taskQuery().maxResultsNumber(100).getPage();
  }

  @Override
// Path: src/main/java/org/springframework/social/google/api/tasks/TaskList.java
// public class TaskList extends ApiEntity {
// 
//   private String title;
// 
//   public TaskList() {
//   }
// 
//   public TaskList(final String id, final String title) {
//     super(id);
//     this.title = title;
//   }
// 
//   public TaskList(final String title) {
//     this.title = title;
//   }
// 
//   public String getTitle() {
//     return title;
//   }
// 
//   public void setTitle(final String title) {
//     this.title = title;
//   }
// }
// 
// Path: src/main/java/org/springframework/social/google/api/tasks/TaskListQueryBuilder.java
// public interface TaskListQueryBuilder extends ApiQueryBuilder<TaskListQueryBuilder, TaskListsPage> {
// 
// }
// 
// Path: src/main/java/org/springframework/social/google/api/tasks/TaskQueryBuilder.java
// public interface TaskQueryBuilder extends ApiQueryBuilder<TaskQueryBuilder, TasksPage> {
// 
//   TaskQueryBuilder fromTaskList(String taskListId);
// 
//   TaskQueryBuilder completedFrom(Date completedMin);
// 
//   TaskQueryBuilder completedUntil(Date completedMax);
// 
//   TaskQueryBuilder dueFrom(Date dueMin);
// 
//   TaskQueryBuilder dueUntil(Date dueMax);
// 
//   TaskQueryBuilder updatedFrom(Date updatedMin);
// 
//   TaskQueryBuilder includeCompleted(boolean includeCompleted);
// 
//   TaskQueryBuilder includeDeleted(boolean includeDeleted);
// 
//   TaskQueryBuilder includeHidden(boolean includeHidden);
// }
// 
// Path: src/main/java/org/springframework/social/google/api/tasks/TasksPage.java
// public class TasksPage extends ApiPage<Task> {
// 
// }


// Path: src/main/java/org/springframework/social/google/api/tasks/impl/TaskTemplate.java
import static org.springframework.util.Assert.isNull;
import static org.springframework.util.Assert.isTrue;
import static org.springframework.util.Assert.notNull;
import static org.springframework.util.StringUtils.hasText;
import org.springframework.social.google.api.impl.AbstractGoogleApiOperations;
import org.springframework.social.google.api.tasks.Task;
import org.springframework.social.google.api.tasks.TaskList;
import org.springframework.social.google.api.tasks.TaskListQueryBuilder;
import org.springframework.social.google.api.tasks.TaskListsPage;
import org.springframework.social.google.api.tasks.TaskOperations;
import org.springframework.social.google.api.tasks.TaskQueryBuilder;
import org.springframework.social.google.api.tasks.TasksPage;
import org.springframework.web.client.RestTemplate;

  public TaskList getTaskList(final String id) {
    return getEntity(TASK_LISTS_URL + '/' + id, TaskList.class);
  }

  @Override
  public TaskList saveTaskList(final TaskList taskList) {
    return saveEntity(TASK_LISTS_URL, taskList);
  }

  @Override
  public void deleteTaskList(final TaskList taskList) {
    deleteTaskList(taskList.getId());
  }

  @Override
  public void deleteTaskList(final String taskListId) {
    deleteEntity(TASK_LISTS_URL, taskListId);
  }

  @Override
  public TaskListQueryBuilder taskListQuery() {
    return new TaskListQueryBuilderImpl(restTemplate);
  }

  @Override
  public TasksPage getTasks() {
    return taskQuery().maxResultsNumber(100).getPage();
  }

  @Override
  public TasksPage getTasks(final String taskListId, final String pageToken) {