From bd7e003d013611615fa7a9c2eed994345c7970d8 Mon Sep 17 00:00:00 2001 From: Catalin Craciun Date: Wed, 31 Oct 2018 08:19:09 +0200 Subject: [PATCH 1/2] Refactored collections iterators, extracted the iterator directly into TypedDataCollection so that all the collections can benefit from the iterator. --- .../java/io/intercom/api/AdminCollection.java | 18 +------------- .../io/intercom/api/CompanyCollection.java | 18 +------------- .../io/intercom/api/ContactCollection.java | 17 +------------ .../intercom/api/ConversationCollection.java | 18 +------------- .../java/io/intercom/api/EventCollection.java | 16 +------------ .../io/intercom/api/JobItemCollection.java | 21 +--------------- .../java/io/intercom/api/NoteCollection.java | 18 +------------- .../intercom/api/NotificationCollection.java | 18 +------------- .../api/NotificationErrorCollection.java | 18 +------------- .../io/intercom/api/SegmentCollection.java | 20 ++-------------- .../intercom/api/SubscriptionCollection.java | 20 ++-------------- .../java/io/intercom/api/TagCollection.java | 20 ++-------------- .../io/intercom/api/TypedDataCollection.java | 24 ++++++++++++++++++- .../java/io/intercom/api/UserCollection.java | 18 +------------- 14 files changed, 39 insertions(+), 225 deletions(-) diff --git a/intercom-java/src/main/java/io/intercom/api/AdminCollection.java b/intercom-java/src/main/java/io/intercom/api/AdminCollection.java index 7f37a2a5..a9978dc6 100644 --- a/intercom-java/src/main/java/io/intercom/api/AdminCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/AdminCollection.java @@ -4,18 +4,15 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class AdminCollection extends TypedDataCollection implements Iterator { - protected TypedDataCollectionIterator iterator; +public class AdminCollection extends TypedDataCollection { public AdminCollection() { type = "company.list"; - iterator = new TypedDataCollectionIterator(this); } @Override @@ -29,17 +26,4 @@ public AdminCollection nextPage() { public List getPage() { return super.getPage(); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public Admin next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } diff --git a/intercom-java/src/main/java/io/intercom/api/CompanyCollection.java b/intercom-java/src/main/java/io/intercom/api/CompanyCollection.java index 37f8019e..57b7bdc8 100644 --- a/intercom-java/src/main/java/io/intercom/api/CompanyCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/CompanyCollection.java @@ -3,21 +3,17 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class CompanyCollection extends TypedDataCollection implements Iterator { - - protected TypedDataCollectionIterator iterator; +public class CompanyCollection extends TypedDataCollection { @JsonProperty("total_count") private long totalCount; public CompanyCollection() { type = "company.list"; - iterator = new TypedDataCollectionIterator(this); } public CompanyCollection(List companies) { @@ -41,18 +37,6 @@ public CompanyCollection nextPage() { return fetchNextPage(CompanyCollection.class); } - public boolean hasNext() { - return iterator.hasNext(); - } - - public Company next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - @Override public String toString() { return "CompanyCollection{" + diff --git a/intercom-java/src/main/java/io/intercom/api/ContactCollection.java b/intercom-java/src/main/java/io/intercom/api/ContactCollection.java index 2dbfd123..dbd2de08 100644 --- a/intercom-java/src/main/java/io/intercom/api/ContactCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/ContactCollection.java @@ -8,12 +8,10 @@ @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class ContactCollection extends TypedDataCollection implements Iterator { +public class ContactCollection extends TypedDataCollection { - protected TypedDataCollectionIterator iterator; public ContactCollection() { - iterator = new TypedDataCollectionIterator(this); } public ContactCollection(List contacts) { @@ -32,17 +30,4 @@ public List getPage() { public ContactCollection nextPage() { return fetchNextPage(ContactCollection.class); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public Contact next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } diff --git a/intercom-java/src/main/java/io/intercom/api/ConversationCollection.java b/intercom-java/src/main/java/io/intercom/api/ConversationCollection.java index 68251f0c..33965186 100644 --- a/intercom-java/src/main/java/io/intercom/api/ConversationCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/ConversationCollection.java @@ -8,13 +8,11 @@ @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class ConversationCollection extends TypedDataCollection implements Iterator { +public class ConversationCollection extends TypedDataCollection { - protected TypedDataCollectionIterator iterator; public ConversationCollection() { type = "conversation.list"; - iterator = new TypedDataCollectionIterator(this); } @SuppressWarnings("EmptyMethod") @@ -27,18 +25,4 @@ public List getPage() { public ConversationCollection nextPage() { return fetchNextPage(ConversationCollection.class); } - - - public boolean hasNext() { - return iterator.hasNext(); - } - - public Conversation next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } diff --git a/intercom-java/src/main/java/io/intercom/api/EventCollection.java b/intercom-java/src/main/java/io/intercom/api/EventCollection.java index adcc18ab..70a74fba 100644 --- a/intercom-java/src/main/java/io/intercom/api/EventCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/EventCollection.java @@ -8,11 +8,9 @@ @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class EventCollection extends TypedDataCollection implements Iterator { - protected TypedDataCollectionIterator iterator; +public class EventCollection extends TypedDataCollection { public EventCollection() { - iterator = new TypedDataCollectionIterator(this); } public EventCollection(List events) { @@ -31,16 +29,4 @@ public List getPage() { public EventCollection nextPage() { return fetchNextPage(EventCollection.class); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public Event next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } } diff --git a/intercom-java/src/main/java/io/intercom/api/JobItemCollection.java b/intercom-java/src/main/java/io/intercom/api/JobItemCollection.java index 52d841b2..0cbd7641 100644 --- a/intercom-java/src/main/java/io/intercom/api/JobItemCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/JobItemCollection.java @@ -3,19 +3,13 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class JobItemCollection - extends TypedDataCollection> - implements Iterator> { - - protected TypedDataCollectionIterator> iterator; +public class JobItemCollection extends TypedDataCollection> { public JobItemCollection() { - iterator = new TypedDataCollectionIterator>(this); } public JobItemCollection(List> items) { @@ -34,17 +28,4 @@ public List> getPage() { public JobItemCollection nextPage() { return fetchNextPage(JobItemCollection.class); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public JobItem next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } diff --git a/intercom-java/src/main/java/io/intercom/api/NoteCollection.java b/intercom-java/src/main/java/io/intercom/api/NoteCollection.java index 8a389088..63d40dec 100644 --- a/intercom-java/src/main/java/io/intercom/api/NoteCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/NoteCollection.java @@ -3,17 +3,14 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class NoteCollection extends TypedDataCollection implements Iterator { +public class NoteCollection extends TypedDataCollection { - protected TypedDataCollectionIterator iterator; public NoteCollection() { - iterator = new TypedDataCollectionIterator(this); } @Override @@ -27,17 +24,4 @@ public NoteCollection nextPage() { public List getPage() { return super.getPage(); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public Note next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } diff --git a/intercom-java/src/main/java/io/intercom/api/NotificationCollection.java b/intercom-java/src/main/java/io/intercom/api/NotificationCollection.java index ff27f3c8..e1d89de6 100644 --- a/intercom-java/src/main/java/io/intercom/api/NotificationCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/NotificationCollection.java @@ -3,18 +3,15 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class NotificationCollection extends TypedDataCollection implements Iterator { +public class NotificationCollection extends TypedDataCollection { - protected TypedDataCollectionIterator iterator; public NotificationCollection() { type = "notification.list"; - iterator = new TypedDataCollectionIterator(this); } @Override @@ -28,17 +25,4 @@ public NotificationCollection nextPage() { public List getPage() { return super.getPage(); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public Notification next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } diff --git a/intercom-java/src/main/java/io/intercom/api/NotificationErrorCollection.java b/intercom-java/src/main/java/io/intercom/api/NotificationErrorCollection.java index 8121449a..cec6d0f9 100644 --- a/intercom-java/src/main/java/io/intercom/api/NotificationErrorCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/NotificationErrorCollection.java @@ -3,18 +3,14 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class NotificationErrorCollection extends TypedDataCollection implements Iterator { - - protected TypedDataCollectionIterator iterator; +public class NotificationErrorCollection extends TypedDataCollection { public NotificationErrorCollection() { type = "notification.list"; - iterator = new TypedDataCollectionIterator(this); } @SuppressWarnings("EmptyMethod") @@ -28,16 +24,4 @@ public List getPage() { public NotificationErrorCollection nextPage() { return fetchNextPage(NotificationErrorCollection.class); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public NotificationError next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } } diff --git a/intercom-java/src/main/java/io/intercom/api/SegmentCollection.java b/intercom-java/src/main/java/io/intercom/api/SegmentCollection.java index 309697f0..61283888 100644 --- a/intercom-java/src/main/java/io/intercom/api/SegmentCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/SegmentCollection.java @@ -4,19 +4,15 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class SegmentCollection extends TypedDataCollection implements Iterator { - - protected TypedDataCollectionIterator iterator; +public class SegmentCollection extends TypedDataCollection { public SegmentCollection() { type = "segment.list"; - iterator = new TypedDataCollectionIterator(this); } @Override @@ -31,21 +27,9 @@ public List getPage() { return super.getPage(); } - public boolean hasNext() { - return iterator.hasNext(); - } - - public Segment next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - @Override public String toString() { return "SegmentCollection{" + - "} " + super.toString(); + "} " + super.toString(); } } diff --git a/intercom-java/src/main/java/io/intercom/api/SubscriptionCollection.java b/intercom-java/src/main/java/io/intercom/api/SubscriptionCollection.java index ac9aceeb..cb5ca887 100644 --- a/intercom-java/src/main/java/io/intercom/api/SubscriptionCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/SubscriptionCollection.java @@ -4,18 +4,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class SubscriptionCollection extends TypedDataCollection implements Iterator { - - protected TypedDataCollectionIterator iterator; +public class SubscriptionCollection extends TypedDataCollection { public SubscriptionCollection() { - iterator = new TypedDataCollectionIterator(this); } @Override @@ -30,21 +26,9 @@ public List getPage() { return super.getPage(); } - public boolean hasNext() { - return iterator.hasNext(); - } - - public Subscription next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - @Override public String toString() { return "SubscriptionCollection{" + - "} " + super.toString(); + "} " + super.toString(); } } diff --git a/intercom-java/src/main/java/io/intercom/api/TagCollection.java b/intercom-java/src/main/java/io/intercom/api/TagCollection.java index b37e942c..57fdf6bb 100644 --- a/intercom-java/src/main/java/io/intercom/api/TagCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/TagCollection.java @@ -4,18 +4,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class TagCollection extends TypedDataCollection implements Iterator { - - protected TypedDataCollectionIterator iterator; +public class TagCollection extends TypedDataCollection { public TagCollection() { - iterator = new TypedDataCollectionIterator(this); } @Override @@ -30,21 +26,9 @@ public List getPage() { return super.getPage(); } - public boolean hasNext() { - return iterator.hasNext(); - } - - public Tag next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - @Override public String toString() { return "TagCollection{" + - "} " + super.toString(); + "} " + super.toString(); } } diff --git a/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java b/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java index 44895934..c76bc6f7 100644 --- a/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java @@ -9,13 +9,14 @@ import com.google.common.collect.Maps; import java.net.URI; +import java.util.Iterator; import java.util.List; import java.util.Map; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(value={"page"}, ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) -public abstract class TypedDataCollection extends TypedData { +public abstract class TypedDataCollection extends TypedData implements Iterator { public static final String NEXT_PAGE_REL = "next"; @@ -27,6 +28,12 @@ public abstract class TypedDataCollection extends TypedData @JsonProperty("type") protected String type; + private TypedDataCollectionIterator iterator; + + public TypedDataCollection() { + iterator = new TypedDataCollectionIterator<>(this); + } + public abstract TypedDataCollection nextPage(); public boolean hasNextPage() { @@ -55,6 +62,21 @@ public String getType() { return type; } + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public T next() { + return iterator.next(); + } + + @Override + public void remove() { + iterator.remove(); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/intercom-java/src/main/java/io/intercom/api/UserCollection.java b/intercom-java/src/main/java/io/intercom/api/UserCollection.java index eb46c8a1..78394909 100644 --- a/intercom-java/src/main/java/io/intercom/api/UserCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/UserCollection.java @@ -3,17 +3,14 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Iterator; import java.util.List; @SuppressWarnings("UnusedDeclaration") @JsonIgnoreProperties(ignoreUnknown = true) -public class UserCollection extends TypedDataCollection implements Iterator { +public class UserCollection extends TypedDataCollection { - protected TypedDataCollectionIterator iterator; public UserCollection() { - iterator = new TypedDataCollectionIterator(this); } public UserCollection(List users) { @@ -32,17 +29,4 @@ public List getPage() { public UserCollection nextPage() { return fetchNextPage(UserCollection.class); } - - public boolean hasNext() { - return iterator.hasNext(); - } - - public User next() { - return iterator.next(); - } - - public void remove() { - iterator.remove(); - } - } From bbfe445da7708819ed3d289c5c4839682acd13b6 Mon Sep 17 00:00:00 2001 From: Catalin Craciun Date: Wed, 31 Oct 2018 08:23:30 +0200 Subject: [PATCH 2/2] Making sure the iterator is always initialized, even if a subclass does not call super() in its constructor. --- .../src/main/java/io/intercom/api/TypedDataCollection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java b/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java index c76bc6f7..440e8352 100644 --- a/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java +++ b/intercom-java/src/main/java/io/intercom/api/TypedDataCollection.java @@ -30,7 +30,7 @@ public abstract class TypedDataCollection extends TypedData private TypedDataCollectionIterator iterator; - public TypedDataCollection() { + { iterator = new TypedDataCollectionIterator<>(this); }