/* * $Id: SearchPluginManager.java,v 1.3.2.1 2007/01/12 19:33:01 idegaweb Exp $ Created on Jan 18, * 2005 * * Copyright (C) 2005 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. Use is subject to * license terms. */ package com.idega.core.search.business; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.ejb.FinderException; import com.idega.core.component.data.ICObject; import com.idega.core.component.data.ICObjectBMPBean; import com.idega.core.component.data.ICObjectHome; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.idegaweb.IWMainApplication; import com.idega.repository.data.Instantiator; import com.idega.repository.data.RefactorClassRegistry; import com.idega.repository.data.Singleton; import com.idega.repository.data.SingletonRepository; /** * * Last modified: $Date: 2007/01/12 19:33:01 $ by $Author: idegaweb $ * * @author <a href="mailto:eiki@idega.com">eiki </a> * @version $Revision: 1.3.2.1 $ */ public class SearchPluginManager implements Singleton { private static Instantiator instantiator = new Instantiator() { public Object getInstance() { return new SearchPluginManager();}}; protected Map searchPlugins; /** * This is a singleton class */ protected SearchPluginManager() { super(); this.searchPlugins = new HashMap(); } public static SearchPluginManager getInstance() { return (SearchPluginManager) SingletonRepository.getRepository().getInstance(SearchPluginManager.class,instantiator); } public Collection getAllSearchPluginsInitialized(IWMainApplication iwma) { try { ICObjectHome icoHome = (ICObjectHome) IDOLookup.getHome(ICObject.class); ICObject obj; Collection coll = icoHome.findAllByObjectType(ICObjectBMPBean.COMPONENT_TYPE_SEARCH_PLUGIN); if (coll != null && !coll.isEmpty()) { Iterator iter = coll.iterator(); while (iter.hasNext()) { obj = (ICObject) iter.next(); String className = obj.getClassName(); if (!this.searchPlugins.containsKey(className)) { SearchPlugin searchPlugin; try { searchPlugin = (SearchPlugin) RefactorClassRegistry.forName(className).newInstance(); boolean success = searchPlugin.initialize(iwma); if (success) { this.searchPlugins.put(className, searchPlugin); } else { //Todo use logger System.err.println("[SearchPluginManager] - Failed to initialize the search plugin: " + className); } } catch (Exception e) { e.printStackTrace(); System.err.println("[SearchPluginManager] - Failed to initialize the search plugin: " + className); } } } } } catch (IDOLookupException e) { e.printStackTrace(); } catch (FinderException e) { //no plugins //e.printStackTrace(); } return this.searchPlugins.values(); } /** * It is better if you register your plugin as an iw.searchplugin in your * bundle but you can also add it with this method. * * @param plugin */ public void addSearchPlugin(SearchPlugin plugin, IWMainApplication iwma) { String className = plugin.getClass().getName(); if (!this.searchPlugins.containsKey(className)) { boolean success = plugin.initialize(iwma); if (success) { this.searchPlugins.put(className,plugin); } else { //Todo use logger System.err.println("[SearchPluginManager] - Failed to initialize the search plugin: " + className); } } } }