Package org.jboss.dashboard.dataset.index

Source Code of org.jboss.dashboard.dataset.index.DistinctValue

/**
* Copyright (C) 2012 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.dashboard.dataset.index;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.jboss.dashboard.DataProviderServices;
import org.jboss.dashboard.dataset.DataSet;
import org.jboss.dashboard.function.ScalarFunction;
import org.jboss.dashboard.function.ScalarFunctionManager;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DistinctValue {

    public ColumnIndex columnIndex = null;
    public Object value = null;
    public List<Integer> rows = new ArrayList<Integer>();
    public Map<Integer, Map<String, Double>> scalars = new HashMap<Integer, Map<String, Double>>();

    public DistinctValue(ColumnIndex columnIndex, Object value) {
        this.columnIndex = columnIndex;
        this.value = value;
    }

    public boolean equals(Object other) {
        if (value == null) return other == null;
        return value == other || value.equals(other);
    }

    public int hashCode() {
        if (value == null) return 0;
        return value.hashCode();
    }

    public Double getScalar(int column, String functionCode) {
        Map<String,Double> columnScalars = scalars.get(column);
        if (columnScalars == null) scalars.put(column, columnScalars = new HashMap<String, Double>());
        Double scalar = columnScalars.get(functionCode);
        if (scalar != null) return scalar;

        scalar = calculateScalar(column, functionCode);
        columnScalars.put(functionCode, scalar);
        return scalar;
    }

    protected Double calculateScalar(int column, String functionCode) {
        DataSet dataSet = columnIndex.getDataSetIndex().dataSet;

        List targetValues = new ArrayList();
        List columnValues = dataSet.getValuesAt(column);
        for (Integer targetRow : rows) {
            targetValues.add(columnValues.get(targetRow));
        }

        ScalarFunctionManager scalarFunctionManager = DataProviderServices.lookup().getScalarFunctionManager();
        ScalarFunction function = scalarFunctionManager.getScalarFunctionByCode(functionCode);

        if (!CollectionUtils.exists(targetValues, NON_NULL_ELEMENTS)) {
            return new Double(0);
        } else {
            double value = function.scalar(targetValues);
            return new Double(value);
        }
    }

    protected static Predicate NON_NULL_ELEMENTS = new Predicate() {
        public boolean evaluate(Object o) {
            return o != null;
        }
    };
}
TOP

Related Classes of org.jboss.dashboard.dataset.index.DistinctValue

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.