/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * 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. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.accounts.financial.util.helpers; import java.util.HashMap; import java.util.Map; import org.mifos.accounts.financial.business.COABO; import org.mifos.accounts.financial.exceptions.FinancialException; import org.mifos.accounts.financial.exceptions.FinancialExceptionConstants; /** * TODO: make this into, for instance, a Spring-managed bean instead of a static * class. This would make testing cleaner. */ public class ChartOfAccountsCache { /** Keys are general ledger account codes, like "10000". */ private static Map<String, COABO> cache = new HashMap<String, COABO>(); public static boolean isInitialized() { return !cache.isEmpty(); } public static void add(COABO coa) { if (coa == null) { throw new RuntimeException("Got a null coa reference"); } if (cache.get(coa.getGlCode()) == null) { cache.put(coa.getGlCode(), coa); } else { throw new RuntimeException("ChartOfAcctionsCache already contains" + " an account with gl code: " + coa.getGlCode() + ". name is: " + coa.getAccountName() + ", id is: " + coa.getAccountId()); } } /** * Required for unit tests. */ protected static COABO remove(COABO key) { return cache.remove(key.getGlCode()); } public static COABO get(String glCode) throws FinancialException { COABO glAccount = cache.get(glCode); if (glAccount == null) { throw new FinancialException(FinancialExceptionConstants.ACCOUNT_NOT_FOUND, new Object[] { glCode }); } return glAccount; } public static void clear() { cache.clear(); } }