Examples of TicketResponsible


Examples of com.gitblit.tickets.TicketResponsible

    }

    // set stateless page preference
    setStatelessHint(true);

    any = new TicketResponsible(getString("gb.any"), "[* TO *]", null);

    UserModel user = GitBlitWebSession.get().getUser();
    boolean isAuthenticated = user != null && user.isAuthenticated;

    final String [] statiiParam = params.getStringArray(Lucene.status.name());
    final String assignedToParam = params.getString(Lucene.responsible.name(), null);
    final String milestoneParam = params.getString(Lucene.milestone.name(), null);
    final String queryParam = params.getString("q", null);
    final String searchParam = params.getString("s", null);
    final String sortBy = Lucene.fromString(params.getString("sort", Lucene.created.name())).name();
    final boolean desc = !"asc".equals(params.getString("direction", "desc"));


    // add search form
    TicketSearchForm searchForm = new TicketSearchForm("ticketSearchForm", repositoryName, searchParam);
    add(searchForm);
    searchForm.setTranslatedAttributes();

    final String activeQuery;
    if (!StringUtils.isEmpty(searchParam)) {
      activeQuery = searchParam;
    } else if (StringUtils.isEmpty(queryParam)) {
      activeQuery = "";
    } else {
      activeQuery = queryParam;
    }

    // build Lucene query from defaults and request parameters
    QueryBuilder qb = new QueryBuilder(queryParam);
    if (!qb.containsField(Lucene.rid.name())) {
      // specify the repository
      qb.and(Lucene.rid.matches(getRepositoryModel().getRID()));
    }
    if (!qb.containsField(Lucene.responsible.name())) {
      // specify the responsible
      qb.and(Lucene.responsible.matches(assignedToParam));
    }
    if (!qb.containsField(Lucene.milestone.name())) {
      // specify the milestone
      qb.and(Lucene.milestone.matches(milestoneParam));
    }
    if (!qb.containsField(Lucene.status.name()) && !ArrayUtils.isEmpty(statiiParam)) {
      // specify the states
      boolean not = false;
      QueryBuilder q = new QueryBuilder();
      for (String state : statiiParam) {
        if (state.charAt(0) == '!') {
          not = true;
          q.and(Lucene.status.doesNotMatch(state.substring(1)));
        } else {
          q.or(Lucene.status.matches(state));
        }
      }
      if (not) {
        qb.and(q.toString());
      } else {
        qb.and(q.toSubquery().toString());
      }
    }
    final String luceneQuery = qb.build();

    // open milestones
    List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
    TicketMilestone currentMilestone = null;
    if (!StringUtils.isEmpty(milestoneParam)) {
      for (TicketMilestone tm : milestones) {
        if (tm.name.equals(milestoneParam)) {
          // get the milestone (queries the index)
          currentMilestone = app().tickets().getMilestone(getRepositoryModel(), milestoneParam);
          break;
        }
      }

      if (currentMilestone == null) {
        // milestone not found, create a temporary one
        currentMilestone = new TicketMilestone(milestoneParam);
        String q = QueryBuilder.q(Lucene.rid.matches(getRepositoryModel().getRID())).and(Lucene.milestone.matches(milestoneParam)).build();
        currentMilestone.tickets = app().tickets().queryFor(q, 1, 0, Lucene.number.name(), true);
        milestones.add(currentMilestone);
      }
    }

    Fragment milestonePanel;
    if (currentMilestone == null) {
      milestonePanel = new Fragment("milestonePanel", "noMilestoneFragment", this);
      add(milestonePanel);
    } else {
      milestonePanel = new Fragment("milestonePanel", "milestoneProgressFragment", this);
      milestonePanel.add(new Label("currentMilestone", currentMilestone.name));
      if (currentMilestone.due == null) {
        milestonePanel.add(new Label("currentDueDate", getString("gb.notSpecified")));
      } else {
        milestonePanel.add(WicketUtils.createDateLabel("currentDueDate", currentMilestone.due, GitBlitWebSession
            .get().getTimezone(), getTimeUtils(), false));
      }
      Label label = new Label("progress");
      WicketUtils.setCssStyle(label, "width:" + currentMilestone.getProgress() + "%;");
      milestonePanel.add(label);

      milestonePanel.add(new LinkPanel("openTickets", null,
          MessageFormat.format(getString("gb.nOpenTickets"), currentMilestone.getOpenTickets()),
          TicketsPage.class,
          queryParameters(null, currentMilestone.name, openStatii, null, sortBy, desc, 1)));

      milestonePanel.add(new LinkPanel("closedTickets", null,
          MessageFormat.format(getString("gb.nClosedTickets"), currentMilestone.getClosedTickets()),
          TicketsPage.class,
          queryParameters(null, currentMilestone.name, closedStatii, null, sortBy, desc, 1)));

      milestonePanel.add(new Label("totalTickets", MessageFormat.format(getString("gb.nTotalTickets"), currentMilestone.getTotalTickets())));
      add(milestonePanel);
    }

    Fragment milestoneDropdown = new Fragment("milestoneDropdown", "milestoneDropdownFragment", this);
    PageParameters resetMilestone = queryParameters(queryParam, null, statiiParam, assignedToParam, sortBy, desc, 1);
    milestoneDropdown.add(new BookmarkablePageLink<Void>("resetMilestone", TicketsPage.class, resetMilestone));

    ListDataProvider<TicketMilestone> milestonesDp = new ListDataProvider<TicketMilestone>(milestones);
    DataView<TicketMilestone> milestonesMenu = new DataView<TicketMilestone>("milestone", milestonesDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketMilestone> item) {
        final TicketMilestone tm = item.getModelObject();
        PageParameters params = queryParameters(queryParam, tm.name, statiiParam, assignedToParam, sortBy, desc, 1);
        item.add(new LinkPanel("milestoneLink", null, tm.name, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    milestoneDropdown.add(milestonesMenu);
    milestonePanel.add(milestoneDropdown);

    // search or query tickets
    int page = Math.max(1,  WicketUtils.getPage(params));
    int pageSize = app().settings().getInteger(Keys.tickets.perPage, 25);
    List<QueryResult> results;
    if (StringUtils.isEmpty(searchParam)) {
      results = app().tickets().queryFor(luceneQuery, page, pageSize, sortBy, desc);
    } else {
      results = app().tickets().searchFor(getRepositoryModel(), searchParam, page, pageSize);
    }
    int totalResults = results.size() == 0 ? 0 : results.get(0).totalResults;

    // standard queries
    add(new BookmarkablePageLink<Void>("changesQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Proposal.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("bugsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Bug.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("enhancementsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Enhancement.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("tasksQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Task.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("questionsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Question.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("resetQuery", TicketsPage.class,
        queryParameters(
            null,
            milestoneParam,
            openStatii,
            null,
            null,
            true,
            1)));

    if (isAuthenticated) {
      add(new Label("userDivider"));
      add(new BookmarkablePageLink<Void>("createdQuery", TicketsPage.class,
          queryParameters(
              Lucene.createdby.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));

      add(new BookmarkablePageLink<Void>("watchedQuery", TicketsPage.class,
          queryParameters(
              Lucene.watchedby.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));
      add(new BookmarkablePageLink<Void>("mentionsQuery", TicketsPage.class,
          queryParameters(
              Lucene.mentions.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));
    } else {
      add(new Label("userDivider").setVisible(false));
      add(new Label("createdQuery").setVisible(false));
      add(new Label("watchedQuery").setVisible(false));
      add(new Label("mentionsQuery").setVisible(false));
    }

    Set<TicketQuery> dynamicQueries = new TreeSet<TicketQuery>();
    for (TicketLabel label : app().tickets().getLabels(getRepositoryModel())) {
      String q = QueryBuilder.q(Lucene.labels.matches(label.name)).build();
      dynamicQueries.add(new TicketQuery(label.name, q).color(label.color));
    }

    for (QueryResult ticket : results) {
      if (!StringUtils.isEmpty(ticket.topic)) {
        String q = QueryBuilder.q(Lucene.topic.matches(ticket.topic)).build();
        dynamicQueries.add(new TicketQuery(ticket.topic, q));
      }

      if (!ArrayUtils.isEmpty(ticket.labels)) {
        for (String label : ticket.labels) {
          String q = QueryBuilder.q(Lucene.labels.matches(label)).build();
          dynamicQueries.add(new TicketQuery(label, q));
        }
      }
    }

    if (dynamicQueries.size() == 0) {
      add(new Label("dynamicQueries").setVisible(false));
    } else {
      Fragment fragment = new Fragment("dynamicQueries", "dynamicQueriesFragment", this);
      ListDataProvider<TicketQuery> dynamicQueriesDp = new ListDataProvider<TicketQuery>(new ArrayList<TicketQuery>(dynamicQueries));
      DataView<TicketQuery> dynamicQueriesList = new DataView<TicketQuery>("dynamicQuery", dynamicQueriesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<TicketQuery> item) {
          final TicketQuery tq = item.getModelObject();
          Component swatch = new Label("swatch", "&nbsp;").setEscapeModelStrings(false);
          if (StringUtils.isEmpty(tq.color)) {
            // calculate a color
            tq.color = StringUtils.getColor(tq.name);
          }
          String background = MessageFormat.format("background-color:{0};", tq.color);
          swatch.add(new SimpleAttributeModifier("style", background));
          item.add(swatch);
          if (activeQuery.contains(tq.query)) {
            // selected
            String q = QueryBuilder.q(activeQuery).remove(tq.query).build();
            PageParameters params = queryParameters(q, milestoneParam, statiiParam, assignedToParam, sortBy, desc, 1);
            item.add(new LinkPanel("link", "active", tq.name, TicketsPage.class, params).setRenderBodyOnly(true));
            Label checked = new Label("checked");
            WicketUtils.setCssClass(checked, "iconic-o-x");
            item.add(checked);
            item.add(new SimpleAttributeModifier("style", background));
          } else {
            // unselected
            String q = QueryBuilder.q(queryParam).toSubquery().and(tq.query).build();
            PageParameters params = queryParameters(q, milestoneParam, statiiParam, assignedToParam, sortBy, desc, 1);
            item.add(new LinkPanel("link", null, tq.name, TicketsPage.class, params).setRenderBodyOnly(true));
            item.add(new Label("checked").setVisible(false));
          }
        }
      };
      fragment.add(dynamicQueriesList);
      add(fragment);
    }

    // states
    if (ArrayUtils.isEmpty(statiiParam)) {
      add(new Label("selectedStatii", getString("gb.all")));
    } else {
      add(new Label("selectedStatii", StringUtils.flattenStrings(Arrays.asList(statiiParam), ",")));
    }
    add(new BookmarkablePageLink<Void>("openTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, openStatii, assignedToParam, sortBy, desc, 1)));
    add(new BookmarkablePageLink<Void>("closedTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, closedStatii, assignedToParam, sortBy, desc, 1)));
    add(new BookmarkablePageLink<Void>("allTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, null, assignedToParam, sortBy, desc, 1)));

    // by status
    List<Status> statii = new ArrayList<Status>(Arrays.asList(Status.values()));
    statii.remove(Status.Closed);
    ListDataProvider<Status> resolutionsDp = new ListDataProvider<Status>(statii);
    DataView<Status> statiiLinks = new DataView<Status>("statii", resolutionsDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<Status> item) {
        final Status status = item.getModelObject();
        PageParameters p = queryParameters(queryParam, milestoneParam, new String [] { status.name().toLowerCase() }, assignedToParam, sortBy, desc, 1);
        String css = getStatusClass(status);
        item.add(new LinkPanel("statusLink", css, status.toString(), TicketsPage.class, p).setRenderBodyOnly(true));
      }
    };
    add(statiiLinks);

    // responsible filter
    List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
    for (RegistrantAccessPermission perm : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
      if (perm.permission.atLeast(AccessPermission.PUSH)) {
        UserModel u = app().users().getUserModel(perm.registrant);
        responsibles.add(new TicketResponsible(u));
      }
    }
    Collections.sort(responsibles);
    responsibles.add(0, any);

    TicketResponsible currentResponsible = null;
    for (TicketResponsible u : responsibles) {
      if (u.username.equals(assignedToParam)) {
        currentResponsible = u;
        break;
      }
    }

    add(new Label("currentResponsible", currentResponsible == null ? "" : currentResponsible.displayname));
    ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles);
    DataView<TicketResponsible> responsibleMenu = new DataView<TicketResponsible>("responsible", responsibleDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketResponsible> item) {
        final TicketResponsible u = item.getModelObject();
        PageParameters params = queryParameters(queryParam, milestoneParam, statiiParam, u.username, sortBy, desc, 1);
        item.add(new LinkPanel("responsibleLink", null, u.displayname, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    add(responsibleMenu);
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

          userlist.remove(ticket.responsible);
        }
        for (String username : userlist) {
          UserModel u = app().users().getUserModel(username);
          if (u != null) {
            responsibles.add(new TicketResponsible(u));
          }
        }
        Collections.sort(responsibles);
        responsibles.add(new TicketResponsible(ESC_NIL, "", ""));
        ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles);
        DataView<TicketResponsible> responsibleView = new DataView<TicketResponsible>("newResponsible", responsibleDp) {
          private static final long serialVersionUID = 1L;

          @Override
          public void populateItem(final Item<TicketResponsible> item) {
            SimpleAjaxLink<TicketResponsible> link = new SimpleAjaxLink<TicketResponsible>("link", item.getModel()) {

              private static final long serialVersionUID = 1L;

              @Override
              public void onClick(AjaxRequestTarget target) {
                TicketResponsible responsible = getModel().getObject();
                Change change = new Change(user.username);
                change.setField(Field.responsible, responsible.username);
                if (!StringUtils.isEmpty(responsible.username)) {
                  if (!ticket.isWatching(responsible.username)) {
                    change.watch(responsible.username);
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

      List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
      for (String username : userlist) {
        UserModel user = app().users().getUserModel(username);
        if (user != null && !user.disabled) {
          TicketResponsible responsible = new TicketResponsible(user);
          responsibles.add(responsible);
          if (user.username.equals(ticket.responsible)) {
            responsibleModel.setObject(responsible);
          }
        }
      }
      Collections.sort(responsibles);
      responsibles.add(new TicketResponsible(NIL, "", ""));
      Fragment responsible = new Fragment("responsible", "responsibleFragment", this);
      responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles));
      form.add(responsible.setVisible(!responsibles.isEmpty()));

      // milestone
      List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
      for (TicketMilestone milestone : milestones) {
        if (milestone.name.equals(ticket.milestone)) {
          milestoneModel.setObject(milestone);
          break;
        }
      }
      if (milestoneModel.getObject() == null && !StringUtils.isEmpty(ticket.milestone)) {
        // ensure that this unrecognized milestone is listed
        // so that we get the <nil> selection.
        TicketMilestone tms = new TicketMilestone(ticket.milestone);
        milestones.add(tms);
        milestoneModel.setObject(tms);
      }
      if (!milestones.isEmpty()) {
        milestones.add(new TicketMilestone(NIL));
      }

      Fragment milestone = new Fragment("milestone", "milestoneFragment", this);

      milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
      form.add(milestone.setVisible(!milestones.isEmpty()));

      // mergeTo (integration branch)
      List<String> branches = new ArrayList<String>();
      for (String branch : getRepositoryModel().getLocalBranches()) {
        // exclude ticket branches
        if (!branch.startsWith(Constants.R_TICKET)) {
          branches.add(Repository.shortenRefName(branch));
        }
      }
      branches.remove(Repository.shortenRefName(getRepositoryModel().mergeTo));
      branches.add(0, Repository.shortenRefName(getRepositoryModel().mergeTo));

      Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this);
      mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches));
      form.add(mergeto.setVisible(!branches.isEmpty()));
    } else {
      // user can not admin this ticket
      form.add(new Label("responsible").setVisible(false));
      form.add(new Label("milestone").setVisible(false));
      form.add(new Label("mergeto").setVisible(false));
    }

    form.add(new AjaxButton("update") {

      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        long ticketId = 0L;
        try {
          String h = WicketUtils.getObject(getPageParameters());
          ticketId = Long.parseLong(h);
        } catch (Exception e) {
          setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName));
        }

        TicketModel ticket = app().tickets().getTicket(getRepositoryModel(), ticketId);

        String createdBy = GitBlitWebSession.get().getUsername();
        Change change = new Change(createdBy);

        String title = titleModel.getObject();
        if (StringUtils.isEmpty(title)) {
          return;
        }

        if (!ticket.title.equals(title)) {
          // title change
          change.setField(Field.title, title);
        }

        String description = descriptionEditor.getText();
        if ((StringUtils.isEmpty(ticket.body) && !StringUtils.isEmpty(description))
            || (!StringUtils.isEmpty(ticket.body) && !ticket.body.equals(description))) {
          // description change
          change.setField(Field.body, description);
        }

        Status status = statusModel.getObject();
        if (!ticket.status.equals(status)) {
          // status change
          change.setField(Field.status, status);
        }

        Type type = typeModel.getObject();
        if (!ticket.type.equals(type)) {
          // type change
          change.setField(Field.type, type);
        }

        String topic = topicModel.getObject();
        if ((StringUtils.isEmpty(ticket.topic) && !StringUtils.isEmpty(topic))
            || (!StringUtils.isEmpty(topic) && !topic.equals(ticket.topic))) {
          // topic change
          change.setField(Field.topic, topic);
        }

        TicketResponsible responsible = responsibleModel == null ? null : responsibleModel.getObject();
        if (responsible != null && !responsible.username.equals(ticket.responsible)) {
          // responsible change
          change.setField(Field.responsible, responsible.username);
          if (!StringUtils.isEmpty(responsible.username)) {
            if (!ticket.isWatching(responsible.username)) {
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

      List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
      if (UserModel.ANONYMOUS.canPush(getRepositoryModel())) {
        // anonymous push allowed
        for (UserModel user : app().users().getAllUsers()) {
          if (!user.disabled) {
            responsibles.add(new TicketResponsible(user));
          }
        }
      } else {
        // authenticated push
        for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
          if (rp.permission.atLeast(AccessPermission.PUSH) && !rp.isTeam()) {
            UserModel user = app().users().getUserModel(rp.registrant);
            if (user != null && !user.disabled) {
              responsibles.add(new TicketResponsible(user));
            }
          }
        }
      }
      Collections.sort(responsibles);
      Fragment responsible = new Fragment("responsible", "responsibleFragment", this);
      responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles));
      form.add(responsible.setVisible(!responsibles.isEmpty()));

      // milestone
      List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
      Fragment milestone = new Fragment("milestone", "milestoneFragment", this);
      milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
      form.add(milestone.setVisible(!milestones.isEmpty()));

      // integration branch
      List<String> branches = new ArrayList<String>();
      for (String branch : getRepositoryModel().getLocalBranches()) {
        // exclude ticket branches
        if (!branch.startsWith(Constants.R_TICKET)) {
          branches.add(Repository.shortenRefName(branch));
        }
      }
      branches.remove(Repository.shortenRefName(getRepositoryModel().HEAD));
      branches.add(0, Repository.shortenRefName(getRepositoryModel().HEAD));

      Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this);
      mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches));
      form.add(mergeto.setVisible(!branches.isEmpty()));
    } else {
      // user does not have permission to assign milestone, responsible, or mergeto
      form.add(new Label("responsible").setVisible(false));
      form.add(new Label("milestone").setVisible(false));
      form.add(new Label("mergeto").setVisible(false));
    }

    form.add(new AjaxButton("create") {

      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        String title = titleModel.getObject();
        if (StringUtils.isEmpty(title)) {
          return;
        }

        String createdBy = GitBlitWebSession.get().getUsername();
        Change change = new Change(createdBy);
        change.setField(Field.title, title);
        change.setField(Field.body, descriptionEditor.getText());
        String topic = topicModel.getObject();
        if (!StringUtils.isEmpty(topic)) {
          change.setField(Field.topic, topic);
        }

        // type
        TicketModel.Type type = TicketModel.Type.defaultType;
        if (typeModel.getObject() != null) {
          type = typeModel.getObject();
        }
        change.setField(Field.type, type);

        // responsible
        TicketResponsible responsible = responsibleModel == null ? null : responsibleModel.getObject();
        if (responsible != null) {
          change.setField(Field.responsible, responsible.username);
        }

        // milestone
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

          userlist.remove(ticket.responsible);
        }
        for (String username : userlist) {
          UserModel u = app().users().getUserModel(username);
          if (u != null) {
            responsibles.add(new TicketResponsible(u));
          }
        }
        Collections.sort(responsibles);
        responsibles.add(new TicketResponsible(ESC_NIL, "", ""));
        ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles);
        DataView<TicketResponsible> responsibleView = new DataView<TicketResponsible>("newResponsible", responsibleDp) {
          private static final long serialVersionUID = 1L;

          @Override
          public void populateItem(final Item<TicketResponsible> item) {
            SimpleAjaxLink<TicketResponsible> link = new SimpleAjaxLink<TicketResponsible>("link", item.getModel()) {

              private static final long serialVersionUID = 1L;

              @Override
              public void onClick(AjaxRequestTarget target) {
                TicketResponsible responsible = getModel().getObject();
                Change change = new Change(user.username);
                change.setField(Field.responsible, responsible.username);
                if (!StringUtils.isEmpty(responsible.username)) {
                  if (!ticket.isWatching(responsible.username)) {
                    change.watch(responsible.username);
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

    }

    // set stateless page preference
    setStatelessHint(true);

    any = new TicketResponsible(getString("gb.any"), "[* TO *]", null);

    UserModel user = GitBlitWebSession.get().getUser();
    boolean isAuthenticated = user != null && user.isAuthenticated;

    final String [] statiiParam = params.getStringArray(Lucene.status.name());
    final String assignedToParam = params.getString(Lucene.responsible.name(), null);
    final String milestoneParam = params.getString(Lucene.milestone.name(), null);
    final String queryParam = params.getString("q", null);
    final String searchParam = params.getString("s", null);
    final String sortBy = Lucene.fromString(params.getString("sort", Lucene.created.name())).name();
    final boolean desc = !"asc".equals(params.getString("direction", "desc"));

    // add search form
    add(new TicketSearchForm("ticketSearchForm", repositoryName, searchParam, getClass(), params));

    final String activeQuery;
    if (!StringUtils.isEmpty(searchParam)) {
      activeQuery = searchParam;
    } else if (StringUtils.isEmpty(queryParam)) {
      activeQuery = "";
    } else {
      activeQuery = queryParam;
    }

    // build Lucene query from defaults and request parameters
    QueryBuilder qb = new QueryBuilder(queryParam);
    if (!qb.containsField(Lucene.rid.name())) {
      // specify the repository
      qb.and(Lucene.rid.matches(getRepositoryModel().getRID()));
    }
    if (!qb.containsField(Lucene.responsible.name())) {
      // specify the responsible
      qb.and(Lucene.responsible.matches(assignedToParam));
    }
    if (!qb.containsField(Lucene.milestone.name())) {
      // specify the milestone
      qb.and(Lucene.milestone.matches(milestoneParam));
    }
    if (!qb.containsField(Lucene.status.name()) && !ArrayUtils.isEmpty(statiiParam)) {
      // specify the states
      boolean not = false;
      QueryBuilder q = new QueryBuilder();
      for (String state : statiiParam) {
        if (state.charAt(0) == '!') {
          not = true;
          q.and(Lucene.status.doesNotMatch(state.substring(1)));
        } else {
          q.or(Lucene.status.matches(state));
        }
      }
      if (not) {
        qb.and(q.toString());
      } else {
        qb.and(q.toSubquery().toString());
      }
    }
    final String luceneQuery = qb.build();

    // open milestones
    List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
    TicketMilestone currentMilestone = null;
    if (!StringUtils.isEmpty(milestoneParam)) {
      for (TicketMilestone tm : milestones) {
        if (tm.name.equals(milestoneParam)) {
          // get the milestone (queries the index)
          currentMilestone = app().tickets().getMilestone(getRepositoryModel(), milestoneParam);
          break;
        }
      }

      if (currentMilestone == null) {
        // milestone not found, create a temporary one
        currentMilestone = new TicketMilestone(milestoneParam);
        String q = QueryBuilder.q(Lucene.rid.matches(getRepositoryModel().getRID())).and(Lucene.milestone.matches(milestoneParam)).build();
        currentMilestone.tickets = app().tickets().queryFor(q, 1, 0, Lucene.number.name(), true);
        milestones.add(currentMilestone);
      }
    }

    Fragment milestonePanel;
    if (currentMilestone == null) {
      milestonePanel = new Fragment("milestonePanel", "noMilestoneFragment", this);
      add(milestonePanel);
    } else {
      milestonePanel = new Fragment("milestonePanel", "milestoneProgressFragment", this);
      milestonePanel.add(new Label("currentMilestone", currentMilestone.name));
      if (currentMilestone.due == null) {
        milestonePanel.add(new Label("currentDueDate", getString("gb.notSpecified")));
      } else {
        milestonePanel.add(WicketUtils.createDateLabel("currentDueDate", currentMilestone.due, GitBlitWebSession
            .get().getTimezone(), getTimeUtils(), false));
      }
      Label label = new Label("progress");
      WicketUtils.setCssStyle(label, "width:" + currentMilestone.getProgress() + "%;");
      milestonePanel.add(label);

      milestonePanel.add(new LinkPanel("openTickets", null,
          MessageFormat.format(getString("gb.nOpenTickets"), currentMilestone.getOpenTickets()),
          TicketsPage.class,
          queryParameters(null, currentMilestone.name, TicketsUI.openStatii, null, sortBy, desc, 1)));

      milestonePanel.add(new LinkPanel("closedTickets", null,
          MessageFormat.format(getString("gb.nClosedTickets"), currentMilestone.getClosedTickets()),
          TicketsPage.class,
          queryParameters(null, currentMilestone.name, TicketsUI.closedStatii, null, sortBy, desc, 1)));

      milestonePanel.add(new Label("totalTickets", MessageFormat.format(getString("gb.nTotalTickets"), currentMilestone.getTotalTickets())));
      add(milestonePanel);
    }

    Fragment milestoneDropdown = new Fragment("milestoneDropdown", "milestoneDropdownFragment", this);
    PageParameters resetMilestone = queryParameters(queryParam, null, statiiParam, assignedToParam, sortBy, desc, 1);
    milestoneDropdown.add(new BookmarkablePageLink<Void>("resetMilestone", TicketsPage.class, resetMilestone));

    ListDataProvider<TicketMilestone> milestonesDp = new ListDataProvider<TicketMilestone>(milestones);
    DataView<TicketMilestone> milestonesMenu = new DataView<TicketMilestone>("milestone", milestonesDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketMilestone> item) {
        final TicketMilestone tm = item.getModelObject();
        PageParameters params = queryParameters(queryParam, tm.name, statiiParam, assignedToParam, sortBy, desc, 1);
        item.add(new LinkPanel("milestoneLink", null, tm.name, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    milestoneDropdown.add(milestonesMenu);
    milestonePanel.add(milestoneDropdown);

    // search or query tickets
    int page = Math.max(1,  WicketUtils.getPage(params));
    int pageSize = app().settings().getInteger(Keys.tickets.perPage, 25);
    List<QueryResult> results;
    if (StringUtils.isEmpty(searchParam)) {
      results = app().tickets().queryFor(luceneQuery, page, pageSize, sortBy, desc);
    } else {
      results = app().tickets().searchFor(getRepositoryModel(), searchParam, page, pageSize);
    }
    int totalResults = results.size() == 0 ? 0 : results.get(0).totalResults;

    // standard queries
    add(new BookmarkablePageLink<Void>("changesQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Proposal.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("bugsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Bug.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("enhancementsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Enhancement.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("tasksQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Task.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("questionsQuery", TicketsPage.class,
        queryParameters(
            Lucene.type.matches(TicketModel.Type.Question.name()),
            milestoneParam,
            statiiParam,
            assignedToParam,
            sortBy,
            desc,
            1)));

    add(new BookmarkablePageLink<Void>("resetQuery", TicketsPage.class,
        queryParameters(
            null,
            milestoneParam,
            TicketsUI.openStatii,
            null,
            null,
            true,
            1)));

    if (isAuthenticated) {
      add(new Label("userDivider"));
      add(new BookmarkablePageLink<Void>("createdQuery", TicketsPage.class,
          queryParameters(
              Lucene.createdby.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));

      add(new BookmarkablePageLink<Void>("watchedQuery", TicketsPage.class,
          queryParameters(
              Lucene.watchedby.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));
      add(new BookmarkablePageLink<Void>("mentionsQuery", TicketsPage.class,
          queryParameters(
              Lucene.mentions.matches(user.username),
              milestoneParam,
              statiiParam,
              assignedToParam,
              sortBy,
              desc,
              1)));
    } else {
      add(new Label("userDivider").setVisible(false));
      add(new Label("createdQuery").setVisible(false));
      add(new Label("watchedQuery").setVisible(false));
      add(new Label("mentionsQuery").setVisible(false));
    }

    Set<TicketQuery> dynamicQueries = new TreeSet<TicketQuery>();
    for (TicketLabel label : app().tickets().getLabels(getRepositoryModel())) {
      String q = QueryBuilder.q(Lucene.labels.matches(label.name)).build();
      dynamicQueries.add(new TicketQuery(label.name, q).color(label.color));
    }

    for (QueryResult ticket : results) {
      if (!StringUtils.isEmpty(ticket.topic)) {
        String q = QueryBuilder.q(Lucene.topic.matches(ticket.topic)).build();
        dynamicQueries.add(new TicketQuery(ticket.topic, q));
      }

      if (!ArrayUtils.isEmpty(ticket.labels)) {
        for (String label : ticket.labels) {
          String q = QueryBuilder.q(Lucene.labels.matches(label)).build();
          dynamicQueries.add(new TicketQuery(label, q));
        }
      }
    }

    if (dynamicQueries.size() == 0) {
      add(new Label("dynamicQueries").setVisible(false));
    } else {
      Fragment fragment = new Fragment("dynamicQueries", "dynamicQueriesFragment", this);
      ListDataProvider<TicketQuery> dynamicQueriesDp = new ListDataProvider<TicketQuery>(new ArrayList<TicketQuery>(dynamicQueries));
      DataView<TicketQuery> dynamicQueriesList = new DataView<TicketQuery>("dynamicQuery", dynamicQueriesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<TicketQuery> item) {
          final TicketQuery tq = item.getModelObject();
          Component swatch = new Label("swatch", "&nbsp;").setEscapeModelStrings(false);
          if (StringUtils.isEmpty(tq.color)) {
            // calculate a color
            tq.color = StringUtils.getColor(tq.name);
          }
          String background = MessageFormat.format("background-color:{0};", tq.color);
          swatch.add(new SimpleAttributeModifier("style", background));
          item.add(swatch);
          if (activeQuery.contains(tq.query)) {
            // selected
            String q = QueryBuilder.q(activeQuery).remove(tq.query).build();
            PageParameters params = queryParameters(q, milestoneParam, statiiParam, assignedToParam, sortBy, desc, 1);
            item.add(new LinkPanel("link", "active", tq.name, TicketsPage.class, params).setRenderBodyOnly(true));
            Label checked = new Label("checked");
            WicketUtils.setCssClass(checked, "iconic-o-x");
            item.add(checked);
            item.add(new SimpleAttributeModifier("style", background));
          } else {
            // unselected
            String q = QueryBuilder.q(queryParam).toSubquery().and(tq.query).build();
            PageParameters params = queryParameters(q, milestoneParam, statiiParam, assignedToParam, sortBy, desc, 1);
            item.add(new LinkPanel("link", null, tq.name, TicketsPage.class, params).setRenderBodyOnly(true));
            item.add(new Label("checked").setVisible(false));
          }
        }
      };
      fragment.add(dynamicQueriesList);
      add(fragment);
    }

    // states
    if (ArrayUtils.isEmpty(statiiParam)) {
      add(new Label("selectedStatii", getString("gb.all")));
    } else {
      add(new Label("selectedStatii", StringUtils.flattenStrings(Arrays.asList(statiiParam), ",")));
    }
    add(new BookmarkablePageLink<Void>("openTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, TicketsUI.openStatii, assignedToParam, sortBy, desc, 1)));
    add(new BookmarkablePageLink<Void>("closedTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, TicketsUI.closedStatii, assignedToParam, sortBy, desc, 1)));
    add(new BookmarkablePageLink<Void>("allTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, null, assignedToParam, sortBy, desc, 1)));

    // by status
    List<Status> statii = new ArrayList<Status>(Arrays.asList(Status.values()));
    statii.remove(Status.Closed);
    ListDataProvider<Status> resolutionsDp = new ListDataProvider<Status>(statii);
    DataView<Status> statiiLinks = new DataView<Status>("statii", resolutionsDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<Status> item) {
        final Status status = item.getModelObject();
        PageParameters p = queryParameters(queryParam, milestoneParam, new String [] { status.name().toLowerCase() }, assignedToParam, sortBy, desc, 1);
        String css = TicketsUI.getStatusClass(status);
        item.add(new LinkPanel("statusLink", css, status.toString(), TicketsPage.class, p).setRenderBodyOnly(true));
      }
    };
    add(statiiLinks);

    // responsible filter
    List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
    for (RegistrantAccessPermission perm : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
      if (perm.permission.atLeast(AccessPermission.PUSH)) {
        UserModel u = app().users().getUserModel(perm.registrant);
        responsibles.add(new TicketResponsible(u));
      }
    }
    Collections.sort(responsibles);
    responsibles.add(0, any);

    TicketResponsible currentResponsible = null;
    for (TicketResponsible u : responsibles) {
      if (u.username.equals(assignedToParam)) {
        currentResponsible = u;
        break;
      }
    }

    add(new Label("currentResponsible", currentResponsible == null ? "" : currentResponsible.displayname));
    ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles);
    DataView<TicketResponsible> responsibleMenu = new DataView<TicketResponsible>("responsible", responsibleDp) {
      private static final long serialVersionUID = 1L;

      @Override
      public void populateItem(final Item<TicketResponsible> item) {
        final TicketResponsible u = item.getModelObject();
        PageParameters params = queryParameters(queryParam, milestoneParam, statiiParam, u.username, sortBy, desc, 1);
        item.add(new LinkPanel("responsibleLink", null, u.displayname, TicketsPage.class, params).setRenderBodyOnly(true));
      }
    };
    add(responsibleMenu);
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

      List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
      for (String username : userlist) {
        UserModel user = app().users().getUserModel(username);
        if (user != null && !user.disabled) {
          TicketResponsible responsible = new TicketResponsible(user);
          responsibles.add(responsible);
          if (user.username.equals(ticket.responsible)) {
            responsibleModel.setObject(responsible);
          }
        }
      }
      Collections.sort(responsibles);
      responsibles.add(new TicketResponsible(NIL, "", ""));
      Fragment responsible = new Fragment("responsible", "responsibleFragment", this);
      responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles));
      form.add(responsible.setVisible(!responsibles.isEmpty()));

      // milestone
      List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
      for (TicketMilestone milestone : milestones) {
        if (milestone.name.equals(ticket.milestone)) {
          milestoneModel.setObject(milestone);
          break;
        }
      }
      if (milestoneModel.getObject() == null && !StringUtils.isEmpty(ticket.milestone)) {
        // ensure that this unrecognized milestone is listed
        // so that we get the <nil> selection.
        TicketMilestone tms = new TicketMilestone(ticket.milestone);
        milestones.add(tms);
        milestoneModel.setObject(tms);
      }
      if (!milestones.isEmpty()) {
        milestones.add(new TicketMilestone(NIL));
      }

      Fragment milestone = new Fragment("milestone", "milestoneFragment", this);

      milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
      form.add(milestone.setVisible(!milestones.isEmpty()));

      // mergeTo (integration branch)
      List<String> branches = new ArrayList<String>();
      for (String branch : getRepositoryModel().getLocalBranches()) {
        // exclude ticket branches
        if (!branch.startsWith(Constants.R_TICKET)) {
          branches.add(Repository.shortenRefName(branch));
        }
      }
      branches.remove(Repository.shortenRefName(getRepositoryModel().mergeTo));
      branches.add(0, Repository.shortenRefName(getRepositoryModel().mergeTo));

      Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this);
      mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches));
      form.add(mergeto.setVisible(!branches.isEmpty()));
    } else {
      // user can not admin this ticket
      form.add(new Label("responsible").setVisible(false));
      form.add(new Label("milestone").setVisible(false));
      form.add(new Label("mergeto").setVisible(false));
    }

    form.add(new AjaxButton("update") {

      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        long ticketId = 0L;
        try {
          String h = WicketUtils.getObject(getPageParameters());
          ticketId = Long.parseLong(h);
        } catch (Exception e) {
          setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName));
        }

        TicketModel ticket = app().tickets().getTicket(getRepositoryModel(), ticketId);

        String createdBy = GitBlitWebSession.get().getUsername();
        Change change = new Change(createdBy);

        String title = titleModel.getObject();
        if (StringUtils.isEmpty(title)) {
          return;
        }

        if (!ticket.title.equals(title)) {
          // title change
          change.setField(Field.title, title);
        }

        String description = Optional.fromNullable(descriptionEditor.getText()).or("");
        if ((StringUtils.isEmpty(ticket.body) && !StringUtils.isEmpty(description))
            || (!StringUtils.isEmpty(ticket.body) && !ticket.body.equals(description))) {
          // description change
          change.setField(Field.body, description);
        }

        Status status = statusModel.getObject();
        if (!ticket.status.equals(status)) {
          // status change
          change.setField(Field.status, status);
        }

        Type type = typeModel.getObject();
        if (!ticket.type.equals(type)) {
          // type change
          change.setField(Field.type, type);
        }

        String topic = Optional.fromNullable(topicModel.getObject()).or("");
        if ((StringUtils.isEmpty(ticket.topic) && !StringUtils.isEmpty(topic))
          || (!StringUtils.isEmpty(ticket.topic) && !ticket.topic.equals(topic))) {
          // topic change
          change.setField(Field.topic, topic);
        }

        TicketResponsible responsible = responsibleModel == null ? null : responsibleModel.getObject();
        if (responsible != null && !responsible.username.equals(ticket.responsible)) {
          // responsible change
          change.setField(Field.responsible, responsible.username);
          if (!StringUtils.isEmpty(responsible.username)) {
            if (!ticket.isWatching(responsible.username)) {
View Full Code Here

Examples of com.gitblit.tickets.TicketResponsible

      List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
      for (String username : userlist) {
        UserModel user = app().users().getUserModel(username);
        if (user != null && !user.disabled) {
          TicketResponsible responsible = new TicketResponsible(user);
          responsibles.add(responsible);
        }
      }
      Collections.sort(responsibles);
      Fragment responsible = new Fragment("responsible", "responsibleFragment", this);
      responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles));
      form.add(responsible.setVisible(!responsibles.isEmpty()));

      // milestone
      List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open);
      Fragment milestone = new Fragment("milestone", "milestoneFragment", this);
      milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
      form.add(milestone.setVisible(!milestones.isEmpty()));

      // integration branch
      List<String> branches = new ArrayList<String>();
      for (String branch : getRepositoryModel().getLocalBranches()) {
        // exclude ticket branches
        if (!branch.startsWith(Constants.R_TICKET)) {
          branches.add(Repository.shortenRefName(branch));
        }
      }
      branches.remove(Repository.shortenRefName(getRepositoryModel().HEAD));
      branches.add(0, Repository.shortenRefName(getRepositoryModel().HEAD));

      Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this);
      mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches));
      form.add(mergeto.setVisible(!branches.isEmpty()));
    } else {
      // user does not have permission to assign milestone, responsible, or mergeto
      form.add(new Label("responsible").setVisible(false));
      form.add(new Label("milestone").setVisible(false));
      form.add(new Label("mergeto").setVisible(false));
    }

    form.add(new AjaxButton("create") {

      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        String title = titleModel.getObject();
        if (StringUtils.isEmpty(title)) {
          return;
        }

        String createdBy = GitBlitWebSession.get().getUsername();
        Change change = new Change(createdBy);
        change.setField(Field.title, title);
        change.setField(Field.body, descriptionEditor.getText());
        String topic = topicModel.getObject();
        if (!StringUtils.isEmpty(topic)) {
          change.setField(Field.topic, topic);
        }

        // type
        TicketModel.Type type = TicketModel.Type.defaultType;
        if (typeModel.getObject() != null) {
          type = typeModel.getObject();
        }
        change.setField(Field.type, type);

        // responsible
        TicketResponsible responsible = responsibleModel == null ? null : responsibleModel.getObject();
        if (responsible != null) {
          change.setField(Field.responsible, responsible.username);
        }

        // milestone
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.