<%@ page import = "java.io.*" %>
<%
	// Change path to AlignACE here
	String pathToAlignACE = "/opt/app/AlignAce/";
	String alignACE = "AlignACE";
	if (System.getProperty("os.name").startsWith("Windows")){
		pathToAlignACE = pathToAlignACE.replace('/', '\\');
		alignACE += ".exe";
	}
	
	// Change to true if you want to enable user validation
	boolean validateUsers = false;
	
	String userName = request.getParameter("userName");
	String passwd = request.getParameter("passwd");			
	String data = request.getParameter("data");
   	String numcols = request.getParameter("numcols");
   	String expect = request.getParameter("expect");
   	String minpass = request.getParameter("minpass");
   	String seed = request.getParameter("seed");
   	String gcback = request.getParameter("gcback");
   	String undersample = request.getParameter("undersample");
   	String oversample = request.getParameter("oversample");
	
	// See if we have data
	if (data == null || numcols == null || expect == null || minpass == null ||
		seed == null || gcback == null || undersample == null || 
		oversample == null) {
		out.println("Error: missing data or parameter(s). Close this window and try again.");
		return;
	}
	
	if (validateUsers) {
		// Implement your user validation scheme here 
		String siteUserName = "yourSiteUserName";
		String sitePasswd = "yourSitePassword"; 
		if (userName == null || passwd == null) {
			out.println("Error: missing user name and/or password.");
		        return;
		}
		if (!userName.equals(siteUserName) || !passwd.equals(sitePasswd)) {
			out.println("Error: user validation failed. Close this window and try again." + 
			"\nEnter your username and password into the corresponding fields of the dialog." + 
			"\nIf you forgot your username or password, ask your web site administrator.");
			return;
		}
	}
		
	String fileName = pathToAlignACE + "tmp" + session.getId() + ".seq";
	String cmd = pathToAlignACE + alignACE + " -i " + fileName + 
				 " -numcols " + numcols +
				 " -expect " + expect +
				 " -minpass " + minpass +
				 " -seed " + seed +
				 " -gcback " + gcback +
				 " -undersample " + undersample +
				 " -oversample " + oversample;
				 
	int exitValue = 0;
	try { 
	   	// Open a temporary file
      		File file = new File(fileName);
      
	   	// Create an output writer that will write to that file.
      		FileWriter fw = new FileWriter(file);
      		fw.write(data);
      		fw.close();
      
		Process p = Runtime.getRuntime().exec(cmd);
		BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
      		String currentLine = null;
		while ( (currentLine = in.readLine()) != null) {
			out.println(currentLine);
		}
		BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
		while ( (currentLine = err.readLine()) != null) {
			out.println(currentLine);
		}
		in.close();
		err.close();
		exitValue = p.waitFor();
		if (exitValue != 0) {
			out.println("Error: exit value is " + exitValue);
		}	
		file.delete();
        } catch (WriteAbortedException wae) {
        	wae.printStackTrace(response.getWriter());
	} catch (IOException ioe) {
        	ioe.printStackTrace(response.getWriter());
	} catch (Exception e) {
        	e.printStackTrace(response.getWriter());
	}
 %>