package com.pivotallabs.tracker;
import com.pivotallabs.Callbacks;
import com.pivotallabs.MultiCallbacks;
import com.pivotallabs.api.ApiGateway;
import com.pivotallabs.api.ApiResponse;
import com.pivotallabs.api.ApiResponseCallbacks;
import com.pivotallabs.api.XmlApiResponse;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
public class RecentActivities extends ArrayList<RecentActivity> {
private static final long serialVersionUID = 2810203342716301892L;
private ApiGateway apiGateway;
private AuthenticationGateway authenticationGateway;
public RecentActivities(ApiGateway apiGateway, AuthenticationGateway authenticationGateway) {
this.apiGateway = apiGateway;
this.authenticationGateway = authenticationGateway;
}
public void update(Callbacks... callbacks) {
MultiCallbacks multiCallbacks = new MultiCallbacks(callbacks);
multiCallbacks.onStart();
apiGateway.makeRequest(
new RecentActivityRequest(authenticationGateway.getToken()),
new RecentActivityApiResponseCallbacks(multiCallbacks));
}
private class RecentActivityApiResponseCallbacks implements ApiResponseCallbacks<XmlApiResponse> {
private Callbacks callbacks;
public RecentActivityApiResponseCallbacks(Callbacks callbacks) {
this.callbacks = callbacks;
}
@Override
public void onSuccess(XmlApiResponse response) {
clear();
NodeList activityNodeList = response.getResponseDocument().getElementsByTagName("activity");
for (int i = 0; i < activityNodeList.getLength(); i++) {
add(new RecentActivity().apply((Element) activityNodeList.item(i)));
}
callbacks.onSuccess();
}
@Override
public void onFailure(ApiResponse response) {
callbacks.onFailure();
}
@Override
public void onComplete() {
callbacks.onComplete();
}
}
}