// Path: src/main/java/com/asana/errors/InvalidTokenError.java
// public class InvalidTokenError extends AsanaError {
//     final public static String MESSAGE = "Sync token invalid or too old";
//     final public static int STATUS = 412;
// 
//     public String sync;
// 
//     public InvalidTokenError(HttpResponseException exception) {
//         super(MESSAGE, STATUS, exception);
// 
//         try {
//             ResultBodyCollection body = Json.getInstance().fromJson(exception.getContent(), ResultBodyCollection.class);
//             sync = body.sync;
//         } catch (Exception e) {
//         }
//     }
// }
// 
// Path: src/main/java/com/asana/models/ResultBodyCollection.java
// public class ResultBodyCollection<T> {
//     public class NextPage {
//         public String offset;
//         public String path;
//         public String uri;
//     }
// 
//     public List<T> data;
// 
//     public String sync;
//     @SerializedName("next_page")
//     public NextPage nextPage;
//     @SerializedName("has_more")
//     public Boolean hasMore;
// }
// 
// Path: src/main/java/com/asana/requests/EventsRequest.java
// public class EventsRequest<T> extends CollectionRequest<T> implements Iterable<T> {
//     public EventsRequest(Resource resource, Class<T> elementClass, String path, String method) {
//         super(resource, elementClass, path, method);
//     }
// 
//     /**
//      * Returns an iterator that will repeatedly make requests to the events API, returning new events as they are emitted
//      *
//      * @return Iterator
//      */
//     public Iterator<T> iterator() {
//         return new EventsPageIterator<T>(this).items();
//     }
// 
//     public EventsRequest<T> query(Map<String, Object> object) {
//         return (EventsRequest<T>) super.query(object);
//     }
// 
//     public EventsRequest<T> query(String key, Object value) {
//         return (EventsRequest<T>) super.query(key, value);
//     }
// 
//     public EventsRequest<T> data(HttpContent content) {
//         return (EventsRequest<T>) super.data(content);
//     }
// 
//     public EventsRequest<T> data(Map<String, Object> object) {
//         return (EventsRequest<T>) super.data(object);
//     }
// 
//     public EventsRequest<T> data(String key, Object value) {
//         return (EventsRequest<T>) super.data(key, value);
//     }
// 
//     public EventsRequest<T> option(String key, Object value) {
//         return (EventsRequest<T>) super.option(key, value);
//     }
// 
//     public EventsRequest<T> header(String key, String value) {
//         return (EventsRequest<T>) super.header(key, value);
//     }
// }


import com.asana.errors.InvalidTokenError;
import com.asana.models.ResultBodyCollection;
import com.asana.requests.EventsRequest;
import java.io.IOException;
import java.util.Collection;
import java.util.NoSuchElementException;
package com.asana.iterator;



/**
 * Loads a "page" of events at a time, automatically updating the sync token on each request
 */
public class EventsPageIterator<T> extends PageIterator<T> {
    public EventsPageIterator(EventsRequest<T> request) {
        super(request);
    }

    @Override
    protected ResultBodyCollection<T> getNext() throws IOException {
// Path: src/main/java/com/asana/errors/InvalidTokenError.java
// public class InvalidTokenError extends AsanaError {
//     final public static String MESSAGE = "Sync token invalid or too old";
//     final public static int STATUS = 412;
// 
//     public String sync;
// 
//     public InvalidTokenError(HttpResponseException exception) {
//         super(MESSAGE, STATUS, exception);
// 
//         try {
//             ResultBodyCollection body = Json.getInstance().fromJson(exception.getContent(), ResultBodyCollection.class);
//             sync = body.sync;
//         } catch (Exception e) {
//         }
//     }
// }
// 
// Path: src/main/java/com/asana/models/ResultBodyCollection.java
// public class ResultBodyCollection<T> {
//     public class NextPage {
//         public String offset;
//         public String path;
//         public String uri;
//     }
// 
//     public List<T> data;
// 
//     public String sync;
//     @SerializedName("next_page")
//     public NextPage nextPage;
//     @SerializedName("has_more")
//     public Boolean hasMore;
// }
// 
// Path: src/main/java/com/asana/requests/EventsRequest.java
// public class EventsRequest<T> extends CollectionRequest<T> implements Iterable<T> {
//     public EventsRequest(Resource resource, Class<T> elementClass, String path, String method) {
//         super(resource, elementClass, path, method);
//     }
// 
//     /**
//      * Returns an iterator that will repeatedly make requests to the events API, returning new events as they are emitted
//      *
//      * @return Iterator
//      */
//     public Iterator<T> iterator() {
//         return new EventsPageIterator<T>(this).items();
//     }
// 
//     public EventsRequest<T> query(Map<String, Object> object) {
//         return (EventsRequest<T>) super.query(object);
//     }
// 
//     public EventsRequest<T> query(String key, Object value) {
//         return (EventsRequest<T>) super.query(key, value);
//     }
// 
//     public EventsRequest<T> data(HttpContent content) {
//         return (EventsRequest<T>) super.data(content);
//     }
// 
//     public EventsRequest<T> data(Map<String, Object> object) {
//         return (EventsRequest<T>) super.data(object);
//     }
// 
//     public EventsRequest<T> data(String key, Object value) {
//         return (EventsRequest<T>) super.data(key, value);
//     }
// 
//     public EventsRequest<T> option(String key, Object value) {
//         return (EventsRequest<T>) super.option(key, value);
//     }
// 
//     public EventsRequest<T> header(String key, String value) {
//         return (EventsRequest<T>) super.header(key, value);
//     }
// }


// Path: src/main/java/com/asana/iterator/EventsPageIterator.java
import com.asana.errors.InvalidTokenError;
import com.asana.models.ResultBodyCollection;
import com.asana.requests.EventsRequest;
import java.io.IOException;
import java.util.Collection;
import java.util.NoSuchElementException;

package com.asana.iterator;



/**
 * Loads a "page" of events at a time, automatically updating the sync token on each request
 */
public class EventsPageIterator<T> extends PageIterator<T> {
    public EventsPageIterator(EventsRequest<T> request) {
        super(request);
    }

    @Override
    protected ResultBodyCollection<T> getNext() throws IOException {
        if (request.query.get("sync") == null) {