All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.javabeanstack.data.model.DataSet Maven / Gradle / Ivy

The newest version!
/*
* JavaBeanStack FrameWork
*
* Copyright (C) 2017 Jorge Enciso
* Email: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301  USA
*/

package org.javabeanstack.data.model;

import org.javabeanstack.datactrl.IDataObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.javabeanstack.data.IDataRow;
import org.javabeanstack.data.IDataSet;
import org.javabeanstack.data.events.IDAOEvents;

/**
 * Esta clase se utiliza para enviar los set de datos para la actualización en 
 * la base de datos.
 * 
 * @author Jorge Enciso
 */
public class DataSet implements IDataSet {
    private Date lastProcess;
    
    private final Map listDataObject = new LinkedHashMap();
    private List> listSet  = new LinkedList();
    private final Map> mapSet = new LinkedHashMap();
    private final Map mapSetEvents = new LinkedHashMap();

    /**
     * Devuelve de cada set de datos los registros que fuerón modificados y que
     * se deben grabar en la base de datos.
     * 
     * @return set de datos que fuerón modificados.
     */
    @Override
    public IDataSet getChanged() {
        IDataSet dataSet = new DataSet();
        mapSet.entrySet().forEach( entry -> {
            dataSet.add(entry.getKey(), getRowsChanged((List)entry.getValue()),getEvent(entry.getKey()));
        });
        return dataSet;
    }

    /**
     * Devuelve una lista de elementos o registros que fuerón modificados y que
     * deben guardarse en la base de datos.
     * @param rows  lista de registros a ser analizados.    
     * @return registros modificados.
     */
    private List getRowsChanged(List rows) {
        List rowsChanged = new ArrayList();
        for (int i = 0; i < rows.size(); i++) {
            IDataRow row = rows.get(i);
            if (row.getAction() != 0) {
                rowsChanged.add(row);
            }
        }
        return rowsChanged;
    }
    
    
    @Override
    public Date getLastProcess() {
        return lastProcess;
    }

    @Override
    public void setLastProcess(Date date) {
        lastProcess = date;
    }
    
    /**
     * Devuelve un set de datos.
     * @param key clave del map conteniendo el set de datos.
     * @return set de datos solicitado.
     */
    @Override
    public List get(String key) {
        return mapSet.get(key);
    }

    /**
     * Devuelve un set de eventos.
     * @param key clave del map conteniendo el set de eventos.
     * @return set de eventos solicitado.
     */
    @Override
    public IDAOEvents getEvent(String key) {
        return mapSetEvents.get(key.toLowerCase());
    }
    
    
    @Override
    public void addEvents(String key, IDAOEvents events){
        mapSetEvents.put(key.toLowerCase(), events);
    }
    
    /**
     * Devuelve un set de datos.
     * @param setNumber nro de set de datos.
     * @return set de datos solicitado.
     */
    @Override
    public List get(int setNumber) {
        if (setNumber >= 0 && listSet.size() > setNumber){
            return listSet.get(setNumber);
        }
        return null;
    }

    /**
     * Devuelve un map con los DataObjects
     * @return un map con los DataObjects
     */
    @Override
    public Map getMapDataObject() {
        return listDataObject;
    }

    /**
     * Devuelve un map con todos los sets de datos.
     * @return map con los sets de datos
     */
    @Override
    public Map> getMapListSet() {
        return mapSet;
    }
    
    
    /**
     * Agrega un set de datos al map.
     * @param key   clave recuperar luego el set de datos.
     * @param set   lista con los registros
     */
    @Override
    public void add(String key, List set) {
        List old = mapSet.put(key, set);
        if (old == null){
            listSet.add(set);
        }
        else{
            reCreateList();
        }
    }

    /**
     * Agrega una fila o registro a un set de datos.
     * @param key   clave que será utilizada luego para recuperar el registro
     * @param row   registro.
     */
    @Override
    public void add(String key, IDataRow row) {
        List newValue = new ArrayList<>();
        newValue.add(row);
        List oldValue = mapSet.put(key, newValue);
        if (oldValue == null){
            listSet.add(newValue);
        }
        else{
            reCreateList();
        }
    }

    /**
     * Agrega un set de datos al map.
     * @param key   clave recuperar luego el set de datos.
     * @param set   lista con los registros
     * @param events eventos pre y post grabación
     */
    @Override
    public void add(String key, List set, IDAOEvents events) {
        List old = mapSet.put(key, set);
        mapSetEvents.put(key, events);
        if (old == null){
            listSet.add(set);
        }
        else{
            reCreateList();
        }
    }
    
    /**
     * Agrega un dataobject a la lista de DataObjects.
     * @param key   clave que luego se utilizará para recuperar el dataObject
     * @param dataObject 
     */
    @Override
    public void addDataObject(String key, IDataObject dataObject) {
        listDataObject.put(key, dataObject);
        add(key,dataObject.getDataRows());
    }
    
    /**
     * 
     * @return devuelve la cantidad de sets de datos.
     */
    @Override
    public int size() {
        return mapSet.size();
    }
    
    private void reCreateList(){
        listSet = new LinkedList();
        mapSet.entrySet().forEach( entry -> {
            listSet.add(entry.getValue());
        });
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy