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.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.text.Normalizer; import java.text.Normalizer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.manalejandro.arjion.model.Archivo; import com.manalejandro.arjion.model.Archivo;
import com.manalejandro.arjion.model.Documento; import com.manalejandro.arjion.model.Documento;
import com.manalejandro.arjion.services.MainService; import com.manalejandro.arjion.services.MainService;
@ -113,16 +116,22 @@ public class MainController {
// Identifica el idioma del archivo // Identifica el idioma del archivo
LanguageIdentifier identifier = new LanguageIdentifier(handler.toString()); LanguageIdentifier identifier = new LanguageIdentifier(handler.toString());
// Almacena en elasticsearch // 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(), 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"; return "exists";
} else { } else {
// Guarda el archivo en el directorio configurado en las properties // Guarda el archivo en el directorio configurado en las properties
Files.write(path, bytes); Files.write(path, bytes);
} }
// Añade los parámetros al VO para mostrar en la vista // Añade los parámetros al VO para mostrar en la vista
documentoVO.getArchivos().add(new Archivo(filename, String.valueOf(archivos[i].getSize()), documentoVO.getArchivos().add(new Archivo(filename, String.valueOf(archivos[i].getSize()), meta,
metadata.toString(), handler.toString(), identifier.getLanguage())); handler.toString(), identifier.getLanguage()));
} }
} }
model.addAttribute("documentoVO", documentoVO); model.addAttribute("documentoVO", documentoVO);
@ -132,7 +141,10 @@ public class MainController {
@GetMapping(path = "/detail") @GetMapping(path = "/detail")
public String detail(final Model model, @RequestParam(value = "nombre", required = true) String nombre) { public String detail(final Model model, @RequestParam(value = "nombre", required = true) String nombre) {
DetailVO detailVO = new DetailVO(); 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); model.addAttribute("detailVO", detailVO);
return "detail"; return "detail";
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -16,20 +16,20 @@
<a th:href="@{/}"> <a th:href="@{/}">
<h1 class="text-primary">Arjion</h1> <h1 class="text-primary">Arjion</h1>
</a> </a>
<h3 class="text-warning">[[${detailVO.documento.nombre}]]</h3> <h3 class="text-warning">[[${detailVO.archivo.nombre}]]</h3>
</header> </header>
<section class="col-md-12"> <section class="col-md-12">
<hr> <hr>
</section> </section>
<section> <section>
<span class="col-md-1 text-muted">Tamaño</span> <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-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-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> <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> </div>
</section> </section>
<section class="col-md-12"> <section class="col-md-12">

View File

@ -49,7 +49,7 @@
<span class="col-md-1 text-muted">Lenguaje</span> <span class="col-md-1 text-muted">Lenguaje</span>
<span class="col-md-11 text-muted">[[${arc.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-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> <span class="col-md-1 text-warning">Contenido</span>
<pre class="col-md-11 text-warning">[[${arc.contenido}]]</pre> <pre class="col-md-11 text-warning">[[${arc.contenido}]]</pre>
<span class="col-md-12"> <span class="col-md-12">