FileArchivTracker.java
package sk.iway.iwcm.components.file_archiv;
import org.apache.http.client.utils.URIBuilder;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.analytics.Tracker;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Trackovanie stahovania subrov do GA z file archivu
*/
public class FileArchivTracker implements Tracker {
/**
* Implemetacia triedy tack - Vyplni potrebne parametre a vykona request na GA
* @param path cesta k suboru
* @param request HttpServletRequest
*/
public void track(String path, HttpServletRequest request) throws Exception {
// Load configuration
String trackingId = Constants.getString("analyticsTrackingId");
String trackingVersion = Constants.getString("analyticsTrackingVersion");
// Tracking id validation
if(Tools.isEmpty(trackingId)) {
throw new Exception("FileArchivTracker analyticsTrackingId is empty");
}
// Cookies to identify user
String cid = Tools.getCookieValue(request.getCookies(), "_ga", "").replace(trackingVersion + ".", "");
String gid = Tools.getCookieValue(request.getCookies(), "_gid", "").replace(trackingVersion + ".", "");
// requested file
FileArchivatorBean file = FileArchivatorDB.getByUrl(path);
if(Tools.isEmpty(cid)) {
cid = "unknownClient";
}
if(Tools.isEmpty(gid)) {
gid = "unknownGroup";
}
// assemble url
if(file != null) {
URIBuilder builder = new URIBuilder();
builder
.setScheme("http")
.setHost("www.google-analytics.com")
.setPath("/collect")
.addParameter("v", "1") // API Version.
.addParameter("tid", trackingId) // Tracking ID / Property ID.
.addParameter("cid", cid) // Anonymous Client Identifier. Ideally, this should be a UUID that is associated with particular user, device, or browser instance.
.addParameter("_gid", gid) // Anonymous Client Identifier. Ideally, this should be a UUID that is associated with particular user, device, or browser instance.
.addParameter("t", "event") // Event hit type.
.addParameter("ec", "Stiahnuté dokumenty") // Event category.
.addParameter("ea", file.getVirtualFileName()) // Event action.
.addParameter("el", path) // Event url.
.addParameter("dl", request.getHeader("referer")) // referer url.
.addParameter("dt", request.getHeader("referer")); // referer title.
URI uri;
// build url
try {
uri = builder.build();
} catch (URISyntaxException e) {
throw new ServletException("FileArchivTracker Problem building URI", e);
}
// track event
Tools.downloadUrl(uri.toURL().toString());
}
}
}