
cz.datalite.zk.javahelp.Help Maven / Gradle / Ivy
The newest version!
package cz.datalite.zk.javahelp;
import cz.datalite.zk.javahelp.event.SearchResultListListener;
import cz.datalite.zk.javahelp.event.TreeListener;
import java.net.URL;
import java.util.Enumeration;
import java.util.List;
import javax.help.HelpSet;
import javax.help.IndexItem;
import javax.help.IndexView;
import javax.help.NavigatorView;
import javax.help.SearchView;
import javax.help.ServletHelpBroker;
import javax.help.TOCItem;
import javax.help.TOCView;
import javax.swing.tree.DefaultMutableTreeNode;
import org.apache.log4j.Logger;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Tabbox;
import org.zkoss.zul.Tabpanel;
import org.zkoss.zul.Tabpanels;
import org.zkoss.zul.Tabs;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbar;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Window;
/**
* @author Nelson Cazonda
*
*/
@SuppressWarnings({ "unchecked", "serial" })
public class Help extends Window implements AfterCompose {
private static final Logger logger = Logger.getLogger(Help.class);
private final String HELP_SET_URL = "~./help/jhelpset.hs";
public static final String IMAGES_FOLDER = "~./javahelp/images/";
private Tabbox tbxNavigator;
Textbox txtSearch;
ServletHelpBroker helpBroker;
private Listbox lstSrchResults;
private Label lblNoResultsFound;
private ZkHelpSearcher searcher;
/**
* Draw the UI. Most of its controls are created dynamically because it
* depends on the helpset contents.
*/
public void initUI() {
try {
URL url = new URL("http",
Executions.getCurrent().getLocalAddr(),
Executions.getCurrent().getServerPort(),
Executions.getCurrent().getContextPath() + "/help/jhelpset.hs");
logger.debug("Opening help at: " + url.toString());
HelpSet helpSet = new HelpSet(null, url);
helpBroker = new ServletHelpBroker();
helpBroker.setHelpSet(helpSet);
Tabs tbViews = new Tabs();
Tabpanels tpViews = new Tabpanels();
tpViews.setHeight("100%");
// each NavigatorView will result in a tab and (obviously) a tab
// panel.
for (NavigatorView view : helpSet.getNavigatorViews()) {
Tab tab = new Tab();
tab.setId(view.getName());
tab.setImage(IMAGES_FOLDER + view.getClass().getName()
+ ".gif");
tbViews.appendChild(tab);
Tabpanel tabpanel = new Tabpanel();
if (view instanceof TOCView || view instanceof IndexView) {
tabpanel.appendChild(drawTree(view));
} else {// SearchView
Toolbar srchToolbar = new Toolbar();
EventListener searchEvent = new EventListener() {
public void onEvent(Event arg0)
throws Exception {
handleListClick(txtSearch.getValue());
}
};
// the search textbox
txtSearch = new Textbox();
srchToolbar.appendChild(txtSearch);
txtSearch.addEventListener(Events.ON_OK, searchEvent);
// the search button
Toolbarbutton btnSearch = new Toolbarbutton();
btnSearch.setImage(IMAGES_FOLDER + "javax.help.SearchView.gif");
btnSearch.addEventListener(Events.ON_CLICK, searchEvent);
srchToolbar.appendChild(btnSearch);
// the list box that will display the search results
lstSrchResults = new Listbox();
lstSrchResults.setVisible(false);
lstSrchResults.setWidth("100%");
lstSrchResults.addEventListener(Events.ON_SELECT,
new SearchResultListListener());
srchToolbar.appendChild(lstSrchResults);
srchToolbar.setWidth("100%");
lblNoResultsFound = new Label("Dotazu neodpovídá žádný výsledek.");
lblNoResultsFound.setVisible(false);
tabpanel.appendChild(srchToolbar);
tabpanel.appendChild(lblNoResultsFound);
searcher = new ZkHelpSearcher((SearchView) view);
}
tpViews.appendChild(tabpanel);
}
tbxNavigator.appendChild(tbViews);
tbxNavigator.appendChild(tpViews);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Handles the click event raised by the search toolbar button
*
* @param query
* the query string entered on the search textbox
*/
private void handleListClick(String query) {
if (query != null && query.trim().length() > 0) {
List result = searcher.search(query);
lstSrchResults.setVisible(result.size() > 0);
lblNoResultsFound.setVisible(result.size() == 0);
lstSrchResults.getItems().clear();
for (Listitem item : result) {
lstSrchResults.appendChild(item);
}
} else {
Messagebox.show("Please enter the string to search for.");
}
}
/**
* Converts the JavaJelp TOCView or IndexView into a ZK Tree component
*
* @param view
* @return
*/
private Tree drawTree(Object view) {
DefaultMutableTreeNode topNode = null;
if (view instanceof TOCView) {
topNode = ((TOCView) view).getDataAsTree();
} else if (view instanceof IndexView) {
topNode = ((IndexView) view).getDataAsTree();
} else {
return null;
}
Enumeration treeEnum = topNode.children();
Tree tree = new Tree();
Treechildren tc = new Treechildren();
while (treeEnum.hasMoreElements()) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode) treeEnum
.nextElement();
tc.appendChild(addNode(n));
}
tree.appendChild(tc);
tree.addEventListener(Events.ON_SELECT, new TreeListener());
if (tree.getFirstChild() != null && tree.getFirstChild().getFirstChild() != null)
((Treeitem) ((Treechildren) tree.getFirstChild()).getFirstChild())
.setOpen(true);
tree.setZclass("z-dottree");
return tree;
}
/**
* used by drawTree to recursively create tree items
*
* @param node a node of the TOC or Index JavaHelp tree
* @return the corresponding ZK Treeitem
*/
private Treeitem addNode(DefaultMutableTreeNode node) {
Treeitem parent = null;
Object item = node.getUserObject();
if (item instanceof TOCItem) {
TOCItem ti = (TOCItem) item;
parent = new Treeitem(ti.getName(), item);
} else if (item instanceof IndexItem) {
parent = new Treeitem(((IndexItem) item).getName(), item);
}
parent.setOpen(false);
Treechildren treeChildren = null;
Enumeration e = node.children();
if (e.hasMoreElements()) {
treeChildren = new Treechildren();
}
while (e.hasMoreElements()) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) e
.nextElement();
treeChildren.appendChild(addNode(child));
}
if (treeChildren != null) {
parent.setImage(IMAGES_FOLDER + "chapTopic.gif");
parent.appendChild(treeChildren);
} else {
parent.setImage(IMAGES_FOLDER + "topic.gif");
}
return parent;
}
public void afterCompose() {
Components.wireVariables(this, this);
Components.addForwards(this, this);
initUI();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy