1
0
mirror of https://github.com/sismics/docs.git synced 2025-12-13 17:56:20 +00:00

#65: Publisher, format, source metadata

This commit is contained in:
jendib
2016-02-14 22:47:49 +01:00
parent ed51b77b0e
commit 359f5b5f49
11 changed files with 394 additions and 62 deletions

View File

@@ -130,6 +130,12 @@ public class DocumentResource extends BaseResource {
// Below is specific to GET /document/id
document.add("subject", JsonUtil.nullable(documentDto.getSubject()));
document.add("identifier", JsonUtil.nullable(documentDto.getIdentifier()));
document.add("publisher", JsonUtil.nullable(documentDto.getPublisher()));
document.add("format", JsonUtil.nullable(documentDto.getFormat()));
document.add("source", JsonUtil.nullable(documentDto.getSource()));
document.add("type", JsonUtil.nullable(documentDto.getType()));
document.add("coverage", JsonUtil.nullable(documentDto.getCoverage()));
document.add("rights", JsonUtil.nullable(documentDto.getRights()));
document.add("creator", documentDto.getCreator());
// Add ACL
@@ -393,6 +399,12 @@ public class DocumentResource extends BaseResource {
@FormParam("description") String description,
@FormParam("subject") String subject,
@FormParam("identifier") String identifier,
@FormParam("publisher") String publisher,
@FormParam("format") String format,
@FormParam("source") String source,
@FormParam("type") String type,
@FormParam("coverage") String coverage,
@FormParam("rights") String rights,
@FormParam("tags") List<String> tagList,
@FormParam("language") String language,
@FormParam("create_date") String createDateStr) {
@@ -405,7 +417,13 @@ public class DocumentResource extends BaseResource {
language = ValidationUtil.validateLength(language, "language", 3, 3, false);
description = ValidationUtil.validateLength(description, "description", 0, 4000, true);
subject = ValidationUtil.validateLength(subject, "subject", 0, 500, true);
identifier = ValidationUtil.validateLength(identifier, "description", 0, 500, true);
identifier = ValidationUtil.validateLength(identifier, "identifier", 0, 500, true);
publisher = ValidationUtil.validateLength(publisher, "publisher", 0, 500, true);
format = ValidationUtil.validateLength(format, "format", 0, 500, true);
source = ValidationUtil.validateLength(source, "source", 0, 500, true);
type = ValidationUtil.validateLength(type, "type", 0, 100, true);
coverage = ValidationUtil.validateLength(coverage, "coverage", 0, 100, true);
rights = ValidationUtil.validateLength(rights, "rights", 0, 100, true);
Date createDate = ValidationUtil.validateDate(createDateStr, "create_date", true);
if (!Constants.SUPPORTED_LANGUAGES.contains(language)) {
throw new ClientException("ValidationError", MessageFormat.format("{0} is not a supported language", language));
@@ -419,6 +437,12 @@ public class DocumentResource extends BaseResource {
document.setDescription(description);
document.setSubject(subject);
document.setIdentifier(identifier);
document.setPublisher(publisher);
document.setFormat(format);
document.setSource(source);
document.setType(type);
document.setCoverage(coverage);
document.setRights(rights);
document.setLanguage(language);
if (createDate == null) {
document.setCreateDate(new Date());
@@ -470,6 +494,12 @@ public class DocumentResource extends BaseResource {
@FormParam("description") String description,
@FormParam("subject") String subject,
@FormParam("identifier") String identifier,
@FormParam("publisher") String publisher,
@FormParam("format") String format,
@FormParam("source") String source,
@FormParam("type") String type,
@FormParam("coverage") String coverage,
@FormParam("rights") String rights,
@FormParam("tags") List<String> tagList,
@FormParam("language") String language,
@FormParam("create_date") String createDateStr) {
@@ -483,6 +513,12 @@ public class DocumentResource extends BaseResource {
description = ValidationUtil.validateLength(description, "description", 0, 4000, true);
subject = ValidationUtil.validateLength(subject, "subject", 0, 500, true);
identifier = ValidationUtil.validateLength(identifier, "identifier", 0, 500, true);
publisher = ValidationUtil.validateLength(publisher, "publisher", 0, 500, true);
format = ValidationUtil.validateLength(format, "format", 0, 500, true);
source = ValidationUtil.validateLength(source, "source", 0, 500, true);
type = ValidationUtil.validateLength(type, "type", 0, 100, true);
coverage = ValidationUtil.validateLength(coverage, "coverage", 0, 100, true);
rights = ValidationUtil.validateLength(rights, "rights", 0, 100, true);
Date createDate = ValidationUtil.validateDate(createDateStr, "create_date", true);
if (language != null && !Constants.SUPPORTED_LANGUAGES.contains(language)) {
throw new ClientException("ValidationError", MessageFormat.format("{0} is not a supported language", language));
@@ -509,6 +545,24 @@ public class DocumentResource extends BaseResource {
if (!StringUtils.isEmpty(identifier)) {
document.setIdentifier(identifier);
}
if (!StringUtils.isEmpty(publisher)) {
document.setPublisher(publisher);
}
if (!StringUtils.isEmpty(format)) {
document.setFormat(format);
}
if (!StringUtils.isEmpty(source)) {
document.setSource(source);
}
if (!StringUtils.isEmpty(type)) {
document.setType(type);
}
if (!StringUtils.isEmpty(coverage)) {
document.setCoverage(coverage);
}
if (!StringUtils.isEmpty(rights)) {
document.setRights(rights);
}
if (createDate != null) {
document.setCreateDate(createDate);
}

View File

@@ -42,6 +42,7 @@ public class VocabularyResource extends BaseResource {
for (Vocabulary vocabulary : vocabularyList) {
entries.add(Json.createObjectBuilder()
.add("id", vocabulary.getId())
.add("name", vocabulary.getName())
.add("value", vocabulary.getValue())
.add("order", vocabulary.getOrder()));
}
@@ -113,7 +114,9 @@ public class VocabularyResource extends BaseResource {
// Validate input data
name = ValidationUtil.validateLength(name, "name", 1, 50, true);
ValidationUtil.validateRegex(name, "name", "[a-z0-9\\-]+");
if (name != null) {
ValidationUtil.validateRegex(name, "name", "[a-z0-9\\-]+");
}
value = ValidationUtil.validateLength(value, "value", 1, 100, true);
Integer order = null;
if (orderStr != null) {

View File

@@ -2,70 +2,99 @@
<div ng-show="document || !isEdit()">
<form name="documentForm" class="form-horizontal">
<div class="form-group" ng-class="{ 'has-error': !documentForm.title.$valid }">
<label class="col-sm-2 control-label" for="inputTitle">Title</label>
<div class="col-sm-10">
<input required ng-maxlength="100" class="form-control" type="text" id="inputTitle"
placeholder="Title" name="title" ng-model="document.title" autocomplete="off"
typeahead="document for document in getTitleTypeahead($viewValue) | filter: $viewValue"
typeahead-wait-ms="200" ng-disabled="fileIsUploading" />
<fieldset>
<legend>Primary metadata</legend>
<div class="form-group" ng-class="{ 'has-error': !documentForm.title.$valid }">
<label class="col-sm-2 control-label" for="inputTitle">Title</label>
<div class="col-sm-10">
<input required ng-maxlength="100" class="form-control" type="text" id="inputTitle"
placeholder="The nature or genre of the resource" name="title" ng-model="document.title" autocomplete="off"
typeahead="document for document in getTitleTypeahead($viewValue) | filter: $viewValue"
typeahead-wait-ms="200" ng-disabled="fileIsUploading" />
</div>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': !documentForm.description.$valid }">
<label class="col-sm-2 control-label" for="inputDescription">Description</label>
<div class="col-sm-10">
<textarea ng-maxlength="4000" class="form-control" rows="5" id="inputDescription"
name="description" ng-model="document.description" ng-disabled="fileIsUploading"></textarea>
<div class="form-group" ng-class="{ 'has-error': !documentForm.description.$valid }">
<label class="col-sm-2 control-label" for="inputDescription">Description</label>
<div class="col-sm-10">
<textarea ng-maxlength="4000" class="form-control" rows="5" id="inputDescription" placeholder="An account of the resource"
name="description" ng-model="document.description" ng-disabled="fileIsUploading"></textarea>
</div>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': !documentForm.subject.$valid }">
<label class="col-sm-2 control-label" for="inputSubject">Subject</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputSubject"
placeholder="Subject" name="subject" ng-model="document.subject" ng-disabled="fileIsUploading" />
<div class="form-group">
<label class="col-sm-2 control-label" for="inputCreateDate">Creation date</label>
<div class="col-sm-10">
<input type="text" id="inputCreateDate" ng-readonly="true" datepicker-popup="yyyy-MM-dd" class="form-control"
ng-model="document.create_date" starting-day="1" show-weeks="false" ng-disabled="fileIsUploading" />
</div>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': !documentForm.identifier.$valid }">
<label class="col-sm-2 control-label" for="inputIdentifier">Identifier</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputIdentifier"
placeholder="Identifier" name="identifier" ng-model="document.identifier" ng-disabled="fileIsUploading" />
<div class="form-group">
<label class="col-sm-2 control-label" for="inputLanguage">Language</label>
<div class="col-sm-10">
<select class="form-control" id="inputLanguage" ng-model="document.language" ng-disabled="fileIsUploading">
<option value="fra">French</option>
<option value="eng">English</option>
<option value="jpn">Japanese</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputCreateDate">Creation date</label>
<div class="col-sm-10">
<input type="text" id="inputCreateDate" ng-readonly="true" datepicker-popup="yyyy-MM-dd" class="form-control"
ng-model="document.create_date" starting-day="1" show-weeks="false" ng-disabled="fileIsUploading" />
<div class="form-group">
<label class="col-sm-2 control-label" for="inputFiles">New files</label>
<div class="col-sm-6">
<file class="form-control" id="inputFiles" multiple="multiple" ng-model="newFiles"
accept="image/png,image/jpg,image/jpeg,image/gif,application/pdf,application/vnd.oasis.opendocument.text,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
ng-disabled="fileIsUploading"></file>
</div>
<div class="col-sm-4" ng-if="orphanFiles.length > 0">
+ {{ orphanFiles.length }} file{{ orphanFiles.length > 1 ? 's' : '' }}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputLanguage">Language</label>
<div class="col-sm-10">
<select class="form-control" id="inputLanguage" ng-model="document.language" ng-disabled="fileIsUploading">
<option value="fra">French</option>
<option value="eng">English</option>
<option value="jpn">Japanese</option>
</select>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputTags">Tags</label>
<div class="col-sm-10">
<select-tag tags="document.tags" ref="inputTags" ng-disabled="fileIsUploading"></select-tag>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputFiles">New files</label>
<div class="col-sm-6">
<file class="form-control" id="inputFiles" multiple="multiple" ng-model="newFiles"
accept="image/png,image/jpg,image/jpeg,image/gif,application/pdf,application/vnd.oasis.opendocument.text,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
ng-disabled="fileIsUploading"></file>
</fieldset>
<fieldset>
<legend>Additional metadata</legend>
<div class="form-group" ng-class="{ 'has-error': !documentForm.subject.$valid }">
<label class="col-sm-2 control-label" for="inputSubject">Subject</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputSubject"
placeholder="The topic of the resource" name="subject" ng-model="document.subject" ng-disabled="fileIsUploading" />
</div>
</div>
<div class="col-sm-4" ng-if="orphanFiles.length > 0">
+ {{ orphanFiles.length }} file{{ orphanFiles.length > 1 ? 's' : '' }}
<div class="form-group" ng-class="{ 'has-error': !documentForm.identifier.$valid }">
<label class="col-sm-2 control-label" for="inputIdentifier">Identifier</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputIdentifier"
placeholder="An unambiguous reference to the resource within a given context" name="identifier" ng-model="document.identifier" ng-disabled="fileIsUploading" />
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputTags">Tags</label>
<div class="col-sm-10">
<select-tag tags="document.tags" ref="inputTags" ng-disabled="fileIsUploading"></select-tag>
<div class="form-group" ng-class="{ 'has-error': !documentForm.publisher.$valid }">
<label class="col-sm-2 control-label" for="inputPublisher">Publisher</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputPublisher"
placeholder="An entity responsible for making the resource available" name="publisher" ng-model="document.publisher" ng-disabled="fileIsUploading" />
</div>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': !documentForm.format.$valid }">
<label class="col-sm-2 control-label" for="inputFormat">Format</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputFormat"
placeholder="The file format, physical medium, or dimensions of the resource" name="format" ng-model="document.format" ng-disabled="fileIsUploading" />
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': !documentForm.source.$valid }">
<label class="col-sm-2 control-label" for="inputSource">Source</label>
<div class="col-sm-10">
<input ng-maxlength="500" class="form-control" type="text" id="inputSource"
placeholder="A related resource from which the described resource is derived" name="source" ng-model="document.source" ng-disabled="fileIsUploading" />
</div>
</div>
</fieldset>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary" ng-disabled="!documentForm.$valid || fileIsUploading" ng-click="edit()">{{ isEdit() ? 'Edit' : 'Add' }}</button>

View File

@@ -4,6 +4,12 @@
<dd ng-if="document.subject">{{ document.subject }}</dd>
<dt ng-if="document.identifier">Identifier</dt>
<dd ng-if="document.identifier">{{ document.identifier }}</dd>
<dt ng-if="document.publisher">Publisher</dt>
<dd ng-if="document.publisher">{{ document.publisher }}</dd>
<dt ng-if="document.format">Format</dt>
<dd ng-if="document.format">{{ document.format }}</dd>
<dt ng-if="document.source">Source</dt>
<dd ng-if="document.source">{{ document.source }}</dd>
</dl>
<div ng-file-drop drag-over-class="bg-success" ng-multiple="true" allow-dir="false" ng-model="dropFiles"

View File

@@ -64,6 +64,12 @@ public class TestDocumentResource extends BaseJerseyTest {
.param("description", "My super description for document 1")
.param("subject", "Subject document 1")
.param("identifier", "Identifier document 1")
.param("publisher", "Publisher document 1")
.param("format", "Format document 1")
.param("source", "Source document 1")
.param("type", "Software")
.param("coverage", "Greenland")
.param("rights", "Public Domain")
.param("tags", tag1Id)
.param("language", "eng")
.param("create_date", Long.toString(create1Date))), JsonObject.class);
@@ -164,6 +170,12 @@ public class TestDocumentResource extends BaseJerseyTest {
Assert.assertEquals(1, searchDocuments("super description", document1Token));
Assert.assertEquals(1, searchDocuments("subject", document1Token));
Assert.assertEquals(1, searchDocuments("identifier", document1Token));
Assert.assertEquals(1, searchDocuments("publisher", document1Token));
Assert.assertEquals(1, searchDocuments("format", document1Token));
Assert.assertEquals(1, searchDocuments("source", document1Token));
Assert.assertEquals(1, searchDocuments("software", document1Token));
Assert.assertEquals(1, searchDocuments("greenland", document1Token));
Assert.assertEquals(1, searchDocuments("public domain", document1Token));
Assert.assertEquals(1, searchDocuments("at:" + DateTimeFormat.forPattern("yyyy").print(new Date().getTime()), document1Token));
Assert.assertEquals(1, searchDocuments("at:" + DateTimeFormat.forPattern("yyyy-MM").print(new Date().getTime()), document1Token));
Assert.assertEquals(1, searchDocuments("at:" + DateTimeFormat.forPattern("yyyy-MM-dd").print(new Date().getTime()), document1Token));
@@ -196,6 +208,12 @@ public class TestDocumentResource extends BaseJerseyTest {
Assert.assertEquals("My super description for document 1", json.getString("description"));
Assert.assertEquals("Subject document 1", json.getString("subject"));
Assert.assertEquals("Identifier document 1", json.getString("identifier"));
Assert.assertEquals("Publisher document 1", json.getString("publisher"));
Assert.assertEquals("Format document 1", json.getString("format"));
Assert.assertEquals("Source document 1", json.getString("source"));
Assert.assertEquals("Software", json.getString("type"));
Assert.assertEquals("Greenland", json.getString("coverage"));
Assert.assertEquals("Public Domain", json.getString("rights"));
Assert.assertEquals("eng", json.getString("language"));
Assert.assertEquals(create1Date, json.getJsonNumber("create_date").longValue());
tags = json.getJsonArray("tags");
@@ -223,6 +241,14 @@ public class TestDocumentResource extends BaseJerseyTest {
.post(Entity.form(new Form()
.param("title", "My new super document 1")
.param("description", "My new super description for document 1")
.param("subject", "My new subject for document 1")
.param("identifier", "My new identifier for document 1")
.param("publisher", "My new publisher for document 1")
.param("format", "My new format for document 1")
.param("source", "My new source for document 1")
.param("type", "Image")
.param("coverage", "France")
.param("rights", "All Rights Reserved")
.param("tags", tag2Id)), JsonObject.class);
Assert.assertEquals(document1Id, json.getString("id"));
@@ -239,6 +265,14 @@ public class TestDocumentResource extends BaseJerseyTest {
.get(JsonObject.class);
Assert.assertTrue(json.getString("title").contains("new"));
Assert.assertTrue(json.getString("description").contains("new"));
Assert.assertTrue(json.getString("subject").contains("new"));
Assert.assertTrue(json.getString("identifier").contains("new"));
Assert.assertTrue(json.getString("publisher").contains("new"));
Assert.assertTrue(json.getString("format").contains("new"));
Assert.assertTrue(json.getString("source").contains("new"));
Assert.assertEquals("Image", json.getString("type"));
Assert.assertEquals("France", json.getString("coverage"));
Assert.assertEquals("All Rights Reserved", json.getString("rights"));
tags = json.getJsonArray("tags");
Assert.assertEquals(1, tags.size());
Assert.assertEquals(tag2Id, tags.getJsonObject(0).getString("id"));

View File

@@ -38,10 +38,12 @@ public class TestVocabularyResource extends BaseJerseyTest {
Assert.assertEquals(249, json.getJsonArray("entries").size());
JsonObject entry = json.getJsonArray("entries").getJsonObject(0);
Assert.assertEquals("coverage-afg", entry.getString("id"));
Assert.assertEquals("coverage", entry.getString("name"));
Assert.assertEquals("Afghanistan", entry.getString("value"));
Assert.assertEquals(0, entry.getJsonNumber("order").intValue());
entry = json.getJsonArray("entries").getJsonObject(248);
Assert.assertEquals("coverage-zwe", entry.getString("id"));
Assert.assertEquals("coverage", entry.getString("name"));
Assert.assertEquals("Zimbabwe", entry.getString("value"));
Assert.assertEquals(248, entry.getJsonNumber("order").intValue());