package com.zulip.android.networking.response.events;
import android.support.annotation.Nullable;
import com.google.gson.annotations.SerializedName;
import com.zulip.android.util.TypeSwapper;
import com.zulip.android.util.ZLog;
import java.util.ArrayList;
import java.util.List;
public class GetEventResponse {
@SerializedName("msg")
private String msg;
@SerializedName("result")
private String result;
@SerializedName("handler_id")
private int handlerId;
@SerializedName("events")
private List<EventsBranch> events;
@Nullable
public <T> List<T> getEventsOf(EventsBranch.BranchType branchType) {
return getEventsOf(branchType, null);
}
@Nullable
public <T extends EventsBranch, R> List<R> getEventsOf(EventsBranch.BranchType branchType, TypeSwapper<T, R> converter) {
if (events == null) {
return null;
}
try {
List<R> types = new ArrayList<>(events.size());
for (int i = 0; i < events.size(); i++) {
EventsBranch orig = events.get(i);
if (orig.getClass().equals(branchType.getKlazz())) {
if (converter != null) {
types.add(converter.convert((T) orig));
} else {
types.add((R) orig);
}
}
}
return types;
} catch (Exception e) {
//catch misuse
ZLog.logException(e);
return null;
}
}
public List<EventsBranch> getEvents() {
return events;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
/**
* Function to get events of branch type {@param branchType} from {@link GetEventResponse#events}
* list.
*
* @param branchType {@link EventsBranch.BranchType}
* @return list of events of branch type {@param branchType}
*/
public List<EventsBranch> getEventsOfBranchType(EventsBranch.BranchType branchType) {
List<EventsBranch> branches = this.getEvents();
List<EventsBranch> retVal = new ArrayList<>();
for (EventsBranch eventBranch : branches) {
if (eventBranch.getClass().equals(branchType.getKlazz())) {
retVal.add(eventBranch);
}
}
return retVal;
}
}