edu.utn.frba.grupo5303.serverenviolibre.repository.FacturasDAODynamo.java Source code

Java tutorial

Introduction

Here is the source code for edu.utn.frba.grupo5303.serverenviolibre.repository.FacturasDAODynamo.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.utn.frba.grupo5303.serverenviolibre.repository;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;
import edu.utn.frba.grupo5303.serverenviolibre.beans.InfoMontoBean;
import edu.utn.frba.grupo5303.serverenviolibre.config.HoraArgentina;
import edu.utn.frba.grupo5303.serverenviolibre.model.FacturaDynamo;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.stereotype.Repository;

/**
 *
 * @author flpitu88
 */
@Repository
public class FacturasDAODynamo implements FacturasDAO {

    private static AmazonDynamoDBClient ddb;
    private DynamoDBMapper mapper;

    public FacturasDAODynamo() {

        String regionName = "us-west-2";

        Region region = Region.getRegion(Regions.fromName(regionName));
        ClientConfiguration clientConfiguration = new ClientConfiguration().withMaxErrorRetry(20);

        ddb = new AmazonDynamoDBClient(new ProfileCredentialsProvider(), clientConfiguration);

        ddb.setRegion(region);

        mapper = new DynamoDBMapper(ddb);
    }

    @Override
    public void guardarFactura(FacturaDynamo factura) {
        mapper.save(factura);
    }

    @Override
    public FacturaDynamo getFacturaByNumero(Integer nroFactura) {
        return mapper.load(FacturaDynamo.class, nroFactura);
    }

    @Override
    public void borrarFactura(Integer id) {
        FacturaDynamo fact = getFacturaByNumero(id);
        mapper.delete(fact);
    }

    @Override
    public List<FacturaDynamo> getFacturasDeUsuario(Integer nroUsuario) {
        List<FacturaDynamo> listado = new ArrayList<>();
        Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
        expressionAttributeValues.put(":idUsuario", new AttributeValue().withN(nroUsuario.toString()));

        ScanRequest scanRequest = new ScanRequest().withTableName("Facturas")
                .withFilterExpression("idUsuario = :idUsuario")
                .withProjectionExpression("nroFactura, periodoHasta, periodoDesde")
                .withExpressionAttributeValues(expressionAttributeValues);

        ScanResult result = ddb.scan(scanRequest);

        for (Map<String, AttributeValue> mapa : result.getItems()) {
            FacturaDynamo itemFac = new FacturaDynamo(Integer.parseInt(mapa.get("nroFactura").getN()), nroUsuario,
                    mapa.get("periodoDesde").getS(), mapa.get("periodoHasta").getS());
            listado.add(itemFac);
        }
        return listado;
    }

    @Override
    public List<InfoMontoBean> getMontosFacturados() {
        List<InfoMontoBean> listado = new ArrayList<>();

        // Create a DecimalFormat that fits your requirements
        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        //        symbols.setGroupingSeparator(',');
        symbols.setDecimalSeparator('.');
        String pattern = "####0.0#";
        DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
        decimalFormat.setParseBigDecimal(true);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

        ScanRequest scanRequest = new ScanRequest().withTableName("Facturas")
                .withProjectionExpression("importeTotal,periodoHasta");

        ScanResult result = ddb.scan(scanRequest);

        for (Map<String, AttributeValue> mapa : result.getItems()) {
            try {
                String importeTotalString = mapa.get("importeTotal").getS();
                String periodoHastaString = mapa.get("periodoHasta").getS();

                InfoMontoBean monto = new InfoMontoBean();

                LocalDate fechaHasta = LocalDate.parse(periodoHastaString, formatter);
                BigDecimal importeTotal = (BigDecimal) decimalFormat.parse(importeTotalString);
                if (fechaHasta.getMonthValue() == (HoraArgentina.getFechaActualArgentina().getMonthValue() - 1)) {
                    monto.setImporteMes(importeTotal);
                }
                monto.setImporteTotal(importeTotal);

                listado.add(monto);

            } catch (ParseException ex) {
                Logger.getLogger(FacturasDAODynamo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return listado;
    }

}