`
zhangxu261
  • 浏览: 8617 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

修改Issue默认经办人为报告人

阅读更多
 在创建一个Issue的时候,如果不指定经办人,经办人会默认为项目的负责人,如果希望经办人默认为Issue创建时的报告人或者当前登录用户,那该怎么办,因为很少有人会主动在创建issue的时候在经办人那点击分配给我或者分配给真正正确的人,这样我们不得不做一些额外的操作去实现这一要求,最开始的思路是通过监控器监听issue创建事件,然后捕获到该事件之后立即修改该issue的经办人属性,但是事件执行完之后,经办人又被创建时的值覆盖了,接着又试着让修改issue经办人的代码线程休眠几秒后再做执行,依然没有成功。失望之余,我想到了拦截器,jira插件开发书中倒是提到过servlet filter,于是通过代码试验,终于用filter方式实现了修改默认经办人的功能
首先需要在atlassian-plugin.xml文件中配置一个filter
<servlet-filter key="user-assign-filter" class="com.company.jira.filter.UserAssignFilter" location="before-dispatch" weight="200">
    <description>用户指派过滤器</description>
    <url-pattern>/secure/QuickCreateIssue.jspa*</url-pattern>
</servlet-filter>
 通过Firefox的firebug工具捕获到了/secure/QuickCreateIssue.jspa*的请求


 
在创建issue的时候如果没有设置经办人,那么经办人的值为-1,当然在issue的创建的后台会被置成项目的负责人,所以思路有了,就是要在过滤器这里修改掉assignee的值
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    String assignee = servletRequest.getParameter("assignee");
    String reporter = servletRequest.getParameter("reporter");
    if ("-1".equals(assignee)) {    //-1代表默认值
        HashMap map = new HashMap(servletRequest.getParameterMap());
        map.put("assignee", new String[]{reporter});
        ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper((HttpServletRequest) servletRequest, map);
        filterChain.doFilter(wrapRequest, servletResponse);
    } else {
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
 由于servletRequest.getParameterMap()这个map中的值无法修改,只好通过自定义一个ParameterRequestWrapper对象来解决
public class ParameterRequestWrapper extends HttpServletRequestWrapper {

    private Map params;

    public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
        super(request);
        this.params = newParams;
    }

    public Map getParameterMap() {
        return params;
    }

    public Enumeration getParameterNames() {
        Vector v = new Vector(params.keySet());
        return v.elements();
    }

    public String[] getParameterValues(String name) {
        Object v = params.get(name);
        if (v == null) {
            return null;
        } else if (v instanceof String[]) {
            return (String[]) v;
        } else if (v instanceof String) {
            return new String[]{(String) v};
        } else {
            return new String[]{v.toString()};
        }
    }

    public String getParameter(String name) {
        Object v = params.get(name);
        if (v == null) {
            return null;
        } else if (v instanceof String[]) {
            String[] strArr = (String[]) v;
            if (strArr.length > 0) {
                return strArr[0];
            } else {
                return null;
            }
        } else if (v instanceof String) {
            return (String) v;
        } else {
            return v.toString();
        }
    }
}
 
  • 大小: 51.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics