package codeine.plugins; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.apache.log4j.Logger; import codeine.jsons.global.ExperimentalConfJsonStore; import codeine.jsons.project.ProjectJson; import codeine.model.Constants; import codeine.model.Result; import codeine.utils.os_process.ProcessExecuter.ProcessExecuterBuilder; import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class AfterProjectModifyPlugin { @Inject private ExperimentalConfJsonStore experimentalConfJsonStore; private static final Logger log = Logger.getLogger(AfterProjectModifyPlugin.class); public enum StatusChange {add,remove,modify} public void call(ProjectJson projectJson, StatusChange newStatus, String username) { String after_project_modify_plugin = experimentalConfJsonStore.get().after_project_modify_plugin(); if (null != after_project_modify_plugin) { log.info("calling after_project_modify_plugin for project " + projectJson.name() + " by user " + username + " with status " + newStatus.toString()); List<String> cmd = Lists.newArrayList(after_project_modify_plugin); Map<String, String> env = Maps.newHashMap(); env.put(Constants.EXECUTION_ENV_PROJECT_STATUS, String.valueOf(newStatus)); env.put(Constants.EXECUTION_ENV_PROJECT_NAME, projectJson.name()); env.put(Constants.EXECUTION_ENV_USER_NAME, username); log.info("executing " + after_project_modify_plugin); Result result = new ProcessExecuterBuilder(cmd).timeoutInMinutes(2).env(env).build().execute(); log.info("calling after_project_modify_plugin for project " + projectJson.name() + " finished " + result.toStringLong()); } } }