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

prerna.reactor.insights.ReloadInsightClassesReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.insights;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import prerna.auth.User;
import prerna.auth.utils.SecurityProjectUtils;
import prerna.cluster.util.ClusterUtil;
import prerna.project.api.IProject;
import prerna.reactor.AbstractReactor;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.tcp.PayloadStruct;
import prerna.util.AssetUtility;
import prerna.util.Constants;
import prerna.util.DIHelper;
import prerna.util.Settings;
import prerna.util.Utility;

public class ReloadInsightClassesReactor extends AbstractReactor {

	public ReloadInsightClassesReactor() {
		this.keysToGet = new String[]{ ReactorKeysEnum.PROJECT.getKey(), ReactorKeysEnum.RELEASE.getKey()};
	}

	@Override
	public NounMetadata execute() {
		organizeKeys();
		this.insight.resetClassCache();
		
		String projectId = this.keyValue.get(this.keysToGet[0]);
		Boolean release = Boolean.parseBoolean(this.keyValue.get(this.keysToGet[1])+"");

		List messages = new ArrayList<>();
		
		if(projectId != null && !projectId.isEmpty()) {
			// make sure valid id for user
			if(!SecurityProjectUtils.userCanViewProject(this.insight.getUser(), projectId)) {
				// you dont have access
				throw new IllegalArgumentException("Project does not exist or user does not have access to the project");
			}
			
			IProject project = Utility.getProject(projectId);
			try {
				clearProjectAssets(project, release);
				messages.add("Compiled reactors for project '" + project.getProjectId() + "'.");
			} catch(IllegalArgumentException e) {
				messages.add(e.getMessage());
			}
		} else {
			// clear the context project
			if(insight.getContextProjectId() != null) {
				IProject project = Utility.getProject(insight.getContextProjectId());
				try {
					clearProjectAssets(project, release);
					messages.add("Compiled reactors for project '" + project.getProjectId() + "'.");
				} catch(IllegalArgumentException e) {
					messages.add(e.getMessage());
				}
			}
			// clear the insight saved reactor
			if(insight.getProjectId() != null) {
				IProject project = Utility.getProject(insight.getProjectId());
				try {
					clearProjectAssets(project, release);
					messages.add("Compiled reactors for project '" + project.getProjectId() + "'.");
				} catch(IllegalArgumentException e) {
					messages.add(e.getMessage());
				}
			}
		}
		
		return new NounMetadata(String.join(" ", messages), PixelDataType.CONST_STRING);
	}
	
	/**
	 * 
	 * @param project
	 */
	private void clearProjectAssets(IProject project, boolean release) {
		project.clearClassCache();
		project.compileReactors(null);
		if(release) {
			User user = this.insight.getUser();
			String projectId = project.getProjectId();
			String projectName = project.getProjectName();
			if(!SecurityProjectUtils.userIsOwner(user, projectId)) {
				throw new IllegalArgumentException("Project '" + project.getProjectId() + "' does not exist or user is not an owner of the project.");
			}
			
			// push the compiled code
			String projectVersionFolder = AssetUtility.getProjectVersionFolder(projectName, projectId);
			ClusterUtil.pushProjectFolder(project, projectVersionFolder, Constants.ASSETS_FOLDER + "/" + "java");
			
			// might need to also push the classes folder
			String projectAssetFolder = AssetUtility.getProjectVersionFolder(projectName, projectId) + "/" + Constants.ASSETS_FOLDER;
			File compiledClasses = new File(projectAssetFolder + DIR_SEPARATOR + "classes");
			if(compiledClasses.exists() && compiledClasses.isDirectory()) {
				ClusterUtil.pushProjectFolder(project, projectVersionFolder, Constants.ASSETS_FOLDER + "/" + "classes");
			}
			
			SecurityProjectUtils.setReactorCompilation(user, projectId);
		}
		
		// if we are doing reactors on socket side
		boolean executeOnSocket = false;
		if(DIHelper.getInstance().getProperty(Settings.CUSTOM_REACTOR_EXECUTION) != null) {
			executeOnSocket = Boolean.parseBoolean(DIHelper.getInstance().getProperty(Settings.CUSTOM_REACTOR_EXECUTION)+"");
		}
		
		if(executeOnSocket && this.insight.getUser() != null && this.insight.getUser().getSocketClient(false) != null) {
			PayloadStruct ps = new PayloadStruct();
			ps.operation = PayloadStruct.OPERATION.PROJECT;
			ps.projectId = insight.getContextProjectId();
			ps.methodName = "clearClassCache";
			ps.hasReturn = false;
			
			this.insight.getUser().getSocketClient(false).executeCommand(ps);
		}
	}
	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy