/* Date: February 2, 2010
* Template: PluginScreenJavaTemplateGen.java.ftl
* generator: org.molgenis.generators.ui.PluginScreenJavaTemplateGen 3.3.2-testing
*
* THIS FILE IS A TEMPLATE. PLEASE EDIT :-)
*/
package plugins.ronline;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.ui.PluginModel;
import org.molgenis.framework.ui.ScreenController;
import org.molgenis.framework.ui.ScreenMessage;
import org.molgenis.framework.ui.ScreenModel;
import org.molgenis.util.Entity;
import org.molgenis.util.Tuple;
public class ROnline<E extends Entity> extends PluginModel<E>
{
private static final long serialVersionUID = -4016852670578378111L;
private ROnlineModel model = new ROnlineModel();
public ROnline(String name, ScreenController<?> parent)
{
super(name, parent);
}
public ROnlineModel getMyModel()
{
return model;
}
public ROnline(String name, ScreenModel parent)
{
super(name, parent.getController());
}
@Override
public String getCustomHtmlHeaders()
{
return "<script type=\"text/javascript\"><!--window.onload = document.onload(){id = document.getElementById('inputBox');id.focus() = TRUE;document.onkeydown(){if(window.event.keyCode==13){document.forms.${screen.name}.__action.value = 'execute';}}// --> </script>";
}
@Override
public String getCustomHtmlBodyOnLoad()
{
return "document.getElementById('inputBoxROnline').focus();";
}
@Override
public String getViewName()
{
return "ROnline";
}
@Override
public String getViewTemplate()
{
return "plugins/ronline/ROnline.ftl";
}
public void handleRequest(Database db, Tuple request)
{
if (request.getString("__action") != null)
{
try
{
if (request.getString("__action").equals("execute"))
{
String executeThis = request.getString("executeThis");
List<String> allRes = new ArrayList<String>();
allRes.addAll(this.model.getResults());
allRes.add("> " + executeThis);
if (!this.model.getRp().isRunning())
{
newRProcess(this.model.getTimeOut());
}
List<String> newRes = this.model.getRp().execute(executeThis);
allRes.addAll(newRes);
this.model.setResults(allRes);
}
else if (request.getString("__action").equals("executeMulti"))
{
String executeThis = request.getString("executeMulti");
List<String> executeMulti = new ArrayList<String>();
for (String s : executeThis.split("\\r?\\n"))
{
executeMulti.add(s.trim());
}
List<String> allRes = new ArrayList<String>();
allRes.addAll(this.model.getResults());
if (!this.model.getRp().isRunning())
{
newRProcess(this.model.getTimeOut());
}
List<String> newRes = this.model.getRp().executeMulti(executeMulti);
for (int i = 0; i < executeMulti.size(); i++)
{
allRes.add("> " + executeMulti.get(i));
allRes.add(newRes.get(i));
}
if (newRes.size() > executeMulti.size())
{
throw new Exception("More results than commands");
}
this.model.setResults(allRes);
}
else if (request.getString("__action").equals("reset"))
{
if (this.model.getRp().isRunning())
{
this.model.getRp().quit();
newRProcess(this.model.getTimeOut());
}
}
}
catch (Exception e)
{
e.printStackTrace();
this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false));
}
}
}
private void newRProcess(long timeOut) throws Exception
{
RProcess rp = new RProcess(timeOut);
new Thread(rp).start();
this.model.setRp(rp);
this.model.setResults(this.model.getRp().getStartupMessage());
}
@Override
public void reload(Database db)
{
if (this.model.getTimeOut() == null)
{
this.model.setTimeOut((long) 600);
}
try
{
if (this.model.getRp() == null || !this.model.getRp().isRunning())
{
newRProcess(this.model.getTimeOut());
}
}
catch (Exception e)
{
e.printStackTrace();
this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false));
}
}
}