@SecurityControllIgnore
  public String getLocation() {
    HttpServletRequest request = ServletActionContext.getRequest();
    String reportId = request.getParameter("report");
    File targetJasperFile = getTargetJasperFile(reportId);
    File targetJrxmlFile =
        new File(
            getWebRootDir() + getRelativeJasperFilePath() + File.separator + reportId + ".jrxml");
    try {
      if (!targetJrxmlFile.exists()) {
        targetJrxmlFile.createNewFile();
      }
      logger.debug("Using jrxml file: {}", targetJrxmlFile.getAbsolutePath());
      logger.debug("Using jasper file: {}", targetJasperFile.getAbsolutePath());
      ReportDef reportDef = reportDefService.findByCode(reportId);
      AttachmentFile attachmentFile = null;
      if (reportDef != null) {
        attachmentFile = reportDef.getTemplateFile();
      }
      boolean needUpdateJasperFile = false;
      if (!targetJasperFile.exists()) {
        needUpdateJasperFile = true;
        if (!targetJasperFile.exists()) {
          targetJasperFile.createNewFile();
        }
      } else {

        if (attachmentFile != null) {
          // TODO
          //                    //数据对象判断处理
          //                    long compareTime = attachmentFile.getLastModifiedDate() != null ?
          // attachmentFile
          //                            .getLastModifiedDate().getTime() :
          // attachmentFile.getCreatedDate().getTime();
          //                    if (targetJasperFile.lastModified() < compareTime) {
          //                        needUpdateJasperFile = true;
          //                        FileCopyUtils.copy(attachmentFile.getFileContent(),
          // targetJrxmlFile);
          //                    }
        } else {
          if (targetJrxmlFile.lastModified() > targetJasperFile.lastModified()) {
            needUpdateJasperFile = true;
          }
        }
      }
      if (needUpdateJasperFile) {
        logger.info("Compiling jasper file: {}", targetJasperFile.getAbsolutePath());
        JasperCompileManager.compileReportToFile(
            targetJrxmlFile.getAbsolutePath(), targetJasperFile.getAbsolutePath());
      }
    } catch (Exception e) {
      logger.error(e.getMessage(), e);
      throw new WebException(e.getMessage(), e);
    }
    return getRelativeJasperFilePath() + File.separator + reportId + ".jasper";
  }
 @MetaData(value = "计算显示角色关联数据")
 @SecurityControllIgnore
 public HttpHeaders findRelatedRoles() {
   GroupPropertyFilter groupFilter =
       GroupPropertyFilter.buildGroupFilterFromHttpRequest(Role.class, getRequest());
   List<Role> roles =
       roleService.findByFilters(groupFilter, new Sort(Direction.DESC, "aclType", "code"));
   List<ReportDefR2Role> r2s = reportDefService.findRelatedRoleR2s(this.getId());
   for (Role role : roles) {
     role.addExtraAttribute("related", false);
     for (ReportDefR2Role r2 : r2s) {
       if (r2.getRole().equals(role)) {
         role.addExtraAttribute("r2CreatedDate", r2.getCreatedDate());
         role.addExtraAttribute("related", true);
         break;
       }
     }
   }
   setModel(buildPageResultFromList(roles));
   return buildDefaultHttpHeaders();
 }
 public List<String> getCategories() {
   return reportDefService.findCategories();
 }
 @MetaData(value = "更新角色关联")
 public HttpHeaders doUpdateRelatedRoleR2s() {
   reportDefService.updateRelatedRoleR2s(getId(), getParameterIds("r2ids"));
   setModel(OperationResult.buildSuccessResult("角色关联操作完成"));
   return buildDefaultHttpHeaders();
 }
 public void prepareShow() {
   String report = this.getRequiredParameter("report");
   ReportDef reportDef = reportDefService.findByCode(report);
   setModel(reportDef);
 }