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

org.javamoney.moneta.function.GroupMonetarySummaryStatistics Maven / Gradle / Ivy

Go to download

JSR 354 provides an API for representing, transporting, and performing comprehensive calculations with Money and Currency. This module implements JSR 354.

There is a newer version: 1.4.1
Show newest version
/*
 * Copyright (c) 2012, 2014, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag.
 *
 * 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.javamoney.moneta.function;

import java.util.Map;
import java.util.Objects;

import javax.money.CurrencyUnit;
import javax.money.MonetaryAmount;

/**
 * Internal class implementing grouped statistic functionality.
 */
public class GroupMonetarySummaryStatistics {

	private final Map groupSummary = new MonetarySummaryMap();

    GroupMonetarySummaryStatistics() {

    }

	public Map get() {
        return groupSummary;
    }

    public GroupMonetarySummaryStatistics accept(MonetaryAmount amount) {
        CurrencyUnit currency = Objects.requireNonNull(amount).getCurrency();
        MonetarySummaryStatistics summary = groupSummary.get(currency);
        if(summary==null){
            summary = new DefaultMonetarySummaryStatistics(currency);
            groupSummary.put(currency, summary);
        }
        summary.accept(amount);
        return this;
    }

    @Override
    public int hashCode() {
        return Objects.hash(groupSummary);
    }

    @Override
    public boolean equals(Object obj) {
        if (GroupMonetarySummaryStatistics.class.isInstance(obj)) {
            GroupMonetarySummaryStatistics other = GroupMonetarySummaryStatistics.class
                    .cast(obj);
            return Objects.equals(groupSummary, other.groupSummary);
        }
        return false;
    }

    @Override
    public String toString() {
        return "GroupMonetarySummaryStatistics: " + groupSummary.toString();
    }

    public GroupMonetarySummaryStatistics combine(
            GroupMonetarySummaryStatistics another) {
        Objects.requireNonNull(another);

        for (CurrencyUnit keyCurrency : another.groupSummary.keySet()) {
            MonetarySummaryStatistics stats = groupSummary.get(keyCurrency);
            if(stats==null){
                stats = new DefaultMonetarySummaryStatistics(keyCurrency);
                groupSummary.put(keyCurrency,stats);
            }

            MonetarySummaryStatistics oldValue = groupSummary.get(keyCurrency);
            MonetarySummaryStatistics newValue = another.groupSummary.get(keyCurrency);
            if(oldValue!=null) {
                newValue = oldValue.combine(another.groupSummary.get(keyCurrency));
            }
            groupSummary.put(keyCurrency, newValue);
        }
        return this;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy