This commit is contained in:
manalejandro 2018-07-21 15:59:42 +02:00
parent 3f5718522f
commit aa8af0bfd4
7 changed files with 55 additions and 31 deletions

View File

@ -8,9 +8,12 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.Normalizer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.manalejandro.arjion.model.Archivo;
import com.manalejandro.arjion.model.Documento;
import com.manalejandro.arjion.services.MainService;
@ -113,16 +116,22 @@ public class MainController {
// Identifica el idioma del archivo
LanguageIdentifier identifier = new LanguageIdentifier(handler.toString());
// Almacena en elasticsearch
String[] names = metadata.names();
Map<String, String> meta = new HashMap<String, String>();
for (int j = 0; j < names.length; j++) {
meta.put(names[j], metadata.get(names[j]));
}
ObjectMapper mapper = new ObjectMapper();
if (!mainService.save(new Documento(filename, Long.valueOf(archivos[i].getSize()).intValue(),
metadata.toString(), handler.toString(), identifier.getLanguage()))) {
mapper.valueToTree(meta), handler.toString(), identifier.getLanguage()))) {
return "exists";
} else {
// Guarda el archivo en el directorio configurado en las properties
Files.write(path, bytes);
}
// Añade los parámetros al VO para mostrar en la vista
documentoVO.getArchivos().add(new Archivo(filename, String.valueOf(archivos[i].getSize()),
metadata.toString(), handler.toString(), identifier.getLanguage()));
documentoVO.getArchivos().add(new Archivo(filename, String.valueOf(archivos[i].getSize()), meta,
handler.toString(), identifier.getLanguage()));
}
}
model.addAttribute("documentoVO", documentoVO);
@ -132,7 +141,10 @@ public class MainController {
@GetMapping(path = "/detail")
public String detail(final Model model, @RequestParam(value = "nombre", required = true) String nombre) {
DetailVO detailVO = new DetailVO();
detailVO.setDocumento(mainService.findOne(nombre));
ObjectMapper mapper = new ObjectMapper();
Documento doc = mainService.findOne(nombre);
detailVO.setArchivo(new Archivo(doc.getNombre(), doc.getTamano().toString(),
mapper.convertValue(doc.getMetadata(), Map.class), doc.getContenido(), doc.getLenguaje()));
model.addAttribute("detailVO", detailVO);
return "detail";
}

View File

@ -1,14 +1,16 @@
package com.manalejandro.arjion.model;
import java.util.Map;
public class Archivo {
private String nombre;
private String tamano;
private String metadata;
private Map metadata;
private String contenido;
private String lenguaje;
public Archivo(String nombre, String tamano, String metadata, String contenido, String lenguaje) {
public Archivo(String nombre, String tamano, Map metadata, String contenido, String lenguaje) {
this.nombre = nombre;
this.tamano = tamano;
this.metadata = metadata;
@ -33,7 +35,7 @@ public class Archivo {
/**
* @return the metadata
*/
public String getMetadata() {
public Map getMetadata() {
return metadata;
}
@ -61,7 +63,7 @@ public class Archivo {
/**
* @param metadata the metadata to set
*/
public void setMetadata(String metadata) {
public void setMetadata(Map metadata) {
this.metadata = metadata;
}

View File

@ -1,13 +1,14 @@
package com.manalejandro.arjion.model;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Mapping;
import org.springframework.data.elasticsearch.annotations.Setting;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
@Document(indexName = "#{@indexName}", type = "#{@documentType}")
@Setting(settingPath = "/elasticsearch/settings.json")
@Mapping(mappingPath = "/elasticsearch/mapping.json")
@ -15,15 +16,14 @@ public class Documento {
@Id
public String nombre;
public Integer tamano;
public String metadata;
public JsonNode metadata;
public String contenido;
public String lenguaje;
@JsonCreator
public Documento(@JsonProperty("nombre") String nombre, @JsonProperty("tamano") Integer tamano,
@JsonProperty("metadata") String metadata, @JsonProperty("contenido") String contenido,
@JsonProperty("metadata") JsonNode metadata, @JsonProperty("contenido") String contenido,
@JsonProperty("lenguaje") String lenguaje) {
super();
this.nombre = nombre;
this.tamano = tamano;
this.metadata = metadata;
@ -65,14 +65,14 @@ public class Documento {
* @return the metadata
*/
@JsonProperty("metadata")
public String getMetadata() {
public JsonNode getMetadata() {
return metadata;
}
/**
* @param metadata the metadata to set
*/
public void setMetadata(String metadata) {
public void setMetadata(JsonNode metadata) {
this.metadata = metadata;
}

View File

@ -1,22 +1,22 @@
package com.manalejandro.arjion.vo;
import com.manalejandro.arjion.model.Documento;
import com.manalejandro.arjion.model.Archivo;
public class DetailVO {
private Documento documento;
private Archivo archivo;
/**
* @return the documento
* @return the archivo
*/
public Documento getDocumento() {
return documento;
public Archivo getArchivo() {
return archivo;
}
/**
* @param documento the documento to set
* @param archivo the archivo to set
*/
public void setDocumento(Documento documento) {
this.documento = documento;
public void setArchivo(Archivo archivo) {
this.archivo = archivo;
}
}

View File

@ -1,5 +1,15 @@
{
"documento": {
"dynamic_templates": [
{
"metadata_as_keywords": {
"path_match": "metadata.*",
"mapping": {
"type": "keyword"
}
}
}
],
"properties": {
"@timestamp": {
"type": "date",
@ -15,7 +25,7 @@
"type": "long"
},
"metadata": {
"type": "text"
"type": "object"
},
"contenido": {
"type": "text"

View File

@ -16,20 +16,20 @@
<a th:href="@{/}">
<h1 class="text-primary">Arjion</h1>
</a>
<h3 class="text-warning">[[${detailVO.documento.nombre}]]</h3>
<h3 class="text-warning">[[${detailVO.archivo.nombre}]]</h3>
</header>
<section class="col-md-12">
<hr>
</section>
<section>
<span class="col-md-1 text-muted">Tamaño</span>
<span class="col-md-11 text-muted">[[${detailVO.documento.tamano}]] bytes</span>
<span class="col-md-11 text-muted">[[${detailVO.archivo.tamano}]] bytes</span>
<span class="col-md-1 text-muted">Lenguaje</span>
<span class="col-md-11 text-muted">[[${detailVO.documento.lenguaje}]]</span>
<span class="col-md-11 text-muted">[[${detailVO.archivo.lenguaje}]]</span>
<span class="col-md-1 text-success">Metadatos</span>
<span class="col-md-11 text-success">[[${detailVO.documento.metadata}]]</span>
<span class="col-md-11 text-success"><ul><li th:each="meta : ${detailVO.archivo.metadata}"><span th:text="${meta.key}"></span>: <span th:text="${meta.value}"></span></li></ul></span>
<span class="col-md-1 text-warning">Contenido</span>
<pre class="col-md-11 text-warning">[[${detailVO.documento.contenido}]]</pre>
<pre class="col-md-11 text-warning">[[${detailVO.archivo.contenido}]]</pre>
</div>
</section>
<section class="col-md-12">

View File

@ -49,7 +49,7 @@
<span class="col-md-1 text-muted">Lenguaje</span>
<span class="col-md-11 text-muted">[[${arc.lenguaje}]]</span>
<span class="col-md-1 text-success">Metadatos</span>
<span class="col-md-11 text-success">[[${arc.metadata}]]</span>
<span class="col-md-11 text-success"><ul><li th:each="meta : ${arc.metadata}"><span th:text="${meta.key}"></span>: <span th:text="${meta.value}"></span></li></ul></span>
<span class="col-md-1 text-warning">Contenido</span>
<pre class="col-md-11 text-warning">[[${arc.contenido}]]</pre>
<span class="col-md-12">