package org.xcolab.client.tracking; import org.xcolab.client.tracking.pojo.Location; import org.xcolab.client.tracking.pojo.TrackedVisit; import org.xcolab.client.tracking.pojo.TrackedVisitor; import org.xcolab.util.clients.CoLabService; import org.xcolab.util.http.ServiceRequestUtils; import org.xcolab.util.http.caching.CacheKeys; import org.xcolab.util.http.caching.CacheName; import org.xcolab.util.http.client.RestResource; import org.xcolab.util.http.client.RestResource1; import org.xcolab.util.http.client.RestService; public final class TrackingClient { private static final RestService trackingService = new RestService(CoLabService.TRACKING, ServiceRequestUtils.getNamespace()); private static final RestResource<TrackedVisit, Long> trackedVisitResource = new RestResource1<>( trackingService, "trackedVisits", TrackedVisit.TYPES); private static final RestResource<TrackedVisitor, Long> trackedVisitorResource = new RestResource1<>( trackingService, "trackedVisitors", TrackedVisitor.TYPES); private static final RestResource<Location, Long> locationResource = new RestResource1<>( trackingService, "locations", Location.TYPES); public static TrackedVisit addTrackedVisit(String uuid, String url, String ip, String browser, String referer, String headers) { TrackedVisit trackedVisit = new TrackedVisit(); trackedVisit.setUuid_(uuid); trackedVisit.setUrl(url); trackedVisit.setIp(ip); trackedVisit.setBrowser(browser); trackedVisit.setReferer(referer); trackedVisit.setHeaders(headers); return trackedVisitResource.create(trackedVisit).execute(); } public static TrackedVisitor getTrackedVisitorOrCreate(long memberId) { return trackedVisitorResource.query(TrackedVisitor.class) .queryParam("memberId", memberId) .post(); } public static String generateUUID() { return trackedVisitorResource.query(TrackedVisitor.class) .post().getUuid_(); } public static Location getLocationForIp(String ipAddress) { return locationResource.list() .queryParam("ipAddress", ipAddress) .withCache(CacheKeys.withClass(Location.class) .withParameter("ipAddress", ipAddress).asList(), CacheName.MISC_RUNTIME) .executeWithResult().getOneIfExists(); } }