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

net.acesinc.data.binner.Binner Maven / Gradle / Ivy

/*
 * 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 net.acesinc.data.binner;

import net.acesinc.data.binner.extractor.DataExtractorFactory;
import net.acesinc.data.binner.extractor.DataExtractor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author andrewserff
 */
public abstract class Binner {

    private static Logger log = LoggerFactory.getLogger(Binner.class);

    private String binName;
    private String dataFieldName;
    private List generatedBinNames;

    public static final String ALL_COUNT_NAME = "All";

    public Binner(String binName) {
        this(binName, binName);
    }

    public Binner(String binName, String dataFieldName) {
        this.binName = binName;
        this.dataFieldName = dataFieldName;
    }

    public List generateBinNames(Object data) {
        try {
            DataExtractor ext = DataExtractorFactory.getDataExtractor(data);
            if (ext != null) {
                Object val = ext.getValueForFieldName(dataFieldName);
                if (val != null) {
                    generatedBinNames = Collections.synchronizedList(new ArrayList<>());

                    //always add an All count
                    generatedBinNames.add(getBinName() + "." + Binner.ALL_COUNT_NAME);

                    //now add all the generated count names
                    generatedBinNames.addAll(generateBinNamesForData(val));
                    
                    return generatedBinNames;
                } else {
                    log.warn("No data exists for field [ " + dataFieldName + " ]");
                }
            }
        } catch (Exception e) {
            log.error("Error getting DataExtractor", e);
        }
        return new ArrayList<>();
    }

    protected abstract List generateBinNamesForData(Object value);

    /**
     * @return the binName
     */
    public String getBinName() {
        return binName;
    }

    /**
     * @param binName the binName to set
     */
    public void setBinName(String binName) {
        this.binName = binName;
    }

    /**
     * @return the dataFieldName
     */
    public String getDataFieldName() {
        return dataFieldName;
    }

    /**
     * @param dataFieldName the dataFieldName to set
     */
    public void setDataFieldName(String dataFieldName) {
        this.dataFieldName = dataFieldName;
    }

    /**
     * @return the generatedBinNames
     */
    public List getGeneratedBinNames() {
        return generatedBinNames;
    }

    /**
     * @param generatedBinNames the generatedBinNames to set
     */
    public void setGeneratedBinNames(List generatedBinNames) {
        this.generatedBinNames = generatedBinNames;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy