All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prerna.util.MvnReactor Maven / Gradle / Ivy

The newest version!
package prerna.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.maven.shared.invoker.DefaultInvocationRequest;
import org.apache.maven.shared.invoker.DefaultInvoker;
import org.apache.maven.shared.invoker.InvocationOutputHandler;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.InvocationResult;
import org.apache.maven.shared.invoker.Invoker;
import org.apache.maven.shared.invoker.MavenInvocationException;

import prerna.reactor.AbstractReactor;
import prerna.reactor.ReactorFactory;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.Constants;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class MvnReactor extends AbstractReactor
{
	
	private static final Logger classLogger = LogManager.getLogger(MvnReactor.class);

	public MvnReactor() {
		// need repository
		// Oauth
		// File name
		// Content
		this.keysToGet = new String[]{ReactorKeysEnum.MVN_GOALS.getKey()};
		this.keyRequired = new int[] {0};
	}

	
	
	public NounMetadata execute()
	{
		organizeKeys();
		// try to find if the system property is set or RDF_MAP has it
		// JAVA_HOME
		// MVN_HOME
		// if not throw error
		String javaHome = System.getProperty(Settings.JAVA_HOME);
		if(javaHome == null)
			javaHome = DIHelper.getInstance().getProperty(Settings.JAVA_HOME);
		if(javaHome == null)
			return NounMetadata.getErrorNounMessage("JAVA_HOME is not set, set as environment / RDF_MAP", null);		
		System.setProperty("JAVA_HOME",  javaHome);

		
		String mvnHome = System.getProperty(Settings.MVN_HOME);
		if(mvnHome == null)
			mvnHome = DIHelper.getInstance().getProperty(Settings.MVN_HOME);
		if(mvnHome == null)
			return NounMetadata.getErrorNounMessage("MVN_HOME is not set, set as environment / RDF_MAP", null);

		String workingDir = this.insight.getCmdUtil().getWorkingDir();
		
		// classes dir
		String classesDir = workingDir.substring(0, workingDir.indexOf("app_root") + "app_root".length()) + File.separator + "target";
		
		InvocationRequest request = new DefaultInvocationRequest();
        request.setMavenOpts("-DclassesDir=" + classesDir);

		InvocationOutputHandler outputHandler = new InvocationOutputHandler(){
			
		File file = new File(workingDir + File.separator + "temp.mvn.output");
		FileWriter fw = null;
		
        @Override
        public void consumeLine(String line) throws IOException {

        	if(fw == null)
        	{
        		System.err.println("File writer is null ");
        		fw = new FileWriter(file);
        	}
        	fw.write(line + "\n");
        	fw.flush();
        	
            if (line.contains(" must be a directory")) {
                throw new IOException("Caught expected MojoExecutionException - " + line);
            }
        }
	    };
		Invoker invoker = new DefaultInvoker();		
		invoker.setOutputHandler(outputHandler);
		invoker.setMavenHome(new File(Utility.normalizePath(mvnHome)));
		
		// path to maven executable		
		String pomFileName = workingDir + File.separator + "pom.xml";
		File pomFile = new File(pomFileName);
		if(!pomFile.exists())
			return NounMetadata.getErrorNounMessage("Not a maven project, please navigate to the dir where you have pom.xml", null);
		request.setPomFile(pomFile);
		List  goals = new ArrayList();
		goals.add("clean");
		goals.add("compile");
		
		if(keyValue.containsKey(keysToGet[0]))
		{
			String inputGoals = (String)keyValue.get(keysToGet[0]);
			String [] goalTokens = inputGoals.split(" ");
			
			goals = Arrays.asList(goalTokens);
		}
		request.setGoals( goals);
				 
		try {
			InvocationResult result;
			result = invoker.execute( request );
			if ( result.getExitCode() != 0 )
			{
				String errorMessage = composeErrorMessage(new File(workingDir + File.separator + "temp.mvn.output"));
			    return new NounMetadata(errorMessage,PixelDataType.CONST_STRING);
			}		
		} catch (MavenInvocationException e) {
			// TODO Auto-generated catch block
			classLogger.error(Constants.STACKTRACE, e);
		}
		
		return new NounMetadata("Compile successful", PixelDataType.CONST_STRING);
		 
	}	
	
	
	public String composeErrorMessage(File file)
	{
		StringBuffer output = new StringBuffer();
		try (BufferedReader br = new BufferedReader(new FileReader(file))){
			
			String data = null;
			
			while((data = br.readLine() ) != null)
				output.append(data).append("\n");
			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			classLogger.error(Constants.STACKTRACE, e);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			classLogger.error(Constants.STACKTRACE, e);
		}
		
		return output.toString();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy