340 |
340 |
long contentLength = -1L;
|
341 |
341 |
|
342 |
342 |
if (file != null) {
|
343 |
|
// Parse range specifier
|
|
343 |
// Parse range specifier.
|
344 |
344 |
ranges = parseRange(req, resp, file, oldBody);
|
345 |
345 |
// ETag header
|
346 |
346 |
resp.setHeader("ETag", getETag(file, oldBody));
|
347 |
|
// Last-Modified header
|
|
347 |
// Last-Modified header.
|
348 |
348 |
String lastModified = oldBody == null ?
|
349 |
349 |
getLastModifiedHttp(file.getAuditInfo()) :
|
350 |
350 |
getLastModifiedHttp(oldBody.getAuditInfo());
|
351 |
351 |
resp.setHeader("Last-Modified", lastModified);
|
352 |
|
// X-GSS-Metadata header
|
|
352 |
// X-GSS-Metadata header.
|
353 |
353 |
try {
|
354 |
354 |
resp.setHeader("X-GSS-Metadata", renderJson(user, file, oldBody));
|
355 |
355 |
} catch (InsufficientPermissionsException e) {
|
356 |
356 |
resp.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
|
357 |
357 |
return;
|
358 |
358 |
}
|
359 |
|
// Get content length
|
|
359 |
// Get content length.
|
360 |
360 |
contentLength = version>0 ? oldBody.getFileSize() : file.getFileSize();
|
361 |
361 |
// Special case for zero length files, which would cause a
|
362 |
|
// (silent) ISE when setting the output buffer size
|
|
362 |
// (silent) ISE when setting the output buffer size.
|
363 |
363 |
if (contentLength == 0L)
|
364 |
364 |
content = false;
|
365 |
|
}
|
|
365 |
} else
|
|
366 |
// Set the folder X-GSS-Metadata header.
|
|
367 |
try {
|
|
368 |
resp.setHeader("X-GSS-Metadata", renderJsonMetadata(user, folder));
|
|
369 |
} catch (InsufficientPermissionsException e) {
|
|
370 |
resp.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
|
|
371 |
return;
|
|
372 |
}
|
366 |
373 |
|
367 |
374 |
ServletOutputStream ostream = null;
|
368 |
375 |
PrintWriter writer = null;
|
... | ... | |
1604 |
1611 |
put("createdBy", folder.getAuditInfo().getCreatedBy().getUsername()).
|
1605 |
1612 |
put("creationDate", folder.getAuditInfo().getCreationDate().getTime()).
|
1606 |
1613 |
put("deleted", folder.isDeleted());
|
|
1614 |
if (folder.getAuditInfo().getModifiedBy() != null)
|
|
1615 |
json.put("modifiedBy", folder.getAuditInfo().getModifiedBy().getUsername()).
|
|
1616 |
put("modificationDate", folder.getAuditInfo().getModificationDate().getTime());
|
1607 |
1617 |
if (folder.getParent() != null) {
|
1608 |
1618 |
JSONObject j = new JSONObject();
|
1609 |
1619 |
j.put("uri", getApiRoot() + folder.getParent().getURI());
|
1610 |
1620 |
j.put("name", folder.getParent().getName());
|
1611 |
1621 |
json.put("parent", j);
|
1612 |
1622 |
}
|
1613 |
|
if (folder.getAuditInfo().getModifiedBy() != null)
|
1614 |
|
json.put("modifiedBy", folder.getAuditInfo().getModifiedBy().getUsername()).
|
1615 |
|
put("modificationDate", folder.getAuditInfo().getModificationDate().getTime());
|
1616 |
1623 |
List<JSONObject> subfolders = new ArrayList<JSONObject>();
|
1617 |
1624 |
for (FolderDTO f: folder.getSubfolders())
|
1618 |
1625 |
if (!f.isDeleted()) {
|
... | ... | |
1663 |
1670 |
|
1664 |
1671 |
/**
|
1665 |
1672 |
* Return a String with a JSON representation of the metadata
|
|
1673 |
* of the specified folder.
|
|
1674 |
* @throws RpcException
|
|
1675 |
* @throws InsufficientPermissionsException
|
|
1676 |
* @throws ObjectNotFoundException
|
|
1677 |
*/
|
|
1678 |
private String renderJsonMetadata(User user, FolderDTO folder)
|
|
1679 |
throws ServletException, InsufficientPermissionsException {
|
|
1680 |
// Check if the user has read permission.
|
|
1681 |
try {
|
|
1682 |
if (!getService().canReadFolder(user.getId(), folder.getId()))
|
|
1683 |
throw new InsufficientPermissionsException();
|
|
1684 |
} catch (ObjectNotFoundException e) {
|
|
1685 |
throw new ServletException(e);
|
|
1686 |
} catch (RpcException e) {
|
|
1687 |
throw new ServletException(e);
|
|
1688 |
}
|
|
1689 |
|
|
1690 |
JSONObject json = new JSONObject();
|
|
1691 |
try {
|
|
1692 |
json.put("name", folder.getName()).
|
|
1693 |
put("owner", folder.getOwner().getUsername()).
|
|
1694 |
put("createdBy", folder.getAuditInfo().getCreatedBy().getUsername()).
|
|
1695 |
put("creationDate", folder.getAuditInfo().getCreationDate().getTime()).
|
|
1696 |
put("deleted", folder.isDeleted());
|
|
1697 |
if (folder.getAuditInfo().getModifiedBy() != null)
|
|
1698 |
json.put("modifiedBy", folder.getAuditInfo().getModifiedBy().getUsername()).
|
|
1699 |
put("modificationDate", folder.getAuditInfo().getModificationDate().getTime());
|
|
1700 |
} catch (JSONException e) {
|
|
1701 |
throw new ServletException(e);
|
|
1702 |
}
|
|
1703 |
return json.toString();
|
|
1704 |
}
|
|
1705 |
|
|
1706 |
/**
|
|
1707 |
* Return a String with a JSON representation of the metadata
|
1666 |
1708 |
* of the specified file. If an old file body is provided, then
|
1667 |
1709 |
* the metadata of that particular version will be returned.
|
1668 |
1710 |
*
|