diff --git a/src/main/java/com/manalejandro/arjion/controllers/MainController.java b/src/main/java/com/manalejandro/arjion/controllers/MainController.java index 7751dde..a15d62b 100644 --- a/src/main/java/com/manalejandro/arjion/controllers/MainController.java +++ b/src/main/java/com/manalejandro/arjion/controllers/MainController.java @@ -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 meta = new HashMap(); + 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"; } diff --git a/src/main/java/com/manalejandro/arjion/model/Archivo.java b/src/main/java/com/manalejandro/arjion/model/Archivo.java index 48ff01a..c3d75c6 100644 --- a/src/main/java/com/manalejandro/arjion/model/Archivo.java +++ b/src/main/java/com/manalejandro/arjion/model/Archivo.java @@ -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; } diff --git a/src/main/java/com/manalejandro/arjion/model/Documento.java b/src/main/java/com/manalejandro/arjion/model/Documento.java index c20dff0..17eccd2 100644 --- a/src/main/java/com/manalejandro/arjion/model/Documento.java +++ b/src/main/java/com/manalejandro/arjion/model/Documento.java @@ -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; } diff --git a/src/main/java/com/manalejandro/arjion/vo/DetailVO.java b/src/main/java/com/manalejandro/arjion/vo/DetailVO.java index 5faed80..8f624ff 100644 --- a/src/main/java/com/manalejandro/arjion/vo/DetailVO.java +++ b/src/main/java/com/manalejandro/arjion/vo/DetailVO.java @@ -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; } } \ No newline at end of file diff --git a/src/main/resources/elasticsearch/mapping.json b/src/main/resources/elasticsearch/mapping.json index e6b8702..f5d5753 100644 --- a/src/main/resources/elasticsearch/mapping.json +++ b/src/main/resources/elasticsearch/mapping.json @@ -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" diff --git a/src/main/resources/templates/detail.html b/src/main/resources/templates/detail.html index fc4712b..219f752 100644 --- a/src/main/resources/templates/detail.html +++ b/src/main/resources/templates/detail.html @@ -16,20 +16,20 @@

Arjion

-

[[${detailVO.documento.nombre}]]

+

[[${detailVO.archivo.nombre}]]


Tamaño - [[${detailVO.documento.tamano}]] bytes + [[${detailVO.archivo.tamano}]] bytes Lenguaje - [[${detailVO.documento.lenguaje}]] + [[${detailVO.archivo.lenguaje}]] Metadatos - [[${detailVO.documento.metadata}]] +
  • :
Contenido -
[[${detailVO.documento.contenido}]]
+
[[${detailVO.archivo.contenido}]]
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 11a1fc6..03d5b10 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -49,7 +49,7 @@ Lenguaje [[${arc.lenguaje}]] Metadatos - [[${arc.metadata}]] +
  • :
Contenido
[[${arc.contenido}]]