package org.xcolab.client.balloons;
import org.xcolab.client.balloons.exceptions.BalloonUserTrackingNotFound;
import org.xcolab.client.balloons.pojo.BalloonLink;
import org.xcolab.client.balloons.pojo.BalloonText;
import org.xcolab.client.balloons.pojo.BalloonUserTracking;
import org.xcolab.util.clients.CoLabService;
import org.xcolab.util.http.ServiceRequestUtils;
import org.xcolab.util.http.client.RestResource;
import org.xcolab.util.http.client.RestResource1;
import org.xcolab.util.http.client.RestService;
import org.xcolab.util.http.exceptions.EntityNotFoundException;
import java.util.List;
public final class BalloonsClient {
private static final RestService trackingService = new RestService(CoLabService.TRACKING,
ServiceRequestUtils.getNamespace());
private static final RestResource<BalloonLink, String> balloonLinkResource = new RestResource1<>(
trackingService, "balloonLinks", BalloonLink.TYPES);
private static final RestResource<BalloonUserTracking, String> balloonUserTrackingResource =
new RestResource1<>(trackingService, "balloonUserTrackings", BalloonUserTracking.TYPES);
private static final RestResource<BalloonText, Long> balloonTextResource = new RestResource1<>(
trackingService, "balloonTexts", BalloonText.TYPES);
public static BalloonLink getBalloonLink(String uuid) throws BalloonUserTrackingNotFound {
try {
return balloonLinkResource.get(uuid).executeChecked();
} catch (EntityNotFoundException e) {
throw new BalloonUserTrackingNotFound(
"BalloonLink " + uuid + " does not exist");
}
}
public static BalloonLink createBalloonLink(BalloonLink balloonLink) {
return balloonLinkResource.create(balloonLink).execute();
}
public static boolean updateBalloonLink(BalloonLink balloonLink) {
return balloonLinkResource.update(balloonLink, balloonLink.getUuid_()).execute();
}
public static BalloonLink getBalloonLinkByMemberUuid(String memberUuid)
throws BalloonUserTrackingNotFound {
final BalloonLink balloonLink = balloonLinkResource.list()
.queryParam("memberUuid", memberUuid)
.executeWithResult().getFirstIfExists();
if (balloonLink == null) {
throw new BalloonUserTrackingNotFound(
"BalloonLink with memberUuid " + memberUuid + " does not exist");
}
return balloonLink;
}
public static BalloonUserTracking getBalloonUserTracking(String uuid)
throws BalloonUserTrackingNotFound {
try {
return balloonUserTrackingResource.get(uuid).executeChecked();
} catch (EntityNotFoundException e) {
throw new BalloonUserTrackingNotFound(
"BalloonUserTracking " + uuid + " does not exist");
}
}
public static List<BalloonUserTracking> getBalloonUserTrackingByEmail(String email) {
return balloonUserTrackingResource.list()
.queryParam("email", email)
.execute();
}
public static List<BalloonUserTracking> getAllBalloonUserTracking() {
return balloonUserTrackingResource.list().execute();
}
public static BalloonUserTracking createBalloonUserTracking(
BalloonUserTracking balloonUserTracking) {
return balloonUserTrackingResource.create(balloonUserTracking).execute();
}
public static boolean updateBalloonUserTracking(BalloonUserTracking balloonUserTracking) {
return balloonUserTrackingResource.update(balloonUserTracking,
balloonUserTracking.getUuid_()).execute();
}
public static BalloonText getBalloonText(Long id) throws BalloonUserTrackingNotFound {
try {
return balloonTextResource.get(id).executeChecked();
} catch (EntityNotFoundException e) {
throw new BalloonUserTrackingNotFound(
"BalloonText " + id + " does not exist");
}
}
public static BalloonText createBalloonText(BalloonText balloonText) {
return balloonTextResource.create(balloonText).execute();
}
public static List<BalloonText> getAllEnabledBalloonTexts() {
return balloonTextResource.list().execute();
}
public static boolean updateBalloonText(BalloonText balloonText) {
return balloonTextResource.update(balloonText, balloonText.getId_()).execute();
}
public static boolean deleteBalloonText(Long id) {
return balloonTextResource.delete(id).execute();
}
}