Skip to content
This repository was archived by the owner on Jan 27, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions prueba_java_project/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/target
.idea
35 changes: 35 additions & 0 deletions prueba_java_project/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## Solución

### Primer paso

Se utiliza el método getUfs con las fechas de inicio y termino que genera el método getRango para agregar los valores de las fechas restantes.
Considerando que el Set es para collections sin duplicaciones solo habrá valores de fechas distintas.

### Segundo paso

Se escogió el formato de json. Se traspasa a ese formato usando JSONObject de la dependencia de json-simple.
Se ordenó de manera descendente usando el método estático sort de la clase Collections del package java.util, se consideró que usar la fecha en tipo de String para el ordenamiento

### Tercer paso

se utilizo la clase FileWriter de java.io para la creación del archivo pasando el objeto json como un string

## Tecnologías y librerías utilizadas

Dentro del pom.xml se agregaron solo una dependencia, que es la siguiente:

```xml
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
</dependency>
```
Dado que lo pidió el proyecto al momento de agregar la librería y ejecutar el código para probar los métodos a usar en él desafió, y la vez que se usó para armar json que se imprimió en el archivo final.

Además se usaron librerías internas del jdk de java como java.io para el manejo del archivo, java.util para el almacenamiento y procesamiento en ejecución como son las clases de ArrayList y Collections respectivamente.

## Detalles de la compilación y ejecución

En cuanto a la compilación y ejecución sé utilizó el openjdk 11 de Amazon Corretto a través del IDE IntelliJ IDEA.
25 changes: 25 additions & 0 deletions prueba_java_project/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>cl.previred</groupId>
<artifactId>prueba_java_project</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>

</project>
115 changes: 115 additions & 0 deletions prueba_java_project/src/main/java/cl/previred/PruebaApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package cl.previred;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.previred.desafio.tres.uf.DatosUf;
import com.previred.desafio.tres.uf.Valores;
import com.previred.desafio.tres.uf.vo.Uf;
import com.previred.desafio.tres.uf.vo.Ufs;

import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;

public class PruebaApplication {

public static void main(String... args){
Valores valores = new Valores();
Ufs ufs = valores.getRango();
Set<Uf> ufSet = ufs.getUfs();
// Se agregan los valores faltantes de ufs
ufSet.addAll(DatosUf.getInstance().getUfs(ufs.getInicio(),ufs.getFin()));
ufs.setUfs(ufSet);
imprimirJsonInArchive(convertirValoresToJson(ufs),"valores.json");

}

public static JsonObject convertirValoresToJson(Ufs ufs){
JsonObject jsonUfs = new JsonObject();
jsonUfs.addProperty("inicio",convertirFormatoFecha(ufs.getInicio()));
jsonUfs.addProperty("fin", convertirFormatoFecha(ufs.getFin()));

JsonArray jsonArray = new JsonArray();

for ( Uf uf : ufs.getUfs() ) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("fecha",convertirFormatoFecha(uf.getFecha()));
jsonObject.addProperty("dato",convertirFormatoValor(uf.getValor()));
jsonArray.add(jsonObject);
}

jsonArray = ordenarByFecha(jsonArray);

jsonUfs.add("UFs",jsonArray);

return jsonUfs;

}

public static JsonArray ordenarByFecha(JsonArray jsonArrayUfs){

JsonArray sortedJsonArray = new JsonArray();

List<JsonObject> jsonValues = new ArrayList<>();
for (int i = 0; i < jsonArrayUfs.size(); i++) {
jsonValues.add((JsonObject) jsonArrayUfs.get(i));
}
Collections.sort( jsonValues, new Comparator<JsonObject>() {
//You can change "Name" with "ID" if you want to sort by ID
private static final String KEY_NAME = "fecha";

@Override
public int compare(JsonObject a, JsonObject b) {
String valA = "";
String valB = "";

try {
valA = a.get(KEY_NAME).getAsString();
valB = b.get(KEY_NAME).getAsString();
}
catch (Exception e) {
e.printStackTrace();
}

return -valA.compareTo(valB);
}
});

for (int i = 0; i < jsonValues.size(); i++) {
sortedJsonArray.add(jsonValues.get(i));
}

return sortedJsonArray;
}

public static String convertirFormatoFecha(Date fecha){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.format(fecha);
}

public static String convertirFormatoValor(Double valor){
String replacePunto = valor.toString().replace(".",",");
String[] split = replacePunto.split(",");
String number = split[0];
int i = number.length();
if(i > 3){
String result = "";
while (i > 3) {
result = "." + number.substring(i-3,i) + result;
i = i-3;
}
return number.substring(0,i)+result+","+split[1];
}
return replacePunto;
}

public static void imprimirJsonInArchive (JsonObject jsonObject, String filename){
try(FileWriter fileWriter = new FileWriter(filename)) {
fileWriter.write(jsonObject.toString());
fileWriter.flush();
} catch (IOException e){
e.printStackTrace();
}
}
}
Loading