package org.karmaexchange.snapshot; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.codec.digest.DigestUtils; import com.github.avaliani.snapshot.SnapshotResult; import com.google.common.collect.Maps; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.Entity; import com.googlecode.objectify.annotation.Id; @Entity @Data @NoArgsConstructor public class WebPageSnapshot { private String url; @Id private String urlMd5; private String snapshot; private Date creationDate; public WebPageSnapshot(HttpServletRequest clientRequest, SnapshotResult result) { url = getCanonicalUrl(clientRequest); urlMd5 = DigestUtils.md5Hex(url); snapshot = result.getSnapshot(); creationDate = new Date(); } public SnapshotResult toSnapshotResult() { return new SnapshotResult( snapshot, Maps.<String, List<String>>newHashMap()); } public static Key<WebPageSnapshot> getKey(HttpServletRequest clientRequest) { return Key.create( WebPageSnapshot.class, DigestUtils.md5Hex(getCanonicalUrl(clientRequest))); } public static String getCanonicalUrl(HttpServletRequest request) { String requestUrl = request.getRequestURL().toString(); String queryString = request.getQueryString(); if (queryString != null) { requestUrl += "?" + queryString; } // TODO(avaliani): consider stripping some of the non-essential parameters. return requestUrl; } }