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

prerna.reactor.insights.save.SetInsightNameReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.insights.save;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.apache.logging.log4j.Logger;

import prerna.auth.utils.SecurityInsightUtils;
import prerna.auth.utils.SecurityProjectUtils;
import prerna.engine.impl.InsightAdministrator;
import prerna.om.MosfetFile;
import prerna.project.api.IProject;
import prerna.reactor.insights.AbstractInsightReactor;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.AssetUtility;
import prerna.util.Constants;
import prerna.util.MosfetSyncHelper;
import prerna.util.Utility;
import prerna.util.git.GitRepoUtils;
import prerna.util.git.GitUtils;

public class SetInsightNameReactor extends AbstractInsightReactor {

	private static final String CLASS_NAME = SetInsightNameReactor.class.getName();

	public SetInsightNameReactor() {
		this.keysToGet = new String[]{ReactorKeysEnum.PROJECT.getKey(), ReactorKeysEnum.INSIGHT_NAME.getKey(), ReactorKeysEnum.ID.getKey()};
	}

	@Override
	public NounMetadata execute() {
		Logger logger = this.getLogger(CLASS_NAME);

		String projectId = getProject();
		// need to know what we are updating
		String existingId = getRdbmsId();
		
		// we may have the alias
		projectId = SecurityProjectUtils.testUserProjectIdForAlias(this.insight.getUser(), projectId);
		if(!SecurityInsightUtils.userCanEditInsight(this.insight.getUser(), projectId, existingId)) {
			throw new IllegalArgumentException("Project does not exist or user does not have permission to edit this insight");
		}
		
		String insightName = getInsightName();
		if(insightName == null || (insightName = insightName.trim()).isEmpty()) {
			throw new IllegalArgumentException("Need to define the insight name");
		}
		
		if(SecurityInsightUtils.insightNameExistsMinusId(projectId, insightName, existingId)) {
			throw new IllegalArgumentException("Insight name already exists");
		}
		
		IProject project = Utility.getProject(projectId);
		// add the recipe to the insights database
		InsightAdministrator admin = new InsightAdministrator(project.getInsightDatabase());

		// update insight db
		logger.info("1) Updating insight in rdbms");
		admin.updateInsightName(existingId, insightName);
		logger.info("1) Done");
		
		logger.info("2) Updating insight in index");
		SecurityInsightUtils.updateInsightName(projectId, existingId, insightName);
		logger.info("2) Done");
		
		logger.info("3) Update mosfet file for collaboration");
		updateRecipeFile(logger, project.getProjectId(), project.getProjectName(), existingId, insightName);
		logger.info("3) Done");

//		ClusterUtil.reactorPushInsightDB(projectId);
		
		Map returnMap = new HashMap();
		returnMap.put("app_insight_id", existingId);
		returnMap.put("app_name", project.getProjectName());
		returnMap.put("app_id", project.getProjectId());
		
		returnMap.put("name", insightName);
		returnMap.put("project_insight_id", existingId);
		returnMap.put("project_name", project.getProjectName());
		returnMap.put("project_id", project.getProjectId());
		NounMetadata noun = new NounMetadata(returnMap, PixelDataType.CUSTOM_DATA_STRUCTURE, PixelOperationType.SAVE_INSIGHT);
		return noun;
	}

	/**
	 * Update recipe: delete the old file and save as new
	 * 
	 * @param engineName
	 * @param rdbmsID
	 * @param recipeToSave
	 */
	protected void updateRecipeFile(Logger logger, String projectId, String projectName, String rdbmsID, String insightName) {
		String recipeLocation = AssetUtility.getProjectVersionFolder(projectName, projectId)
				+ DIR_SEPARATOR + rdbmsID + DIR_SEPARATOR + MosfetFile.RECIPE_FILE;
		File mosfet = new File(recipeLocation);
		if(mosfet.exists()) {
			try {
				MosfetSyncHelper.updateMosfitFileInsightName(new File(recipeLocation), insightName);
				// add to git
				String gitFolder = AssetUtility.getProjectVersionFolder(projectName, projectId);
				List files = new Vector<>();
				files.add(rdbmsID + DIR_SEPARATOR + MosfetFile.RECIPE_FILE);		
				GitRepoUtils.addSpecificFiles(gitFolder, files);
				GitRepoUtils.commitAddedFiles(gitFolder, GitUtils.getDateMessage("Changed " + insightName + " insight name"));
			} catch (Exception e) {
				logger.info("Error occurred trying to write to git folder");
				logger.error(Constants.STACKTRACE, e);
			}
		} else {
			logger.info("... Could not find existing mosfet file. Ignoring update.");
		}
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy