/*
* $Id: CaseCodeManager.java,v 1.4 2007/06/07 10:14:09 eiki Exp $
* Created on Oct 19, 2004
*
* Copyright (C) 2004 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.block.process.business;
import java.util.HashMap;
import java.util.Map;
import com.idega.block.process.data.CaseCode;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.repository.data.Instantiator;
import com.idega.repository.data.Singleton;
import com.idega.repository.data.SingletonRepository;
/**
*
* Last modified: $Date: 2007/06/07 10:14:09 $ by $Author: eiki $
*
* @author <a href="mailto:thomas@idega.com">thomas</a>
* @version $Revision: 1.4 $
*/
public class CaseCodeManager implements Singleton{
private Map caseCodeBusinessMap = null;
private static Instantiator instantiator = new Instantiator() { public Object getInstance() { return new CaseCodeManager();}};
public static CaseCodeManager getInstance() {
return (CaseCodeManager) SingletonRepository.getRepository().getInstance(CaseCodeManager.class,instantiator);
}
public CaseBusiness getCaseBusinessOrDefault(CaseCode caseCode, IWApplicationContext iwac) throws IBOLookupException {
Class businessClass = getBusinessClass(caseCode);
if (businessClass == null) {
businessClass = CaseBusiness.class;
}
return getBusiness(businessClass, iwac);
}
public CaseBusiness getCaseBusiness(CaseCode caseCode, IWApplicationContext iwac) throws IBOLookupException {
Class businessClass = getBusinessClass(caseCode);
if (businessClass == null) {
throw new IBOLookupException("[CaseCodeManager]: An entry for case code "+ caseCode.getCode() +" could not be found");
}
return getBusiness(businessClass, iwac);
}
public void addCaseBusinessForCode(CaseCode caseCode, Class caseBusiness) {
addCaseBusinessForCode(caseCode.getCode(), caseBusiness);
}
public void addCaseBusinessForCode(String code, Class caseBusiness) {
getCaseCodeBusinessMap().put(code, caseBusiness);
}
private CaseBusiness getBusiness(Class serviceClass, IWApplicationContext iwac) throws IBOLookupException {
return (CaseBusiness) IBOLookup.getServiceInstance(iwac, serviceClass);
}
private Class getBusinessClass(CaseCode caseCode) {
String code = caseCode.getCode();
return (Class) getCaseCodeBusinessMap().get(code);
}
private Map getCaseCodeBusinessMap() {
if (this.caseCodeBusinessMap == null) {
this.caseCodeBusinessMap = new HashMap();
}
return this.caseCodeBusinessMap;
}
}