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

pl.koder95.eme.core.AbstractCabinetAnalyzer Maven / Gradle / Ivy

There is a newer version: 0.4.4
Show newest version
package pl.koder95.eme.core;

import javafx.util.Callback;
import static org.controlsfx.control.textfield.AutoCompletionBinding.ISuggestionRequest;

import javafx.util.StringConverter;
import pl.koder95.eme.core.spi.*;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * Ogólny analizator szafy definiuje interfejs dostawcy sugestii
 * oraz konwerter ({@link String} - {@link PersonalDataModel}).
 * Zlicza również ile zostało wczytanych aktów ze źródła.
 *
 * @author Kamil Jan Mularski [@Koder95]
 * @version 0.4.0, 2020-08-26
 * @since 0.4.0
 */
public abstract class AbstractCabinetAnalyzer extends AbstractCabinetWorker implements CabinetAnalyzer {

    private final Callback> suggestionProvider;
    private final StringConverter converter;
    private float numberOfActs;

    /**
     * Tworzy obiekt określając wszystkie jego elementy.
     *
     * @param cabinet szafa aktowa
     * @param source źródło danych
     * @param target cel danych
     * @param suggestionProvider interfejs dostawcy sugestii
     * @param converter konwerter {@link String} - {@link PersonalDataModel}
     */
    public AbstractCabinetAnalyzer(FilingCabinet cabinet, DataSource source, DataTarget target,
                                   Callback> suggestionProvider,
                                   StringConverter converter) {
        super(cabinet, source, target);
        this.suggestionProvider = suggestionProvider;
        this.converter = converter;
    }

    /**
     * Tworzy obiekt określając konieczne jego elementy.
     *
     * @param cabinet szafa aktowa
     * @param suggestionProvider interfejs dostawcy sugestii
     * @param converter konwerter {@link String} - {@link PersonalDataModel}
     */
    public AbstractCabinetAnalyzer(FilingCabinet cabinet,
                                   Callback> suggestionProvider,
                                   StringConverter converter) {
        super(cabinet);
        this.suggestionProvider = suggestionProvider;
        this.converter = converter;
    }

    @Override
    public Callback> getSuggestionProvider() {
        return suggestionProvider;
    }

    @Override
    public StringConverter getPersonalDataConverter() {
        return converter;
    }

    /**
     * Liczba aktów jest liczona podczas ładowania ich ze źródła do szafy metodą {@link #load()}.
     * Każda tablica zwrócona przez metody {@link DataSource#getBaptism(String, String)},
     * {@link DataSource#getConfirmation(String, String)} i {@link DataSource#getDecease(String, String)}
     * jest używana przez zwrócenie liczby elementów tablicy. Te wartości dodawane do liczby numerów aktów.
     * Podobnie jest z metodą {@link DataSource#getMarriage(String, String)}, z tą różnicą, że liczba
     * elementów dzielona jest przez {@code 2f}, ponieważ te akta zawierają informację o dwóch osobach.
     * Zatem, wywołując {@link DataSource#getMarriage(String, String)} najpierw z danymi męża, później
     * z danymi żony, wśród elementów powinniśmy otrzymać ten sam numer aktu za pierwszym i za drugim razem.
     * Wartość liczby zmiennoprzecinkowej podczas zwracania jest
     * zaokrąglana za pomocą metody {@link Math#round(float)}.
     *
     * @return liczba aktów wczytanych i przechowywanych w {@link FilingCabinet szafie aktowej}
     */
    @Override
    public int getNumberOfActs() {
        return Math.round(numberOfActs);
    }

    @Override
    public void load() {
        Map> personalData = getDataSource().getPersonalData();
        personalData.forEach((surname, names) -> names.forEach((name) -> {
            DataSource dataSource = getDataSource();
            Briefcase briefcase = createBriefcase(
                    dataSource.getBaptism(surname, name),
                    dataSource.getConfirmation(surname, name),
                    dataSource.getMarriage(surname, name),
                    dataSource.getDecease(surname, name)
            );
            numberOfActs += briefcase.getBaptism().length;
            numberOfActs += briefcase.getConfirmation().length;
            numberOfActs += briefcase.getMarriage().length/2f;
            numberOfActs += briefcase.getDecease().length;
            getCabinet().add(surname, name, briefcase);
        }));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy