package husacct.control.task.help;
import husacct.common.Resource;
import husacct.control.task.MainController;
import java.awt.Component;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;
import org.apache.log4j.Logger;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class HelpTreeModelLoader {
private Logger logger = Logger.getLogger(MainController.class);
List<HelpTreeNode> HelpTreeNodeList = new ArrayList<HelpTreeNode>();
public Document getXmlDocument() {
String manualXmlPath = Resource.HELP_PATH + "manuals.xml";
logger.debug(manualXmlPath);
Reader reader = new InputStreamReader(Resource.getStream(manualXmlPath));
SAXBuilder sax = new SAXBuilder();
Document doc = new Document();
try {
doc = sax.build(reader);
}
catch (Exception ex) {
logger.error(ex.getMessage());
}
return doc;
}
public DefaultMutableTreeNode getTreeModel() {
Element root = getXmlDocument().getRootElement();
DefaultMutableTreeNode parent = new DefaultMutableTreeNode(root.getName());
for(Element child : root.getChildren()) {
HelpTreeNode HelpNode = new HelpTreeNode(child.getAttributeValue("filename"), child.getAttributeValue("viewname"), child.getName(), "html");
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(HelpNode);
if(HelpNode.getParent() == null) {
parent.add(childNode);
}
else {
HelpTreeNode parentHelpNode = new HelpTreeNode(HelpNode.getParent(),HelpNode.getParent(),HelpNode.getParent(), "folder");
DefaultMutableTreeNode parentNode = findNode(parent, parentHelpNode);
parentNode.add(childNode);
parent.add(parentNode);
}
HelpTreeNodeList.add(HelpNode);
}
return parent;
}
private DefaultMutableTreeNode findNode(DefaultMutableTreeNode root, HelpTreeNode node) {
List<DefaultMutableTreeNode> Children = Collections.list(root.children());
for(int i = 0; i < Children.size(); i++) {
if(((HelpTreeNode)Children.get(i).getUserObject()).getFilename().equals(node.getFilename())) {
return Children.get(i);
}
}
return new DefaultMutableTreeNode(node);
}
public String getContent(InputStream stream) {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
String line;
String html = "";
try {
while((line = br.readLine()) != null) {
html+=line;
}
}
catch (Exception ex) {
}
html = setPath(html);
return html;
}
public String setPath(String html) {
while(html.contains("RESOURCE.GET")) {
int startIndex = html.indexOf("RESOURCE.GET");
int startFileNameIndex = startIndex += "RESOURCE.GET".length() + 1;
int endFileNameIndex = startFileNameIndex;
if(startIndex > -1) {
while(html.charAt(endFileNameIndex) != ')') {
endFileNameIndex++;
}
String filename = html.substring(startFileNameIndex, endFileNameIndex);
URL pathname = Resource.get(Resource.HELP_IMAGE_PATH + filename);
html = html.replace("RESOURCE.GET(" + filename + ")", pathname+"");
}
else {
break;
}
}
return html;
}
public String getContent(Component component) {
for(HelpTreeNode htn : HelpTreeNodeList) {
if(htn.getComponentName().equals(component.getClass().getName().substring(component.getClass().getName().lastIndexOf('.')+1))) {
String HelpPagePath = Resource.HELP_PAGES_PATH + htn.getFilename();
InputStream stream = Resource.getStream(HelpPagePath);
String html = getContent(stream);
if(html.equals("") || html==null){
HelpPagePath = Resource.HELP_PAGES_PATH + "home.html";
stream = Resource.getStream(HelpPagePath);
return getContent(stream);
}
else {
return html;
}
}
}
String HelpPagePath = Resource.HELP_PAGES_PATH + "home.html";
InputStream stream = Resource.getStream(HelpPagePath);
return getContent(stream);
}
}