/*
 * j-Algo - j-Algo is an algorithm visualization tool, especially useful for
 * students and lecturers of computer science. It is written in Java and platform
 * independent. j-Algo is developed with the help of Dresden University of
 * Technology.
 * 
 * Copyright (C) 2004-2005 j-Algo-Team, j-algo-development@lists.sourceforge.net
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 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 General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA
 */

/*
 * Created on Feb 15, 2006
 */
package org.jalgo.main.gui.components;

import java.awt.event.ActionListener;
import java.net.URL;
import java.util.List;

import javax.help.CSH;
import javax.help.HelpBroker;
import javax.help.HelpSet;
import javax.help.HelpSetException;

import org.jalgo.main.IModuleInfo;
import org.jalgo.main.JAlgoMain;
import org.jalgo.main.util.Messages;

/**
 * 
 * @author Matthias Schmidt
 */
public class HelpSystem {
	
	private List<IModuleInfo> knownModuleInfos; 

	public HelpSystem() {
		knownModuleInfos = JAlgoMain.getInstance().getKnownModuleInfos();
	}
	
	/**
	 * Retrieves an JavaHelp specific ActionListener which launches the JavaHelpDialog.
	 * @return an ActionListener 
	 */
	public ActionListener getJavaHelpActionListener() {
		
		//Initialise the HelpSet with the help data from JAlgoMain
		HelpSet mainHS = getHSByURL(Messages.getResourceURL("main", "Main_HelpSet"));
			
		//Merge the Module HelpSets
		URL path = null;
		
		for (IModuleInfo element : knownModuleInfos) {
			path = element.getHelpSetURL();
			if (path == null)
				System.out.println("HelpSetURL from " + element.getName() + " is null!");
			else mainHS.add(getHSByURL(path));	
		}	
		
		//Create a HelpBroker object
		HelpBroker hb = mainHS.createHelpBroker();
		
		return new CSH.DisplayHelpFromSource(hb);
	}	
	
	private HelpSet getHSByURL(URL path) {
		try {
			return new HelpSet(null, path);	
		} catch (HelpSetException ee) {
			//Say what the exception really is
			System.err.println("HelpSet " + ee.getMessage());
		}
		return null;
	}
}
