public AlphabeticalLabelGroupingSupport(Set<String> labels) { this.data = labels; fillBuckets(); mergeBuckets(); }
final List<LabelGroup> groups = Lists.newArrayList(); for (String key : alphaSupport.getKeys()) final Set<String> labels = alphaSupport.getContents(key); List<LabelElement> elements = Lists.newArrayList(); for (String label : labels)
private void fillBuckets() { for (String label : data) { char firstCharacter = extractFirstCharacter(label); if (Character.isLetter(firstCharacter)) { alphabetBuckets.putSingle(Character.toUpperCase(firstCharacter) + "", label); } else if (Character.isDigit(firstCharacter)) { alphabetBuckets.putSingle(NUMERIC, label); } } }
private void mergeBuckets() { int minGroupSize = alphabetBuckets.size() / KEYS.length + MIN_GROUP_SIZE; String lastBucketKey = KEYS[0]; boolean flipLastBucketKey = true; Set<String> currentBucket = new TreeSet<String>(); for (String currentKey : KEYS) { if (flipLastBucketKey) { lastBucketKey = currentKey; flipLastBucketKey = false; } final Set<String> currentLabels = alphabetBuckets.remove(currentKey + ""); if (currentLabels != null) { currentBucket.addAll(currentLabels); if (currentBucket.size() >= minGroupSize) { alphabetBuckets.put(getBucketKey(lastBucketKey, currentKey), currentBucket); currentBucket = new TreeSet<String>(); flipLastBucketKey = true; } } } if (!currentBucket.isEmpty()) { alphabetBuckets.put(getBucketKey(lastBucketKey, LAST_KEY), currentBucket); } }
@Override public AlphabeticalLabelGroupingSupport getAlphabeticallyGroupedLabels(final ApplicationUser user, final Long projectId, final String fieldId) { final StatisticAccessorBean statBean = new StatisticAccessorBean(user, getProjectFilter(projectId)); try { @SuppressWarnings ("unchecked") final StatisticMapWrapper<Label, Number> statWrapper = statBean.getAllFilterBy(fieldId, StatisticAccessorBean.OrderBy.NATURAL, StatisticAccessorBean.Direction.ASC); final Set<String> uniqueLabels = Sets.newHashSet(); uniqueLabels.addAll( statWrapper.keySet() .stream() .filter(label -> label != null && label.getLabel() != null) .map(Label::getLabel) .collect(Collectors.toList()) ); return new AlphabeticalLabelGroupingSupport(uniqueLabels); } catch (SearchException e) { throw new RuntimeException(e); } }
@Override public String getHtml(final ApplicationUser remoteUser, final Long projectId, final String fieldId, final boolean isOtherFieldsExist) { try { final AlphabeticalLabelGroupingSupport alphabeticallyGroupedLabels = alphabeticalLabelGroupingService.getAlphabeticallyGroupedLabels(remoteUser, projectId, fieldId); final Map<String, Object> startingParams = getDefaultVelocityParams(); startingParams.put("field", fieldManager.getField(fieldId)); startingParams.put("project", projectManager.getProjectObj(projectId)); startingParams.put("labelUtils", labelUtil); startingParams.put("labelCount", alphabeticallyGroupedLabels.getUniqueLabelsCount()); startingParams.put("alphaSupport", alphabeticallyGroupedLabels); startingParams.put("isCustomField", fieldId.startsWith(CustomFieldUtils.CUSTOM_FIELD_PREFIX)); startingParams.put("remoteUser", remoteUser); startingParams.put("i18n", beanFactory.getInstance(remoteUser)); startingParams.put("isOtherFieldsExist", isOtherFieldsExist); return templatingEngine.render(file("templates/plugins/jira/projectpanels/labels-alphabetical.vm")) .applying(startingParams) .asHtml(); } catch (VelocityException e) { throw new RuntimeException(e); } }