use of org.molgenis.data.MolgenisDataException in project molgenis by molgenis.
the class RestService method convertFile.
private FileMeta convertFile(Attribute attr, Object paramValue, Object entityId) {
FileMeta value;
if (paramValue != null) {
/*
* If an entity is updated and no new file is passed, use the old file value
*/
if (!(paramValue instanceof MultipartFile)) {
EntityType entityType = attr.getEntity();
Attribute idAttribute = entityType.getIdAttribute();
Object idValue = this.toEntityValue(idAttribute, entityId, null);
Entity oldEntity = dataService.findOneById(entityType.getId(), idValue);
if (paramValue instanceof String) {
FileMeta entity = (FileMeta) oldEntity.getEntity(attr.getName());
if (entity.get(FILENAME).equals(paramValue)) {
value = entity;
} else {
throw new MolgenisDataException("Cannot update entity with file attribute without passing file," + " while changing the name of the existing file attribute");
}
} else {
throw new MolgenisDataException(format("Attribute [%s] value is of type [%s] instead of [%s]", attr.getName(), paramValue.getClass().getSimpleName(), MultipartFile.class.getSimpleName()));
}
} else {
MultipartFile multipartFile = (MultipartFile) paramValue;
String id = idGenerator.generateId();
try {
fileStore.store(multipartFile.getInputStream(), id);
} catch (IOException e) {
throw new MolgenisDataException(e);
}
FileMeta fileEntity = fileMetaFactory.create(id);
fileEntity.setFilename(multipartFile.getOriginalFilename());
fileEntity.setContentType(multipartFile.getContentType());
fileEntity.setSize(multipartFile.getSize());
ServletUriComponentsBuilder currentRequest = servletUriComponentsBuilderFactory.fromCurrentRequest();
UriComponents downloadUri = currentRequest.replacePath(FileDownloadController.URI + '/' + id).replaceQuery(null).build();
fileEntity.setUrl(downloadUri.toUriString());
dataService.add(FILE_META, fileEntity);
value = fileEntity;
}
} else {
value = null;
}
return value;
}
Aggregations