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

prerna.reactor.ClassMaker Maven / Gradle / Ivy

The newest version!
package prerna.reactor;

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

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

import javassist.CannotCompileException;
import javassist.ClassClassPath;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.CtNewMethod;
import javassist.NotFoundException;
import prerna.util.Constants;
import prerna.util.Utility;


public class ClassMaker {

	private static final Logger classLogger = LogManager.getLogger(ClassMaker.class);

	ClassPool pool = null;
	CtClass cc = null;
	boolean hasSuper = false;
	
	/**
	 * Generate the class
	 */
	public ClassMaker()
	{
		this("t" + Utility.getRandomString(12), "c" + Utility.getRandomString(12));
	}
	
	public ClassMaker(String packageName, String className)
	{
		pool = ClassPool.getDefault();
		pool.insertClassPath(new ClassClassPath(this.getClass())); 
		pool.insertClassPath(new ClassClassPath(prerna.util.Console.class)); 
		pool.importPackage("java.sql");
		pool.importPackage("java.lang");
		pool.importPackage("java.util");
		pool.importPackage("prerna.reactor");
		pool.importPackage("prerna.engine.api");
		pool.importPackage("prerna.util");
		pool.importPackage("org.apache.tinkerpop.gremlin.process.traversal");
		pool.importPackage("org.apache.tinkerpop.gremlin.structure");
		pool.importPackage("prerna.ds");
		//TODO: this one is for HeadersDataRow
		pool.importPackage("prerna.om");
		cc = pool.makeClass(packageName + ".c" + className); // the only reason I do this is if the user wants to do seomthing else
	}
	
	//sets the interface
	public void addInterface(String interfaceName)
	{
		try {
			CtClass[] interfaceVector = new CtClass[1];
			interfaceVector[0] = pool.getCtClass(interfaceName);
			cc.setInterfaces(interfaceVector);
		} catch (NotFoundException e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
	}
	
	// add a super class
	public void addSuper(String superClassName)
	{
		if(!hasSuper)
		{
			try {
				cc.setSuperclass(pool.getCtClass(superClassName));
			} catch (NotFoundException e) {
				classLogger.error(Constants.STACKTRACE, e);
			} catch (CannotCompileException e) {
				classLogger.error(Constants.STACKTRACE, e);
			}
			hasSuper = true;
		}
	}
	
	// add a method
	public void addMethod(String daMethod)
	{
		try {
			cc.addMethod(CtNewMethod.make(daMethod, cc));
		} catch (CannotCompileException e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
	}
	
	public void addField(String field) {
		try {
			cc.addField(CtField.make(field, cc));
		} catch (CannotCompileException e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
	}
	
	public void addImport(String importPackage) {
		pool.importPackage(importPackage);
	}
	
	// gets the class back
	public Class toClass()
	{
		try {
			return cc.toClass();
		} catch (CannotCompileException e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
		
		return null;
	}
	
	public void writeClass(String fileName)
	{
        try {
    		DataOutputStream out = new DataOutputStream(new FileOutputStream(fileName));
			cc.getClassFile().write(out);
		} catch (IOException e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy