protected int launchTIBCOBinary(File binary, List<File> tras, ArrayList<String> arguments, File workingDir, String errorMsg, boolean fork, boolean synchronous) throws IOException, MojoExecutionException {
		Integer result = 0;
		
		if (tras == null) { // no value specified as Mojo parameter, we use the .tra in the same directory as the binary
			String traPathFileName = binary.getAbsolutePath();
			traPathFileName = FilenameUtils.removeExtension(traPathFileName);
			traPathFileName += ".tra";
			tras = new ArrayList<File>();
			tras.add(new File(traPathFileName));
		}

		HashMap<File, File> trasMap = new HashMap<File, File>();
		for (File tra : tras) {
			// copy of ".tra" file in the working directory
			File tmpTRAFile = new File(directory, tra.getName());
			trasMap.put(tra, tmpTRAFile);
			copyFile(tra, tmpTRAFile);
		}

		for (File tra : trasMap.keySet()) {
			if (trasMap.containsKey(tibcoDesignerTRAPath)
					&& ((tibcoBuildEARUseDesignerTRA && tra == tibcoBuildEARTRAPath) || (tibcoBuildLibraryUseDesignerTRA && tra == tibcoBuildLibraryTRAPath))) {
				if (tras.size() > 1) {
					ReplaceRegExp replaceRegExp = new ReplaceRegExp();
					replaceRegExp.setFile(trasMap.get(tra));
					replaceRegExp.setMatch("tibco.include.tra (.*/designer.tra)");
					replaceRegExp.setReplace("tibco.include.tra " + trasMap.get(tibcoDesignerTRAPath).toString().replace('\\', '/'));
					replaceRegExp.setByLine(true);

					replaceRegExp.execute();
				}
			}

			if (tra == tibcoBuildEARTRAPath ||
				tra == tibcoDesignerTRAPath ||
				tra == tibcoBWEngineTRAPath) { // FIXME: should check more properly
				// append user.home at the end to force the use of custom Designer5.prefs
				PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(trasMap.get(tra), true)));
				out.println("");
				out.println("java.property.user.home=" + directory.getAbsolutePath().replace("\\", "/"));
				out.close();
			}
		}

		CommandLine cmdLine = new CommandLine(binary);

		for (String argument : arguments) {
			cmdLine.addArgument(argument);
		}
		getLog().debug("launchTIBCOBinary command line : " + cmdLine.toString());
		getLog().debug("working dir : " + workingDir);
		
		DefaultExecutor executor = new DefaultExecutor();
		executor.setWorkingDirectory(workingDir);
		
		if (timeOut > 0) {
			ExecuteWatchdog watchdog = new ExecuteWatchdog(timeOut * 1000);
			executor.setWatchdog(watchdog);
		}

		executor.setProcessDestroyer(new ShutdownHookProcessDestroyer());
		
		ByteArrayOutputStream stdOutAndErr = new ByteArrayOutputStream();
		executor.setStreamHandler(new PumpStreamHandler(stdOutAndErr));

		if (fork) {
			CommandLauncher commandLauncher = CommandLauncherFactory.createVMLauncher();
			commandLauncher.exec(cmdLine, null, workingDir);
		} else {
			try {
				if (synchronous) {
					result = executor.execute(cmdLine);
				} else {
					executor.execute(cmdLine, new DefaultExecuteResultHandler());					
				}
			} catch (ExecuteException e) {
				// TODO : gérer erreurs des exécutables (éventuellement parser les erreurs classiques)
				getLog().info(cmdLine.toString());
				getLog().info(stdOutAndErr.toString());
				getLog().info(result.toString());
				throw new MojoExecutionException(errorMsg, e);
			} catch (IOException e) {
				throw new MojoExecutionException(e.getMessage(), e);
			}
		}

		return result;
	}
protected int launchTIBCOBinary(File binary, List<File> tras, ArrayList<String> arguments, File workingDir, String errorMsg, boolean fork, boolean synchronous) throws IOException, MojoExecutionException {
		Integer result = 0;
		
		if (tras == null) { 
			String traPathFileName = binary.getAbsolutePath();
			traPathFileName = FilenameUtils.removeExtension(traPathFileName);
			traPathFileName += ".tra";
			tras = new ArrayList<File>();
			tras.add(new File(traPathFileName));
		}

		HashMap<File, File> trasMap = new HashMap<File, File>();
		for (File tra : tras) {
			
			File tmpTRAFile = new File(directory, tra.getName());
			trasMap.put(tra, tmpTRAFile);
			copyFile(tra, tmpTRAFile);
		}

		for (File tra : trasMap.keySet()) {
			if (trasMap.containsKey(tibcoDesignerTRAPath)
					&& ((tibcoBuildEARUseDesignerTRA && tra == tibcoBuildEARTRAPath) || (tibcoBuildLibraryUseDesignerTRA && tra == tibcoBuildLibraryTRAPath))) {
				if (tras.size() > 1) {
					ReplaceRegExp replaceRegExp = new ReplaceRegExp();
					replaceRegExp.setFile(trasMap.get(tra));
					replaceRegExp.setMatch("tibco.include.tra (.*/designer.tra)");
					replaceRegExp.setReplace("tibco.include.tra " + trasMap.get(tibcoDesignerTRAPath).toString().replace('\\', '/'));
					replaceRegExp.setByLine(true);

					replaceRegExp.execute();
				}
			}

			if (tra == tibcoBuildEARTRAPath ||
				tra == tibcoDesignerTRAPath ||
				tra == tibcoBWEngineTRAPath) { 
				
				PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(trasMap.get(tra), true)));
				out.println("");
				out.println("java.property.user.home=" + directory.getAbsolutePath().replace("\\", "/"));
				out.close();
			}
		}

		CommandLine cmdLine = new CommandLine(binary);

		for (String argument : arguments) {
			cmdLine.addArgument(argument);
		}
		getLog().debug("launchTIBCOBinary command line : " + cmdLine.toString());
		getLog().debug("working dir : " + workingDir);
		
		DefaultExecutor executor = new DefaultExecutor();
		executor.setWorkingDirectory(workingDir);
		
		if (timeOut > 0) {
			ExecuteWatchdog watchdog = new ExecuteWatchdog(timeOut * 1000);
			executor.setWatchdog(watchdog);
		}

		executor.setProcessDestroyer(new ShutdownHookProcessDestroyer());
		
		ByteArrayOutputStream stdOutAndErr = new ByteArrayOutputStream();
		executor.setStreamHandler(new PumpStreamHandler(stdOutAndErr));

		if (fork) {
			CommandLauncher commandLauncher = CommandLauncherFactory.createVMLauncher();
			commandLauncher.exec(cmdLine, null, workingDir);
		} else {
			try {
				if (synchronous) {
					result = executor.execute(cmdLine);
				} else {
					executor.execute(cmdLine, new DefaultExecuteResultHandler());					
				}
			} catch (ExecuteException e) {
				
				getLog().info(cmdLine.toString());
				getLog().info(stdOutAndErr.toString());
				getLog().info(result.toString());
				throw new MojoExecutionException(errorMsg, e);
			} catch (IOException e) {
				throw new MojoExecutionException(e.getMessage(), e);
			}
		}

		return result;
	}
protected int launchTIBCOBinary ( File binary , List < File > tras , ArrayList < String > arguments , File workingDir , String errorMsg , boolean fork , boolean synchronous ) throws IOException , MojoExecutionException { Integer result = 0 ; if ( tras == null ) { // no value specified as Mojo parameter, we use the .tra in the same directory as the binary String traPathFileName = binary . getAbsolutePath ( ) ; traPathFileName = FilenameUtils . removeExtension ( traPathFileName ) ; traPathFileName += ".tra" ; tras = new ArrayList < File > ( ) ; tras . add ( new File ( traPathFileName ) ) ; } HashMap < File , File > trasMap = new HashMap < File , File > ( ) ; for ( File tra : tras ) { // copy of ".tra" file in the working directory File tmpTRAFile = new File ( directory , tra . getName ( ) ) ; trasMap . put ( tra , tmpTRAFile ) ; copyFile ( tra , tmpTRAFile ) ; } for ( File tra : trasMap . keySet ( ) ) { if ( trasMap . containsKey ( tibcoDesignerTRAPath ) && ( ( tibcoBuildEARUseDesignerTRA && tra == tibcoBuildEARTRAPath ) || ( tibcoBuildLibraryUseDesignerTRA && tra == tibcoBuildLibraryTRAPath ) ) ) { if ( tras . size ( ) > 1 ) { ReplaceRegExp replaceRegExp = new ReplaceRegExp ( ) ; replaceRegExp . setFile ( trasMap . get ( tra ) ) ; replaceRegExp . setMatch ( "tibco.include.tra (.*/designer.tra)" ) ; replaceRegExp . setReplace ( "tibco.include.tra " + trasMap . get ( tibcoDesignerTRAPath ) . toString ( ) . replace ( ' ' , ' ' ) ) ; replaceRegExp . setByLine ( true ) ; replaceRegExp . execute ( ) ; } } if ( tra == tibcoBuildEARTRAPath || tra == tibcoDesignerTRAPath || tra == tibcoBWEngineTRAPath ) { // FIXME: should check more properly // append user.home at the end to force the use of custom Designer5.prefs PrintWriter out = new PrintWriter ( new BufferedWriter ( new FileWriter ( trasMap . get ( tra ) , true ) ) ) ; out . println ( "" ) ; out . println ( "java.property.user.home=" + directory . getAbsolutePath ( ) . replace ( "\\" , "/" ) ) ; out . close ( ) ; } } CommandLine cmdLine = new CommandLine ( binary ) ; for ( String argument : arguments ) { cmdLine . addArgument ( argument ) ; } getLog ( ) . debug ( "launchTIBCOBinary command line : " + cmdLine . toString ( ) ) ; getLog ( ) . debug ( "working dir : " + workingDir ) ; DefaultExecutor executor = new DefaultExecutor ( ) ; executor . setWorkingDirectory ( workingDir ) ; if ( timeOut > 0 ) { ExecuteWatchdog watchdog = new ExecuteWatchdog ( timeOut * 1000 ) ; executor . setWatchdog ( watchdog ) ; } executor . setProcessDestroyer ( new ShutdownHookProcessDestroyer ( ) ) ; ByteArrayOutputStream stdOutAndErr = new ByteArrayOutputStream ( ) ; executor . setStreamHandler ( new PumpStreamHandler ( stdOutAndErr ) ) ; if ( fork ) { CommandLauncher commandLauncher = CommandLauncherFactory . createVMLauncher ( ) ; commandLauncher . exec ( cmdLine , null , workingDir ) ; } else { try { if ( synchronous ) { result = executor . execute ( cmdLine ) ; } else { executor . execute ( cmdLine , new DefaultExecuteResultHandler ( ) ) ; } } catch ( ExecuteException e ) { // TODO : gérer erreurs des exécutables (éventuellement parser les erreurs classiques) getLog ( ) . info ( cmdLine . toString ( ) ) ; getLog ( ) . info ( stdOutAndErr . toString ( ) ) ; getLog ( ) . info ( result . toString ( ) ) ; throw new MojoExecutionException ( errorMsg , e ) ; } catch ( IOException e ) { throw new MojoExecutionException ( e . getMessage ( ) , e ) ; } } return result ; }
This calls a TIBCO binary.

@param binary, the TIBCO binary file to execute
@param tras, the TRA files associated with the TIBCO binary
@param arguments, command-line arguments
@param workingDir, working directory from where the binary is launched
@param errorMsg, error message to display in case of a failure
@param fork, if true the chiild process will be detached from the caller

@throws IOException
@throws MojoExecutionException
This calls a TIBCO binary .