package org.objectstyle.wolips.eogenerator.core.runner; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.text.ParseException; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.objectstyle.wolips.eogenerator.core.model.CommandLineTokenizer; import org.objectstyle.wolips.eogenerator.core.model.EOGeneratorModel; import org.objectstyle.wolips.eogenerator.core.model.IEOGeneratorRunner; public class ExternalEOGeneratorRunner implements IEOGeneratorRunner { public boolean generate(EOGeneratorModel eogenModel, StringBuffer results, IProgressMonitor monitor) throws ParseException, IOException, InterruptedException { String eogenFileContents = eogenModel.writeToString(eogenModel.getProjectPath().toFile()); List<String> commandsList = new LinkedList<String>(); CommandLineTokenizer tokenizer = new CommandLineTokenizer(eogenFileContents); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); if ("-extension".equals(token)) { tokenizer.nextToken(); } else { commandsList.add(token); } } String[] tokens = commandsList.toArray(new String[commandsList.size()]); if (!new File(eogenModel.getEOGeneratorPath()).exists()) { throw new FileNotFoundException("You have either not set the path to your EOGenerator executable, or the current path is incorrect."); } IPath projectPath = eogenModel.getProjectPath(); Process process = Runtime.getRuntime().exec(tokens, null, projectPath.toFile()); InputStream inputstream = process.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); int outputLines = 0; String line; while ((line = bufferedreader.readLine()) != null) { System.out.println("ExternalEOGeneratorRunner.generate: " + line); results.append(line); results.append('\n'); outputLines++; } int errorCode = process.waitFor(); if (errorCode != 0) { throw new RuntimeException("EOGenerator failed with code #" + errorCode + "."); } return false; } }