/* * Created on Jun 21, 2003 * * To change this generated comment go to * Window>Preferences>Java>Code Generation>Code Template */ package com.idega.development.presentation.comp; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.idega.core.component.data.BundleComponent; import com.idega.core.component.data.ICObject; import com.idega.core.component.data.ICObjectType; import com.idega.core.component.data.ICObjectTypeHome; import com.idega.data.IDOLookup; import com.idega.repository.data.Instantiator; import com.idega.repository.data.SingletonRepository; /** * <p>Title: BundleComponentFactory</p> * <p>Description: Factory class to provide BundleComponent object * given a object type identifier. * </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: idega Software</p> * @author aron * @version 1.0 */ public class BundleComponentFactory { static Instantiator instantiator = new Instantiator() { public Object getInstance() { return new BundleComponentFactory(); } public void unload() { lookup = null; } }; static Map lookup = null; private BundleComponentFactory(){ lookup = new HashMap(); createLookupTable(); } /** * Get a static instance of factory * @return instance of factory */ public static BundleComponentFactory getInstance(){ return (BundleComponentFactory) SingletonRepository.getRepository().getInstance(BundleComponentFactory.class, instantiator); } public BundleComponent getBundleComponent(String identifier)throws IllegalArgumentException{ if(getLookupTable().containsKey(identifier)) { return (BundleComponent) getLookupTable().get(identifier); } else { throw new IllegalArgumentException("Argument "+identifier+" not recognized"); } } public BundleComponent getBundleComponent(ICObject icobject)throws IllegalArgumentException{ return getBundleComponent(icobject.getObjectType()); } public void refreshCache() { lookup = new HashMap(); createLookupTable(); } private void createLookupTable(){ try { ICObjectTypeHome home = (ICObjectTypeHome) IDOLookup.getHome(ICObjectType.class); Collection allObjectTypes = home.findAll(); Iterator iter = allObjectTypes.iterator(); String type; while (iter.hasNext()) { type = (String) iter.next(); BundleComponent comp = home.findByPrimaryKey(type); lookup.put(type,comp); } } catch (Exception e) { createLookupTableOld(); e.printStackTrace(); } } private Map getLookupTable(){ if(lookup==null){ lookup = new HashMap(); createLookupTable(); } return lookup; } private void createLookupTableOld(){ BundleComponent comp = new IWBlockComponent(); lookup.put(comp.type(),comp); comp = new IWElementComponent(); lookup.put(comp.type(),comp); comp = new IWApplicationComponent(); lookup.put(comp.type(),comp); comp = new IWAppCompComponent(); lookup.put(comp.type(),comp); comp = new IWDataComponent(); lookup.put(comp.type(),comp); comp = new IWHomeComponent(); lookup.put(comp.type(),comp); comp = new IWHandlerComponent(); lookup.put(comp.type(),comp); comp = new IWSearchPluginComponent(); lookup.put(comp.type(),comp); } }