/* * Copyright (C) 2008 Universidade Federal de Campina Grande * * This file is part of OurGrid. * * OurGrid 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 program 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 program. If not, see <http://www.gnu.org/licenses/>. * */ package org.ourgrid.peer.business.controller.accounting; import java.util.List; import java.util.Map; import org.ourgrid.common.statistics.beans.peer.GridProcess; /** * Receives associations of providers and <code> ReplicaAccounting </code> * and calculates the attributes' balances for each provider. */ public class AccountingEvaluator { private final Map<String, List<GridProcess>> accountings; private final String localPeerDN; private Map<String, Double> dataBalances; private Map<String, Double> cpuBalances; /** * @param accountings */ public AccountingEvaluator(Map<String , List<GridProcess>> accountings, String localPeerDN) { this.accountings = accountings; this.localPeerDN = localPeerDN; } /** * Evaluates the data and cpu balances according to replica accountings */ public void evaluate() { AccountingStrategy cpuAccountingStrategy = null; if (isThereAnyLocalAccounting()) { cpuAccountingStrategy = new RelativeCPUAccountingStrategy(localPeerDN); } else { cpuAccountingStrategy = new RemoteCPUAccountingStrategy(); } dataBalances = new DataAccountingStrategy().evaluate(accountings); cpuBalances = cpuAccountingStrategy.evaluate(accountings); } /** * @param providerDN * @return The data balance of the provider */ public Double getData(String providerDN) { return dataBalances.get(providerDN); } /** * @param providerDN * @return The cpu balance of the provider */ public Double getCPU(String providerDN) { return cpuBalances.get(providerDN); } /** * @return */ private boolean isThereAnyLocalAccounting() { for (String providerDN : accountings.keySet()) { if (localPeerDN.equals(providerDN)) { return true; } } return false; } }