mirror of
https://github.com/sismics/docs.git
synced 2024-11-22 05:57:57 +01:00
#300: custom metadata fields: API write
This commit is contained in:
parent
9b1dbf351a
commit
5fd4d37972
@ -27,7 +27,6 @@ public class CommentDao {
|
|||||||
* @param comment Comment
|
* @param comment Comment
|
||||||
* @param userId User ID
|
* @param userId User ID
|
||||||
* @return New ID
|
* @return New ID
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public String create(Comment comment, String userId) {
|
public String create(Comment comment, String userId) {
|
||||||
// Create the UUID
|
// Create the UUID
|
||||||
@ -99,7 +98,7 @@ public class CommentDao {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
List<Object[]> l = q.getResultList();
|
List<Object[]> l = q.getResultList();
|
||||||
|
|
||||||
List<CommentDto> commentDtoList = new ArrayList<CommentDto>();
|
List<CommentDto> commentDtoList = new ArrayList<>();
|
||||||
for (Object[] o : l) {
|
for (Object[] o : l) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
CommentDto commentDto = new CommentDto();
|
CommentDto commentDto = new CommentDto();
|
||||||
@ -107,7 +106,7 @@ public class CommentDao {
|
|||||||
commentDto.setContent((String) o[i++]);
|
commentDto.setContent((String) o[i++]);
|
||||||
commentDto.setCreateTimestamp(((Timestamp) o[i++]).getTime());
|
commentDto.setCreateTimestamp(((Timestamp) o[i++]).getTime());
|
||||||
commentDto.setCreatorName((String) o[i++]);
|
commentDto.setCreatorName((String) o[i++]);
|
||||||
commentDto.setCreatorEmail((String) o[i++]);
|
commentDto.setCreatorEmail((String) o[i]);
|
||||||
commentDtoList.add(commentDto);
|
commentDtoList.add(commentDto);
|
||||||
}
|
}
|
||||||
return commentDtoList;
|
return commentDtoList;
|
||||||
|
@ -0,0 +1,89 @@
|
|||||||
|
package com.sismics.docs.core.dao;
|
||||||
|
|
||||||
|
import com.sismics.docs.core.constant.MetadataType;
|
||||||
|
import com.sismics.docs.core.dao.dto.DocumentMetadataDto;
|
||||||
|
import com.sismics.docs.core.model.jpa.DocumentMetadata;
|
||||||
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.Query;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document metadata DAO.
|
||||||
|
*
|
||||||
|
* @author bgamard
|
||||||
|
*/
|
||||||
|
public class DocumentMetadataDao {
|
||||||
|
/**
|
||||||
|
* Creates a new document metadata.
|
||||||
|
*
|
||||||
|
* @param documentMetadata Document metadata
|
||||||
|
* @return New ID
|
||||||
|
*/
|
||||||
|
public String create(DocumentMetadata documentMetadata) {
|
||||||
|
// Create the UUID
|
||||||
|
documentMetadata.setId(UUID.randomUUID().toString());
|
||||||
|
|
||||||
|
// Create the document metadata
|
||||||
|
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||||
|
em.persist(documentMetadata);
|
||||||
|
|
||||||
|
return documentMetadata.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a document metadata.
|
||||||
|
*
|
||||||
|
* @param documentMetadata Document metadata
|
||||||
|
* @return Updated document metadata
|
||||||
|
*/
|
||||||
|
public DocumentMetadata update(DocumentMetadata documentMetadata) {
|
||||||
|
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||||
|
|
||||||
|
// Get the document metadata
|
||||||
|
Query q = em.createQuery("select u from DocumentMetadata u where u.id = :id");
|
||||||
|
q.setParameter("id", documentMetadata.getId());
|
||||||
|
DocumentMetadata documentMetadataDb = (DocumentMetadata) q.getSingleResult();
|
||||||
|
|
||||||
|
// Update the document metadata
|
||||||
|
documentMetadataDb.setValue(documentMetadata.getValue());
|
||||||
|
|
||||||
|
return documentMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of all metadata values on a document.
|
||||||
|
*
|
||||||
|
* @param documentId Document ID
|
||||||
|
* @return List of metadata
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<DocumentMetadataDto> getByDocumentId(String documentId) {
|
||||||
|
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||||
|
StringBuilder sb = new StringBuilder("select dm.DME_ID_C, dm.DME_IDDOCUMENT_C, dm.DME_IDMETADATA_C, dm.DME_VALUE_C, m.MET_TYPE_C");
|
||||||
|
sb.append(" from T_DOCUMENT_METADATA dm, T_METADATA m ");
|
||||||
|
sb.append(" where dm.DME_IDMETADATA_C = m.MET_ID_C and dm.DME_IDDOCUMENT_C = :documentId and m.MET_DELETEDATE_D is null");
|
||||||
|
|
||||||
|
// Perform the search
|
||||||
|
Query q = em.createNativeQuery(sb.toString());
|
||||||
|
q.setParameter("documentId", documentId);
|
||||||
|
List<Object[]> l = q.getResultList();
|
||||||
|
|
||||||
|
// Assemble results
|
||||||
|
List<DocumentMetadataDto> dtoList = new ArrayList<>();
|
||||||
|
for (Object[] o : l) {
|
||||||
|
int i = 0;
|
||||||
|
DocumentMetadataDto dto = new DocumentMetadataDto();
|
||||||
|
dto.setId((String) o[i++]);
|
||||||
|
dto.setDocumentId((String) o[i++]);
|
||||||
|
dto.setMetadataId((String) o[i++]);
|
||||||
|
dto.setValue((String) o[i++]);
|
||||||
|
dto.setType(MetadataType.valueOf((String) o[i]));
|
||||||
|
dtoList.add(dto);
|
||||||
|
}
|
||||||
|
return dtoList;
|
||||||
|
}
|
||||||
|
}
|
@ -36,13 +36,13 @@ public class RelationDao {
|
|||||||
List<Object[]> l = q.getResultList();
|
List<Object[]> l = q.getResultList();
|
||||||
|
|
||||||
// Assemble results
|
// Assemble results
|
||||||
List<RelationDto> relationDtoList = new ArrayList<RelationDto>();
|
List<RelationDto> relationDtoList = new ArrayList<>();
|
||||||
for (Object[] o : l) {
|
for (Object[] o : l) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
RelationDto relationDto = new RelationDto();
|
RelationDto relationDto = new RelationDto();
|
||||||
relationDto.setId((String) o[i++]);
|
relationDto.setId((String) o[i++]);
|
||||||
relationDto.setTitle((String) o[i++]);
|
relationDto.setTitle((String) o[i++]);
|
||||||
String fromDocId = (String) o[i++];
|
String fromDocId = (String) o[i];
|
||||||
relationDto.setSource(documentId.equals(fromDocId));
|
relationDto.setSource(documentId.equals(fromDocId));
|
||||||
relationDtoList.add(relationDto);
|
relationDtoList.add(relationDto);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
package com.sismics.docs.core.dao.dto;
|
||||||
|
|
||||||
|
import com.sismics.docs.core.constant.MetadataType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document metadata DTO.
|
||||||
|
*
|
||||||
|
* @author bgamard
|
||||||
|
*/
|
||||||
|
public class DocumentMetadataDto {
|
||||||
|
/**
|
||||||
|
* Document metadata ID.
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document ID.
|
||||||
|
*/
|
||||||
|
private String documentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metadata ID.
|
||||||
|
*/
|
||||||
|
private String metadataId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Name.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value.
|
||||||
|
*/
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type.
|
||||||
|
*/
|
||||||
|
private MetadataType type;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadataDto setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadataDto setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MetadataType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadataDto setType(MetadataType type) {
|
||||||
|
this.type = type;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDocumentId() {
|
||||||
|
return documentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadataDto setDocumentId(String documentId) {
|
||||||
|
this.documentId = documentId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMetadataId() {
|
||||||
|
return metadataId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadataDto setMetadataId(String metadataId) {
|
||||||
|
this.metadataId = metadataId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadataDto setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,91 @@
|
|||||||
|
package com.sismics.docs.core.model.jpa;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Link between a document and a metadata, holding the value.
|
||||||
|
*
|
||||||
|
* @author bgamard
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "T_DOCUMENT_METADATA")
|
||||||
|
public class DocumentMetadata implements Serializable {
|
||||||
|
/**
|
||||||
|
* Serial version UID.
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document metadata ID.
|
||||||
|
*/
|
||||||
|
@Id
|
||||||
|
@Column(name = "DME_ID_C", length = 36)
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document ID.
|
||||||
|
*/
|
||||||
|
@Column(name = "DME_IDDOCUMENT_C", nullable = false, length = 36)
|
||||||
|
private String documentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metadata ID.
|
||||||
|
*/
|
||||||
|
@Column(name = "DME_IDMETADATA_C", nullable = false, length = 36)
|
||||||
|
private String metadataId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value.
|
||||||
|
*/
|
||||||
|
@Column(name = "DME_VALUE_C", nullable = false, length = 4000)
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDocumentId() {
|
||||||
|
return documentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDocumentId(String documentId) {
|
||||||
|
this.documentId = documentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMetadataId() {
|
||||||
|
return metadataId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadata setMetadataId(String metadataId) {
|
||||||
|
this.metadataId = metadataId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentMetadata setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("id", id)
|
||||||
|
.add("documentId", documentId)
|
||||||
|
.add("metadataId", metadataId)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,147 @@
|
|||||||
|
package com.sismics.docs.core.util;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.sismics.docs.core.constant.MetadataType;
|
||||||
|
import com.sismics.docs.core.dao.DocumentMetadataDao;
|
||||||
|
import com.sismics.docs.core.dao.MetadataDao;
|
||||||
|
import com.sismics.docs.core.dao.criteria.MetadataCriteria;
|
||||||
|
import com.sismics.docs.core.dao.dto.DocumentMetadataDto;
|
||||||
|
import com.sismics.docs.core.dao.dto.MetadataDto;
|
||||||
|
import com.sismics.docs.core.model.jpa.DocumentMetadata;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metadata utilities.
|
||||||
|
*
|
||||||
|
* @author bgamard
|
||||||
|
*/
|
||||||
|
public class MetadataUtil {
|
||||||
|
/**
|
||||||
|
* Update custom metadata on a document.
|
||||||
|
*
|
||||||
|
* @param documentId Document ID
|
||||||
|
* @param metadataIdList Metadata ID list
|
||||||
|
* @param metadataValueList Metadata value list
|
||||||
|
*/
|
||||||
|
public static void updateMetadata(String documentId, List<String> metadataIdList, List<String> metadataValueList) throws Exception {
|
||||||
|
if (metadataIdList == null || metadataValueList == null || metadataIdList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (metadataIdList.size() != metadataValueList.size()) {
|
||||||
|
throw new Exception("metadata_id and metadata_value must have the same length");
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, String> newValues = Maps.newHashMap();
|
||||||
|
for (int i = 0; i < metadataIdList.size(); i++) {
|
||||||
|
newValues.put(metadataIdList.get(i), metadataValueList.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
MetadataDao metadataDao = new MetadataDao();
|
||||||
|
DocumentMetadataDao documentMetadataDao = new DocumentMetadataDao();
|
||||||
|
List<MetadataDto> metadataDtoList = metadataDao.findByCriteria(new MetadataCriteria(), null);
|
||||||
|
List<DocumentMetadataDto> documentMetadataDtoList = documentMetadataDao.getByDocumentId(documentId);
|
||||||
|
|
||||||
|
// Update existing values
|
||||||
|
for (DocumentMetadataDto documentMetadataDto : documentMetadataDtoList) {
|
||||||
|
if (newValues.containsKey(documentMetadataDto.getMetadataId())) {
|
||||||
|
// Update the value
|
||||||
|
String value = newValues.get(documentMetadataDto.getMetadataId());
|
||||||
|
validateValue(documentMetadataDto.getType(), value);
|
||||||
|
updateValue(documentMetadataDto.getId(), value);
|
||||||
|
newValues.remove(documentMetadataDto.getMetadataId());
|
||||||
|
} else {
|
||||||
|
// Remove the value
|
||||||
|
updateValue(documentMetadataDto.getId(), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create new values
|
||||||
|
for (Map.Entry<String, String> entry : newValues.entrySet()) {
|
||||||
|
// Search the metadata definition
|
||||||
|
MetadataDto metadata = null;
|
||||||
|
for (MetadataDto metadataDto : metadataDtoList) {
|
||||||
|
if (metadataDto.getId().equals(entry.getKey())) {
|
||||||
|
metadata = metadataDto;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metadata == null) {
|
||||||
|
throw new Exception(MessageFormat.format("Metadata not found: {0}", entry.getKey()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the value
|
||||||
|
validateValue(metadata.getType(), entry.getValue());
|
||||||
|
createValue(documentId, entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate a custom metadata value.
|
||||||
|
*
|
||||||
|
* @param type Metadata type
|
||||||
|
* @param value Value
|
||||||
|
* @throws Exception In case of validation error
|
||||||
|
*/
|
||||||
|
private static void validateValue(MetadataType type, String value) throws Exception {
|
||||||
|
switch (type) {
|
||||||
|
case STRING:
|
||||||
|
case BOOLEAN:
|
||||||
|
return;
|
||||||
|
case DATE:
|
||||||
|
try {
|
||||||
|
Long.parseLong(value);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new Exception("Date value not parsable as timestamp");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FLOAT:
|
||||||
|
try {
|
||||||
|
Float.parseFloat(value);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new Exception("Float value not parsable");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case INTEGER:
|
||||||
|
try {
|
||||||
|
Integer.parseInt(value);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new Exception("Integer value not parsable");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a custom metadata value on a document.
|
||||||
|
*
|
||||||
|
* @param documentId Document ID
|
||||||
|
* @param metadataId Metadata ID
|
||||||
|
* @param value Value
|
||||||
|
*/
|
||||||
|
private static void createValue(String documentId, String metadataId, String value) {
|
||||||
|
DocumentMetadataDao documentMetadataDao = new DocumentMetadataDao();
|
||||||
|
DocumentMetadata documentMetadata = new DocumentMetadata();
|
||||||
|
documentMetadata.setDocumentId(documentId);
|
||||||
|
documentMetadata.setMetadataId(metadataId);
|
||||||
|
documentMetadata.setValue(value);
|
||||||
|
documentMetadataDao.create(documentMetadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a custom metadata value.
|
||||||
|
*
|
||||||
|
* @param documentMetadataId Document metadata ID
|
||||||
|
* @param value Value
|
||||||
|
*/
|
||||||
|
private static void updateValue(String documentMetadataId, String value) {
|
||||||
|
DocumentMetadataDao documentMetadataDao = new DocumentMetadataDao();
|
||||||
|
DocumentMetadata documentMetadata = new DocumentMetadata();
|
||||||
|
documentMetadata.setId(documentMetadataId);
|
||||||
|
documentMetadata.setValue(value);
|
||||||
|
documentMetadataDao.update(documentMetadata);
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
create cached table T_METADATA ( MET_ID_C varchar(36) not null, MET_NAME_C varchar(50) not null, MET_TYPE_C varchar(20) not null, MET_DELETEDATE_D datetime, primary key (MET_ID_C) );
|
create cached table T_METADATA ( MET_ID_C varchar(36) not null, MET_NAME_C varchar(50) not null, MET_TYPE_C varchar(20) not null, MET_DELETEDATE_D datetime, primary key (MET_ID_C) );
|
||||||
create cached table T_DOCUMENT_METADATA ( DME_ID_C varchar(36) not null, DME_IDDOCUMENT_C varchar(36) not null, DME_IDMETADATA_C varchar(36) not null, DME_VALUE_C varchar(4000) not null, DME_DELETEDATE_D datetime, primary key (DME_ID_C) );
|
create cached table T_DOCUMENT_METADATA ( DME_ID_C varchar(36) not null, DME_IDDOCUMENT_C varchar(36) not null, DME_IDMETADATA_C varchar(36) not null, DME_VALUE_C varchar(4000) not null, primary key (DME_ID_C) );
|
||||||
alter table T_DOCUMENT_METADATA add constraint FK_DME_IDDOCUMENT_C foreign key (DME_IDDOCUMENT_C) references T_DOCUMENT (DOC_ID_C) on delete restrict on update restrict;
|
alter table T_DOCUMENT_METADATA add constraint FK_DME_IDDOCUMENT_C foreign key (DME_IDDOCUMENT_C) references T_DOCUMENT (DOC_ID_C) on delete restrict on update restrict;
|
||||||
alter table T_DOCUMENT_METADATA add constraint FK_DME_IDMETADATA_C foreign key (DME_IDMETADATA_C) references T_METADATA (MET_ID_C) on delete restrict on update restrict;
|
alter table T_DOCUMENT_METADATA add constraint FK_DME_IDMETADATA_C foreign key (DME_IDMETADATA_C) references T_METADATA (MET_ID_C) on delete restrict on update restrict;
|
||||||
update T_CONFIG set CFG_VALUE_C = '24' where CFG_ID_C = 'DB_VERSION';
|
update T_CONFIG set CFG_VALUE_C = '24' where CFG_ID_C = 'DB_VERSION';
|
||||||
|
@ -614,6 +614,8 @@ public class DocumentResource extends BaseResource {
|
|||||||
* @apiParam {String} [rights] Rights
|
* @apiParam {String} [rights] Rights
|
||||||
* @apiParam {String[]} [tags] List of tags ID
|
* @apiParam {String[]} [tags] List of tags ID
|
||||||
* @apiParam {String[]} [relations] List of related documents ID
|
* @apiParam {String[]} [relations] List of related documents ID
|
||||||
|
* @apiParam {String[]} [metadata_id] List of metadata ID
|
||||||
|
* @apiParam {String[]} [metadata_value] List of metadata values
|
||||||
* @apiParam {String} language Language
|
* @apiParam {String} language Language
|
||||||
* @apiParam {Number} [create_date] Create date (timestamp)
|
* @apiParam {Number} [create_date] Create date (timestamp)
|
||||||
* @apiSuccess {String} id Document ID
|
* @apiSuccess {String} id Document ID
|
||||||
@ -634,6 +636,8 @@ public class DocumentResource extends BaseResource {
|
|||||||
* @param rights Rights
|
* @param rights Rights
|
||||||
* @param tagList Tags
|
* @param tagList Tags
|
||||||
* @param relationList Relations
|
* @param relationList Relations
|
||||||
|
* @param metadataIdList Metadata ID list
|
||||||
|
* @param metadataValueList Metadata value list
|
||||||
* @param language Language
|
* @param language Language
|
||||||
* @param createDateStr Creation date
|
* @param createDateStr Creation date
|
||||||
* @return Response
|
* @return Response
|
||||||
@ -652,6 +656,8 @@ public class DocumentResource extends BaseResource {
|
|||||||
@FormParam("rights") String rights,
|
@FormParam("rights") String rights,
|
||||||
@FormParam("tags") List<String> tagList,
|
@FormParam("tags") List<String> tagList,
|
||||||
@FormParam("relations") List<String> relationList,
|
@FormParam("relations") List<String> relationList,
|
||||||
|
@FormParam("metadata_id") List<String> metadataIdList,
|
||||||
|
@FormParam("metadata_value") List<String> metadataValueList,
|
||||||
@FormParam("language") String language,
|
@FormParam("language") String language,
|
||||||
@FormParam("create_date") String createDateStr) {
|
@FormParam("create_date") String createDateStr) {
|
||||||
if (!authenticate()) {
|
if (!authenticate()) {
|
||||||
@ -674,7 +680,7 @@ public class DocumentResource extends BaseResource {
|
|||||||
if (!Constants.SUPPORTED_LANGUAGES.contains(language)) {
|
if (!Constants.SUPPORTED_LANGUAGES.contains(language)) {
|
||||||
throw new ClientException("ValidationError", MessageFormat.format("{0} is not a supported language", language));
|
throw new ClientException("ValidationError", MessageFormat.format("{0} is not a supported language", language));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the document
|
// Create the document
|
||||||
Document document = new Document();
|
Document document = new Document();
|
||||||
document.setUserId(principal.getId());
|
document.setUserId(principal.getId());
|
||||||
@ -704,6 +710,13 @@ public class DocumentResource extends BaseResource {
|
|||||||
// Update relations
|
// Update relations
|
||||||
updateRelationList(document.getId(), relationList);
|
updateRelationList(document.getId(), relationList);
|
||||||
|
|
||||||
|
// Update custom metadata
|
||||||
|
try {
|
||||||
|
MetadataUtil.updateMetadata(document.getId(), metadataIdList, metadataValueList);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new ClientException("ValidationError", e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
// Raise a document created event
|
// Raise a document created event
|
||||||
DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent();
|
DocumentCreatedAsyncEvent documentCreatedAsyncEvent = new DocumentCreatedAsyncEvent();
|
||||||
documentCreatedAsyncEvent.setUserId(principal.getId());
|
documentCreatedAsyncEvent.setUserId(principal.getId());
|
||||||
@ -734,6 +747,8 @@ public class DocumentResource extends BaseResource {
|
|||||||
* @apiParam {String} [rights] Rights
|
* @apiParam {String} [rights] Rights
|
||||||
* @apiParam {String[]} [tags] List of tags ID
|
* @apiParam {String[]} [tags] List of tags ID
|
||||||
* @apiParam {String[]} [relations] List of related documents ID
|
* @apiParam {String[]} [relations] List of related documents ID
|
||||||
|
* @apiParam {String[]} [metadata_id] List of metadata ID
|
||||||
|
* @apiParam {String[]} [metadata_value] List of metadata values
|
||||||
* @apiParam {String} language Language
|
* @apiParam {String} language Language
|
||||||
* @apiParam {Number} [create_date] Create date (timestamp)
|
* @apiParam {Number} [create_date] Create date (timestamp)
|
||||||
* @apiSuccess {String} id Document ID
|
* @apiSuccess {String} id Document ID
|
||||||
@ -763,6 +778,8 @@ public class DocumentResource extends BaseResource {
|
|||||||
@FormParam("rights") String rights,
|
@FormParam("rights") String rights,
|
||||||
@FormParam("tags") List<String> tagList,
|
@FormParam("tags") List<String> tagList,
|
||||||
@FormParam("relations") List<String> relationList,
|
@FormParam("relations") List<String> relationList,
|
||||||
|
@FormParam("metadata_id") List<String> metadataIdList,
|
||||||
|
@FormParam("metadata_value") List<String> metadataValueList,
|
||||||
@FormParam("language") String language,
|
@FormParam("language") String language,
|
||||||
@FormParam("create_date") String createDateStr) {
|
@FormParam("create_date") String createDateStr) {
|
||||||
if (!authenticate()) {
|
if (!authenticate()) {
|
||||||
@ -824,7 +841,14 @@ public class DocumentResource extends BaseResource {
|
|||||||
|
|
||||||
// Update relations
|
// Update relations
|
||||||
updateRelationList(id, relationList);
|
updateRelationList(id, relationList);
|
||||||
|
|
||||||
|
// Update custom metadata
|
||||||
|
try {
|
||||||
|
MetadataUtil.updateMetadata(document.getId(), metadataIdList, metadataValueList);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new ClientException("ValidationError", e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
// Raise a document updated event
|
// Raise a document updated event
|
||||||
DocumentUpdatedAsyncEvent documentUpdatedAsyncEvent = new DocumentUpdatedAsyncEvent();
|
DocumentUpdatedAsyncEvent documentUpdatedAsyncEvent = new DocumentUpdatedAsyncEvent();
|
||||||
documentUpdatedAsyncEvent.setUserId(principal.getId());
|
documentUpdatedAsyncEvent.setUserId(principal.getId());
|
||||||
|
@ -819,4 +819,82 @@ public class TestDocumentResource extends BaseJerseyTest {
|
|||||||
Assert.assertEquals(279276L, files.getJsonObject(1).getJsonNumber("size").longValue());
|
Assert.assertEquals(279276L, files.getJsonObject(1).getJsonNumber("size").longValue());
|
||||||
Assert.assertEquals("application/pdf", files.getJsonObject(1).getString("mimetype"));
|
Assert.assertEquals("application/pdf", files.getJsonObject(1).getString("mimetype"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test custom metadata.
|
||||||
|
*
|
||||||
|
* @throws Exception e
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testCustomMetadata() throws Exception {
|
||||||
|
// Login admin
|
||||||
|
String adminToken = clientUtil.login("admin", "admin", false);
|
||||||
|
|
||||||
|
// Login metadata1
|
||||||
|
clientUtil.createUser("metadata1");
|
||||||
|
String metadata1Token = clientUtil.login("metadata1");
|
||||||
|
|
||||||
|
// Create some metadata with admin
|
||||||
|
JsonObject json = target().path("/metadata").request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
.put(Entity.form(new Form()
|
||||||
|
.param("name", "str")
|
||||||
|
.param("type", "STRING")), JsonObject.class);
|
||||||
|
String metadataStrId = json.getString("id");
|
||||||
|
json = target().path("/metadata").request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
.put(Entity.form(new Form()
|
||||||
|
.param("name", "int")
|
||||||
|
.param("type", "INTEGER")), JsonObject.class);
|
||||||
|
String metadataIntId = json.getString("id");
|
||||||
|
json = target().path("/metadata").request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
.put(Entity.form(new Form()
|
||||||
|
.param("name", "float")
|
||||||
|
.param("type", "FLOAT")), JsonObject.class);
|
||||||
|
String metadataFloatId = json.getString("id");
|
||||||
|
json = target().path("/metadata").request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
.put(Entity.form(new Form()
|
||||||
|
.param("name", "date")
|
||||||
|
.param("type", "DATE")), JsonObject.class);
|
||||||
|
String metadataDateId = json.getString("id");
|
||||||
|
json = target().path("/metadata").request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
.put(Entity.form(new Form()
|
||||||
|
.param("name", "bool")
|
||||||
|
.param("type", "BOOLEAN")), JsonObject.class);
|
||||||
|
String metadataBoolId = json.getString("id");
|
||||||
|
|
||||||
|
// Create a document with metadata1
|
||||||
|
json = target().path("/document").request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, metadata1Token)
|
||||||
|
.put(Entity.form(new Form()
|
||||||
|
.param("title", "Metadata 1")
|
||||||
|
.param("language", "eng")
|
||||||
|
.param("metadata_id", metadataStrId)
|
||||||
|
.param("metadata_id", metadataIntId)
|
||||||
|
.param("metadata_id", metadataFloatId)
|
||||||
|
.param("metadata_value", "my string")
|
||||||
|
.param("metadata_value", "50")
|
||||||
|
.param("metadata_value", "12.4")), JsonObject.class);
|
||||||
|
String document1Id = json.getString("id");
|
||||||
|
|
||||||
|
// Update the document with metadata1
|
||||||
|
target().path("/document/" + document1Id).request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, metadata1Token)
|
||||||
|
.post(Entity.form(new Form()
|
||||||
|
.param("title", "Metadata 1")
|
||||||
|
.param("language", "eng")
|
||||||
|
.param("metadata_id", metadataStrId)
|
||||||
|
.param("metadata_id", metadataIntId)
|
||||||
|
.param("metadata_id", metadataFloatId)
|
||||||
|
.param("metadata_id", metadataDateId)
|
||||||
|
.param("metadata_id", metadataBoolId)
|
||||||
|
.param("metadata_value", "my string 2")
|
||||||
|
.param("metadata_value", "52")
|
||||||
|
.param("metadata_value", "14.4")
|
||||||
|
.param("metadata_value", Long.toString(new Date().getTime()))
|
||||||
|
.param("metadata_value", "true")), JsonObject.class);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user