package org.trianacode.http; import org.thinginitself.http.target.DirectoryTarget; import org.thinginitself.http.target.TargetResource; import org.trianacode.config.TrianaProperties; import org.trianacode.taskgraph.tool.FileToolbox; import org.trianacode.taskgraph.tool.Tool; import java.io.File; import java.net.URL; /** * @author Andrew Harrison * @version 1.0.0 Aug 11, 2010 */ public class ToolResource extends TargetResource { public ToolResource(String path, Tool tool) { super(path); if (!(tool.getToolBox() instanceof FileToolbox)) { throw new IllegalArgumentException("Can only be a resource for local file tools"); } ToolFileRenderer rend = new ToolFileRenderer(); rend.init(tool); String helpFile = tool.getToolName() + ".html"; URL url = ((FileToolbox) tool.getToolBox()).getClassLoader().getResource(helpFile); if (url != null) { File help = ((FileToolbox) tool.getToolBox()).getFile("help"); if (help != null) { getPathTree().addLocatable(new DirectoryTarget(PathController.getInstance().getToolPath(tool) + "help/", getRealHelpPath(help, tool))); } else { getPathTree().addLocatable(new RendererResource(PathController.getInstance().getToolPath(tool) + "help/" + tool.getToolName() + ".html", rend, TrianaProperties.NOHELP_TEMPLATE_PROPERTY)); } } else { getPathTree().addLocatable(new RendererResource(PathController.getInstance().getToolPath(tool) + "help/" + tool.getToolName() + ".html", rend, TrianaProperties.NOHELP_TEMPLATE_PROPERTY)); } getPathTree().addLocatable(new RendererResource(PathController.getInstance().getToolPath(tool), rend, TrianaProperties.TOOL_DESCRIPTION_TEMPLATE_PROPERTY)); getPathTree().addLocatable(new ToolWriterResource(PathController.getInstance().getToolPath(tool) + "definition.xml", tool)); } //todo private File getRealHelpPath(File help, Tool tool) { String pkg = tool.getToolPackage(); if (pkg.indexOf(".") > -1) { pkg = pkg.substring(pkg.indexOf(".") + 1); } else { return help; } pkg = pkg.replace('.', File.separatorChar); String ret = help.getAbsolutePath(); if (!ret.endsWith(File.separator)) { ret += File.separator; } ret += pkg; return new File(ret); } }