package org.trianacode.http;
import org.thinginitself.http.HttpPeer;
import org.thinginitself.http.MimeType;
import org.thinginitself.http.Resource;
import org.thinginitself.http.target.TargetResource;
import org.thinginitself.http.target.UrlTarget;
import org.thinginitself.streamable.Streamable;
import org.trianacode.config.TrianaProperties;
import org.trianacode.taskgraph.Task;
import org.trianacode.taskgraph.tool.Tool;
import org.trianacode.taskgraph.tool.ToolListener;
import org.trianacode.taskgraph.tool.ToolResolver;
import org.trianacode.taskgraph.tool.Toolbox;
import java.io.IOException;
import java.util.List;
/**
* @author Andrew Harrison
* @version 1.0.0 Jul 20, 2010
*/
public class TrianaHttpServer extends TargetResource implements ToolListener {
private HttpPeer peer;
private ToolboxesResource toolboxesResource = new ToolboxesResource();
public TrianaHttpServer() {
super(PathController.getInstance().getRoot());
this.peer = new HttpPeer();
}
/**
* adds a task that can be invoked via HTML forms.
* Currently disabled
*
* @param path
* @param task
*/
public void addWebViewTask(String path, Task task) {
//peer.addTarget(new ResourceSpawn(path, task, peer));
}
public void start(ToolResolver toolResolver) throws IOException {
Output.registerTemplates(toolResolver.getProperties());
//getPathTree().addLocatable(new ExecutionTarget(toolResolver));
getPathTree().addLocatable(new Home(getPath().toString(), toolResolver));
getPathTree().addLocatable(toolboxesResource);
getPathTree().addLocatable(new UrlTarget(PathController.getInstance().getResourcesRoot(), getClass().getResource("/me.txt")));
peer.addTarget(this);
peer.open();
}
public void stop() throws IOException {
peer.close();
}
public HttpPeer getHTTPPeerInstance() {
return peer;
}
@Override
public void toolsAdded(List<Tool> tools) {
}
@Override
public void toolsRemoved(List<Tool> tools) {
}
@Override
public void toolAdded(Tool tool) {
}
@Override
public void toolRemoved(Tool tool) {
}
@Override
public void toolBoxAdded(Toolbox toolbox) {
toolboxesResource.toolboxAdded(toolbox);
}
@Override
public void toolBoxRemoved(Toolbox toolbox) {
toolboxesResource.toolboxRemoved(toolbox);
}
@Override
public void toolboxNameChanging(Toolbox toolbox, String newName) {
}
@Override
public void toolboxNameChanged(Toolbox toolbox, String newName) {
}
private static class Home extends Resource {
private ToolResolver resolver;
public Home(String path, ToolResolver resolver) {
super(path);
this.resolver = resolver;
}
public Streamable getStreamable(List<MimeType> mimes) {
TrianaRenderer r = new TrianaRenderer();
r.init(resolver.getProperties().getEngine(), getPath().toString());
return r.render(TrianaProperties.TRIANA_TEMPLATE_PROPERTY, "text/html");
}
}
}