mirror of
https://github.com/sismics/docs.git
synced 2024-11-22 14:07:55 +01:00
#256: list versions of a file (API)
This commit is contained in:
parent
4469bb7bee
commit
8bdab73ae9
@ -190,4 +190,18 @@ public class FileDao {
|
|||||||
q.setParameter("documentId", documentId);
|
q.setParameter("documentId", documentId);
|
||||||
return q.getResultList();
|
return q.getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all files from a version.
|
||||||
|
*
|
||||||
|
* @param versionId Version ID
|
||||||
|
* @return List of files
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<File> getByVersionId(String versionId) {
|
||||||
|
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||||
|
Query q = em.createQuery("select f from File f where f.versionId = :versionId and f.deleteDate is null order by f.order asc");
|
||||||
|
q.setParameter("versionId", versionId);
|
||||||
|
return q.getResultList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,10 +160,13 @@ public class FileUtil {
|
|||||||
previousFile.setVersionId(UUID.randomUUID().toString());
|
previousFile.setVersionId(UUID.randomUUID().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
previousFile.setLatestVersion(false);
|
// Copy the previous file metadata
|
||||||
|
file.setOrder(previousFile.getOrder());
|
||||||
file.setVersionId(previousFile.getVersionId());
|
file.setVersionId(previousFile.getVersionId());
|
||||||
file.setVersion(previousFile.getVersion() + 1);
|
file.setVersion(previousFile.getVersion() + 1);
|
||||||
|
|
||||||
|
// Update the previous file
|
||||||
|
previousFile.setLatestVersion(false);
|
||||||
fileDao.update(previousFile);
|
fileDao.update(previousFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -392,10 +392,10 @@ public class FileResource extends BaseResource {
|
|||||||
* @apiParam {String} share Share ID
|
* @apiParam {String} share Share ID
|
||||||
* @apiSuccess {Object[]} files List of files
|
* @apiSuccess {Object[]} files List of files
|
||||||
* @apiSuccess {String} files.id ID
|
* @apiSuccess {String} files.id ID
|
||||||
* @apiSuccess {String} files.mimetype MIME type
|
* @apiSuccess {String} files.processing True if the file is currently processing
|
||||||
* @apiSuccess {String} files.name File name
|
* @apiSuccess {String} files.name File name
|
||||||
* @apiSuccess {String} files.version Zero-based version number
|
* @apiSuccess {String} files.version Zero-based version number
|
||||||
* @apiSuccess {String} files.processing True if the file is currently processing
|
* @apiSuccess {String} files.mimetype MIME type
|
||||||
* @apiSuccess {String} files.document_id Document ID
|
* @apiSuccess {String} files.document_id Document ID
|
||||||
* @apiSuccess {String} files.create_date Create date (timestamp)
|
* @apiSuccess {String} files.create_date Create date (timestamp)
|
||||||
* @apiSuccess {String} files.size File size (in bytes)
|
* @apiSuccess {String} files.size File size (in bytes)
|
||||||
@ -450,6 +450,57 @@ public class FileResource extends BaseResource {
|
|||||||
.add("files", files);
|
.add("files", files);
|
||||||
return Response.ok().entity(response.build()).build();
|
return Response.ok().entity(response.build()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List all versions of a file.
|
||||||
|
*
|
||||||
|
* @api {get} /file/id/versions Get versions of a file
|
||||||
|
* @apiName GetFileVersions
|
||||||
|
* @apiGroup File
|
||||||
|
* @apiParam {String} id File ID
|
||||||
|
* @apiSuccess {Object[]} files List of files
|
||||||
|
* @apiSuccess {String} files.id ID
|
||||||
|
* @apiSuccess {String} files.name File name
|
||||||
|
* @apiSuccess {String} files.version Zero-based version number
|
||||||
|
* @apiSuccess {String} files.mimetype MIME type
|
||||||
|
* @apiSuccess {String} files.create_date Create date (timestamp)
|
||||||
|
* @apiError (client) ForbiddenError Access denied
|
||||||
|
* @apiError (client) NotFound File not found
|
||||||
|
* @apiPermission user
|
||||||
|
* @apiVersion 1.5.0
|
||||||
|
*
|
||||||
|
* @param id File ID
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("{id: [a-z0-9\\-]+}/versions")
|
||||||
|
public Response versions(@PathParam("id") String id) {
|
||||||
|
if (!authenticate()) {
|
||||||
|
throw new ForbiddenClientException();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get versions
|
||||||
|
File file = findFile(id, null);
|
||||||
|
FileDao fileDao = new FileDao();
|
||||||
|
List<File> fileList = Lists.newArrayList(file);
|
||||||
|
if (file.getVersionId() != null) {
|
||||||
|
fileList = fileDao.getByVersionId(file.getVersionId());
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonArrayBuilder files = Json.createArrayBuilder();
|
||||||
|
for (File fileDb : fileList) {
|
||||||
|
files.add(Json.createObjectBuilder()
|
||||||
|
.add("id", fileDb.getId())
|
||||||
|
.add("name", JsonUtil.nullable(fileDb.getName()))
|
||||||
|
.add("version", fileDb.getVersion())
|
||||||
|
.add("mimetype", fileDb.getMimeType())
|
||||||
|
.add("create_date", fileDb.getCreateDate().getTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObjectBuilder response = Json.createObjectBuilder()
|
||||||
|
.add("files", files);
|
||||||
|
return Response.ok().entity(response.build()).build();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a file.
|
* Deletes a file.
|
||||||
|
@ -140,6 +140,7 @@ public class TestFileResource extends BaseJerseyTest {
|
|||||||
Assert.assertEquals(2, files.size());
|
Assert.assertEquals(2, files.size());
|
||||||
Assert.assertEquals(file1Id, files.getJsonObject(0).getString("id"));
|
Assert.assertEquals(file1Id, files.getJsonObject(0).getString("id"));
|
||||||
Assert.assertEquals("PIA00452.jpg", files.getJsonObject(0).getString("name"));
|
Assert.assertEquals("PIA00452.jpg", files.getJsonObject(0).getString("name"));
|
||||||
|
Assert.assertEquals("image/jpeg", files.getJsonObject(0).getString("mimetype"));
|
||||||
Assert.assertEquals(0, files.getJsonObject(0).getInt("version"));
|
Assert.assertEquals(0, files.getJsonObject(0).getInt("version"));
|
||||||
Assert.assertEquals(163510L, files.getJsonObject(0).getJsonNumber("size").longValue());
|
Assert.assertEquals(163510L, files.getJsonObject(0).getJsonNumber("size").longValue());
|
||||||
Assert.assertEquals(file2Id, files.getJsonObject(1).getString("id"));
|
Assert.assertEquals(file2Id, files.getJsonObject(1).getString("id"));
|
||||||
@ -228,6 +229,19 @@ public class TestFileResource extends BaseJerseyTest {
|
|||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, file1Token)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, file1Token)
|
||||||
.post(Entity.form(new Form()), JsonObject.class);
|
.post(Entity.form(new Form()), JsonObject.class);
|
||||||
|
|
||||||
|
// Get all versions from a file
|
||||||
|
json = target().path("/file/" + file2Id + "/versions")
|
||||||
|
.request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, file1Token)
|
||||||
|
.get(JsonObject.class);
|
||||||
|
files = json.getJsonArray("files");
|
||||||
|
Assert.assertEquals(1, files.size());
|
||||||
|
JsonObject file = files.getJsonObject(0);
|
||||||
|
Assert.assertEquals(file2Id, file.getString("id"));
|
||||||
|
Assert.assertEquals("PIA00452.jpg", file.getString("name"));
|
||||||
|
Assert.assertEquals("image/jpeg", file.getString("mimetype"));
|
||||||
|
Assert.assertEquals(0, file.getInt("version"));
|
||||||
|
|
||||||
// Add a new version to a file
|
// Add a new version to a file
|
||||||
String file3Id;
|
String file3Id;
|
||||||
try (InputStream is0 = Resources.getResource("file/document.txt").openStream()) {
|
try (InputStream is0 = Resources.getResource("file/document.txt").openStream()) {
|
||||||
@ -248,6 +262,25 @@ public class TestFileResource extends BaseJerseyTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get all versions from a file
|
||||||
|
json = target().path("/file/" + file2Id + "/versions")
|
||||||
|
.request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, file1Token)
|
||||||
|
.get(JsonObject.class);
|
||||||
|
files = json.getJsonArray("files");
|
||||||
|
Assert.assertEquals(2, files.size());
|
||||||
|
file = files.getJsonObject(1);
|
||||||
|
Assert.assertEquals(file3Id, file.getString("id"));
|
||||||
|
Assert.assertEquals("document.txt", file.getString("name"));
|
||||||
|
Assert.assertEquals("text/plain", file.getString("mimetype"));
|
||||||
|
Assert.assertEquals(1, file.getInt("version"));
|
||||||
|
|
||||||
|
// Delete the previous version
|
||||||
|
json = target().path("/file/" + file2Id).request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, file1Token)
|
||||||
|
.delete(JsonObject.class);
|
||||||
|
Assert.assertEquals("ok", json.getString("status"));
|
||||||
|
|
||||||
// Check the newly created version
|
// Check the newly created version
|
||||||
json = target().path("/file/list")
|
json = target().path("/file/list")
|
||||||
.queryParam("id", document1Id)
|
.queryParam("id", document1Id)
|
||||||
|
Loading…
Reference in New Issue
Block a user