Program: 84479
Project: 84479
Buggy source:
/** 
 * The onSubmit function receives the form/command object that was modified by the input form and saves it to the db
 * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,java.lang.Object,org.springframework.validation.BindException)
 */
@Override protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object command,BindException errors) throws Exception {
  if (!Context.hasPrivilege(PrivilegeConstants.MANAGE_MODULES))   throw new APIAuthenticationException("String_Node_Str" + PrivilegeConstants.MANAGE_MODULES);
  HttpSession httpSession=request.getSession();
  String moduleId=ServletRequestUtils.getStringParameter(request,"String_Node_Str","String_Node_Str");
  String view=getFormView();
  String success="String_Node_Str";
  String error="String_Node_Str";
  MessageSourceAccessor msa=getMessageSourceAccessor();
  String action=ServletRequestUtils.getStringParameter(request,"String_Node_Str","String_Node_Str");
  if (ServletRequestUtils.getStringParameter(request,"String_Node_Str",null) != null)   action="String_Node_Str";
 else   if (ServletRequestUtils.getStringParameter(request,"String_Node_Str",null) != null)   action="String_Node_Str";
 else   if (ServletRequestUtils.getStringParameter(request,"String_Node_Str",null) != null)   action="String_Node_Str";
  if ("String_Node_Str".equals(action)) {
    if (!ModuleUtil.allowAdmin()) {
      error=msa.getMessage("String_Node_Str",new String[]{ModuleConstants.RUNTIMEPROPERTY_ALLOW_ADMIN});
    }
 else {
      InputStream inputStream=null;
      File moduleFile=null;
      Module module=null;
      Boolean updateModule=ServletRequestUtils.getBooleanParameter(request,"String_Node_Str",false);
      Boolean downloadModule=ServletRequestUtils.getBooleanParameter(request,"String_Node_Str",false);
      List<Module> dependentModulesStopped=null;
      try {
        if (downloadModule) {
          String downloadURL=request.getParameter("String_Node_Str");
          if (downloadURL == null) {
            throw new MalformedURLException("String_Node_Str");
          }
          String fileName=downloadURL.substring(downloadURL.lastIndexOf("String_Node_Str") + 1);
          final URL url=new URL(downloadURL);
          inputStream=ModuleUtil.getURLStream(url);
          moduleFile=ModuleUtil.insertModuleFile(inputStream,fileName);
        }
 else         if (request instanceof MultipartHttpServletRequest) {
          MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
          MultipartFile multipartModuleFile=multipartRequest.getFile("String_Node_Str");
          if (multipartModuleFile != null && !multipartModuleFile.isEmpty()) {
            String filename=WebUtil.stripFilename(multipartModuleFile.getOriginalFilename());
            if (updateModule) {
              Module tmpModule=new ModuleFileParser(multipartModuleFile.getInputStream()).parse();
              Module existingModule=ModuleFactory.getModuleById(tmpModule.getModuleId());
              if (existingModule != null) {
                dependentModulesStopped=ModuleFactory.stopModule(existingModule,false,true);
                WebModuleUtil.stopModule(existingModule,getServletContext());
                ModuleFactory.unloadModule(existingModule);
              }
              inputStream=new FileInputStream(tmpModule.getFile());
              moduleFile=ModuleUtil.insertModuleFile(inputStream,filename);
            }
 else {
              inputStream=multipartModuleFile.getInputStream();
              moduleFile=ModuleUtil.insertModuleFile(inputStream,filename);
            }
          }
        }
        module=ModuleFactory.loadModule(moduleFile);
      }
 catch (      ModuleException me) {
        log.warn("String_Node_Str",me);
        error=me.getMessage();
      }
 finally {
        try {
          if (inputStream != null)           inputStream.close();
        }
 catch (        IOException io) {
          log.warn("String_Node_Str",io);
        }
        if (module == null && moduleFile != null)         moduleFile.delete();
      }
      if (module != null) {
        ModuleFactory.startModule(module);
        WebModuleUtil.startModule(module,getServletContext(),false);
        if (module.isStarted()) {
          success=msa.getMessage("String_Node_Str",new String[]{module.getName()});
          if (updateModule && dependentModulesStopped != null) {
            for (            Module depMod : dependentModulesStopped) {
              ModuleFactory.startModule(depMod);
              WebModuleUtil.startModule(depMod,getServletContext(),false);
            }
          }
        }
 else         success=msa.getMessage("String_Node_Str",new String[]{module.getName()});
      }
    }
  }
 else   if (moduleId.equals("String_Node_Str")) {
    ModuleUtil.checkForModuleUpdates();
  }
 else   if (action.equals(msa.getMessage("String_Node_Str"))) {
    if (!ModuleUtil.allowAdmin()) {
      error=msa.getMessage("String_Node_Str",new String[]{ModuleConstants.RUNTIMEPROPERTY_ALLOW_ADMIN});
    }
    Module mod=ModuleFactory.getModuleById(moduleId);
    if (mod.getDownloadURL() != null) {
      ModuleFactory.stopModule(mod);
      WebModuleUtil.stopModule(mod,getServletContext());
      Module newModule=ModuleFactory.updateModule(mod);
      WebModuleUtil.startModule(newModule,getServletContext(),false);
    }
  }
 else {
    if (!ModuleUtil.allowAdmin()) {
      error=msa.getMessage("String_Node_Str",new String[]{ModuleConstants.RUNTIMEPROPERTY_ALLOW_ADMIN});
    }
 else {
      log.debug("String_Node_Str" + moduleId);
      Module mod=ModuleFactory.getModuleById(moduleId);
      Object[] args=new Object[]{moduleId};
      if (mod == null)       error=msa.getMessage("String_Node_Str",args);
 else {
        if ("String_Node_Str".equals(action)) {
          mod.clearStartupError();
          ModuleFactory.stopModule(mod);
          WebModuleUtil.stopModule(mod,getServletContext());
          success=msa.getMessage("String_Node_Str",args);
        }
 else         if ("String_Node_Str".equals(action)) {
          ModuleFactory.startModule(mod);
          WebModuleUtil.startModule(mod,getServletContext(),false);
          if (mod.isStarted())           success=msa.getMessage("String_Node_Str",args);
 else           error=msa.getMessage("String_Node_Str",args);
        }
 else         if ("String_Node_Str".equals(action)) {
          if (ModuleFactory.isModuleStarted(mod)) {
            ModuleFactory.stopModule(mod);
            WebModuleUtil.stopModule(mod,getServletContext());
          }
          ModuleFactory.unloadModule(mod);
          success=msa.getMessage("String_Node_Str",args);
        }
      }
    }
  }
  view=getSuccessView();
  if (!success.equals("String_Node_Str"))   httpSession.setAttribute(WebConstants.OPENMRS_MSG_ATTR,success);
  if (!error.equals("String_Node_Str"))   httpSession.setAttribute(WebConstants.OPENMRS_ERROR_ATTR,error);
  return new ModelAndView(new RedirectView(view));
}

Fixed version (ground truth):
/** 
 * The onSubmit function receives the form/command object that was modified by the input form and saves it to the db
 * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,java.lang.Object,org.springframework.validation.BindException)
 */
@Override protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object command,BindException errors) throws Exception {
  if (!Context.hasPrivilege(PrivilegeConstants.MANAGE_MODULES))   throw new APIAuthenticationException("String_Node_Str" + PrivilegeConstants.MANAGE_MODULES);
  HttpSession httpSession=request.getSession();
  String moduleId=ServletRequestUtils.getStringParameter(request,"String_Node_Str","String_Node_Str");
  String view=getFormView();
  String success="String_Node_Str";
  String error="String_Node_Str";
  MessageSourceAccessor msa=getMessageSourceAccessor();
  String action=ServletRequestUtils.getStringParameter(request,"String_Node_Str","String_Node_Str");
  if (ServletRequestUtils.getStringParameter(request,"String_Node_Str",null) != null)   action="String_Node_Str";
 else   if (ServletRequestUtils.getStringParameter(request,"String_Node_Str",null) != null)   action="String_Node_Str";
 else   if (ServletRequestUtils.getStringParameter(request,"String_Node_Str",null) != null)   action="String_Node_Str";
  if ("String_Node_Str".equals(action)) {
    if (!ModuleUtil.allowAdmin()) {
      error=msa.getMessage("String_Node_Str",new String[]{ModuleConstants.RUNTIMEPROPERTY_ALLOW_ADMIN});
    }
 else {
      InputStream inputStream=null;
      File moduleFile=null;
      Module module=null;
      Boolean updateModule=ServletRequestUtils.getBooleanParameter(request,"String_Node_Str",false);
      Boolean downloadModule=ServletRequestUtils.getBooleanParameter(request,"String_Node_Str",false);
      List<Module> dependentModulesStopped=null;
      try {
        if (downloadModule) {
          String downloadURL=request.getParameter("String_Node_Str");
          if (downloadURL == null) {
            throw new MalformedURLException("String_Node_Str");
          }
          String fileName=downloadURL.substring(downloadURL.lastIndexOf("String_Node_Str") + 1);
          final URL url=new URL(downloadURL);
          inputStream=ModuleUtil.getURLStream(url);
          moduleFile=ModuleUtil.insertModuleFile(inputStream,fileName);
        }
 else         if (request instanceof MultipartHttpServletRequest) {
          MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
          MultipartFile multipartModuleFile=multipartRequest.getFile("String_Node_Str");
          if (multipartModuleFile != null && !multipartModuleFile.isEmpty()) {
            String filename=WebUtil.stripFilename(multipartModuleFile.getOriginalFilename());
            if (updateModule) {
              Module tmpModule=new ModuleFileParser(multipartModuleFile.getInputStream()).parse();
              Module existingModule=ModuleFactory.getModuleById(tmpModule.getModuleId());
              if (existingModule != null) {
                dependentModulesStopped=ModuleFactory.stopModule(existingModule,false,true);
                for (                Module depMod : dependentModulesStopped) {
                  WebModuleUtil.stopModule(depMod,getServletContext());
                }
                WebModuleUtil.stopModule(existingModule,getServletContext());
                ModuleFactory.unloadModule(existingModule);
              }
              inputStream=new FileInputStream(tmpModule.getFile());
              moduleFile=ModuleUtil.insertModuleFile(inputStream,filename);
            }
 else {
              inputStream=multipartModuleFile.getInputStream();
              moduleFile=ModuleUtil.insertModuleFile(inputStream,filename);
            }
          }
        }
        module=ModuleFactory.loadModule(moduleFile);
      }
 catch (      ModuleException me) {
        log.warn("String_Node_Str",me);
        error=me.getMessage();
      }
 finally {
        try {
          if (inputStream != null)           inputStream.close();
        }
 catch (        IOException io) {
          log.warn("String_Node_Str",io);
        }
        if (module == null && moduleFile != null)         moduleFile.delete();
      }
      if (module != null) {
        ModuleFactory.startModule(module);
        WebModuleUtil.startModule(module,getServletContext(),false);
        if (module.isStarted()) {
          success=msa.getMessage("String_Node_Str",new String[]{module.getName()});
          if (updateModule && dependentModulesStopped != null) {
            for (            Module depMod : dependentModulesStopped) {
              ModuleFactory.startModule(depMod);
              WebModuleUtil.startModule(depMod,getServletContext(),false);
            }
          }
        }
 else         success=msa.getMessage("String_Node_Str",new String[]{module.getName()});
      }
    }
  }
 else   if (moduleId.equals("String_Node_Str")) {
    ModuleUtil.checkForModuleUpdates();
  }
 else   if (action.equals(msa.getMessage("String_Node_Str"))) {
    if (!ModuleUtil.allowAdmin()) {
      error=msa.getMessage("String_Node_Str",new String[]{ModuleConstants.RUNTIMEPROPERTY_ALLOW_ADMIN});
    }
    Module mod=ModuleFactory.getModuleById(moduleId);
    if (mod.getDownloadURL() != null) {
      ModuleFactory.stopModule(mod);
      WebModuleUtil.stopModule(mod,getServletContext());
      Module newModule=ModuleFactory.updateModule(mod);
      WebModuleUtil.startModule(newModule,getServletContext(),false);
    }
  }
 else {
    if (!ModuleUtil.allowAdmin()) {
      error=msa.getMessage("String_Node_Str",new String[]{ModuleConstants.RUNTIMEPROPERTY_ALLOW_ADMIN});
    }
 else {
      log.debug("String_Node_Str" + moduleId);
      Module mod=ModuleFactory.getModuleById(moduleId);
      Object[] args=new Object[]{moduleId};
      if (mod == null)       error=msa.getMessage("String_Node_Str",args);
 else {
        if ("String_Node_Str".equals(action)) {
          mod.clearStartupError();
          ModuleFactory.stopModule(mod);
          WebModuleUtil.stopModule(mod,getServletContext());
          success=msa.getMessage("String_Node_Str",args);
        }
 else         if ("String_Node_Str".equals(action)) {
          ModuleFactory.startModule(mod);
          WebModuleUtil.startModule(mod,getServletContext(),false);
          if (mod.isStarted())           success=msa.getMessage("String_Node_Str",args);
 else           error=msa.getMessage("String_Node_Str",args);
        }
 else         if ("String_Node_Str".equals(action)) {
          if (ModuleFactory.isModuleStarted(mod)) {
            ModuleFactory.stopModule(mod);
            WebModuleUtil.stopModule(mod,getServletContext());
          }
          ModuleFactory.unloadModule(mod);
          success=msa.getMessage("String_Node_Str",args);
        }
      }
    }
  }
  view=getSuccessView();
  if (!success.equals("String_Node_Str"))   httpSession.setAttribute(WebConstants.OPENMRS_MSG_ATTR,success);
  if (!error.equals("String_Node_Str"))   httpSession.setAttribute(WebConstants.OPENMRS_ERROR_ATTR,error);
  return new ModelAndView(new RedirectView(view));
}