package com.mossle.core.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RestUtils {
private static Logger logger = LoggerFactory.getLogger(RestUtils.class);
public static final int ONE_SECOND = 1000;
protected RestUtils() {
}
public static Response returnFile(File file, String ifModifiedSince) {
if (!file.exists()) {
return Response.status(Status.NOT_FOUND).build();
}
if (ifModifiedSince != null) {
Date modifiedDate = null;
Locale old = Locale.getDefault();
Locale.setDefault(Locale.ENGLISH);
try {
modifiedDate = new SimpleDateFormat(
"EEE, dd MMM yyyy HH:mm:ss zzz").parse(ifModifiedSince);
} catch (ParseException e) {
logger.error(e.getMessage(), e);
}
Locale.setDefault(old);
if ((modifiedDate != null)
&& ((file.lastModified() - modifiedDate.getTime()) < ONE_SECOND)) {
return Response.status(Status.NOT_MODIFIED).build();
}
}
try {
Date fileDate = new Date(file.lastModified());
return Response.ok(new FileInputStream(file))
.lastModified(fileDate).build();
} catch (FileNotFoundException ex) {
logger.warn(ex.getMessage(), ex);
return Response.status(Status.NOT_FOUND).build();
}
}
}