PageRenderTime 56ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests/src/main/java/com/atlassian/jira/issue/index/MemoryIssueIndexer.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 121 lines | 101 code | 18 blank | 2 comment | 3 complexity | a73ea17495226b3ec68bcdd52f724461 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.issue.index;
  2. import com.atlassian.jira.component.ComponentAccessor;
  3. import com.atlassian.jira.config.properties.ApplicationProperties;
  4. import com.atlassian.jira.exception.DataAccessException;
  5. import com.atlassian.jira.index.SearchExtractorRegistrationManager;
  6. import com.atlassian.jira.issue.Issue;
  7. import com.atlassian.jira.issue.IssueManager;
  8. import com.atlassian.jira.issue.IssueRelationConstants;
  9. import com.atlassian.jira.issue.changehistory.ChangeHistoryGroup;
  10. import com.atlassian.jira.issue.changehistory.ChangeHistoryItem;
  11. import com.atlassian.jira.issue.comments.Comment;
  12. import com.atlassian.jira.issue.comments.CommentComparator;
  13. import com.atlassian.jira.issue.comments.MockComment;
  14. import com.atlassian.jira.mock.MockApplicationProperties;
  15. import com.atlassian.jira.util.Function;
  16. import com.atlassian.jira.util.JiraDateUtils;
  17. import com.atlassian.jira.util.searchers.MockSearcherFactory;
  18. import org.apache.lucene.store.Directory;
  19. import org.ofbiz.core.entity.GenericEntityException;
  20. import org.ofbiz.core.entity.GenericValue;
  21. import java.sql.Timestamp;
  22. import java.util.ArrayList;
  23. import java.util.Collections;
  24. import java.util.List;
  25. public class MemoryIssueIndexer extends DefaultIssueIndexer {
  26. public MemoryIssueIndexer() {
  27. this(new Function<IndexDirectoryFactory.Name, Directory>() {
  28. public Directory get(final IndexDirectoryFactory.Name type) {
  29. return MockSearcherFactory.getCleanRAMDirectory();
  30. }
  31. }, ComponentAccessor.getComponentOfType(IssueManager.class));
  32. }
  33. public MemoryIssueIndexer(final Function<IndexDirectoryFactory.Name, Directory> directorySupplier, final IssueManager issueManager) {
  34. this(directorySupplier, issueManager, new MockApplicationProperties());
  35. }
  36. public MemoryIssueIndexer(final Function<IndexDirectoryFactory.Name, Directory> directorySupplier,
  37. final IssueManager issueManager, final ApplicationProperties applicationProperties) {
  38. super(
  39. new MockIndexDirectoryFactory(directorySupplier, applicationProperties),
  40. new CommentRetrieverImpl(issueManager),
  41. new ChangeHistoryRetrieverImpl(issueManager),
  42. new DefaultWorklogRetriever(), applicationProperties,
  43. new DefaultIssueDocumentFactory(ComponentAccessor.getComponentOfType(SearchExtractorRegistrationManager.class)),
  44. new DefaultCommentDocumentFactory(ComponentAccessor.getComponentOfType(SearchExtractorRegistrationManager.class)),
  45. new DefaultChangeHistoryDocumentFactory(ComponentAccessor.getComponentOfType(SearchExtractorRegistrationManager.class)),
  46. new DefaultWorklogDocumentFactory(ComponentAccessor.getComponentOfType(SearchExtractorRegistrationManager.class)),
  47. issueManager);
  48. }
  49. static class CommentRetrieverImpl implements CommentRetriever {
  50. private final IssueManager issueManager;
  51. public CommentRetrieverImpl(final IssueManager issueManager) {
  52. this.issueManager = issueManager;
  53. }
  54. public List<Comment> apply(final Issue issue) {
  55. final List<Comment> comments = new ArrayList<Comment>();
  56. try {
  57. // get a List<GenericValue> of comments
  58. final List<GenericValue> allComments = issueManager.getEntitiesByIssueObject(IssueRelationConstants.COMMENTS, issue);
  59. for (final GenericValue element : allComments) {
  60. comments.add(new SimpleComment(element, issue));
  61. }
  62. } catch (final GenericEntityException e) {
  63. throw new DataAccessException(e);
  64. }
  65. Collections.sort(comments, CommentComparator.COMPARATOR);
  66. return comments;
  67. }
  68. }
  69. static class ChangeHistoryRetrieverImpl implements ChangeHistoryRetriever {
  70. private final IssueManager issueManager;
  71. public ChangeHistoryRetrieverImpl(final IssueManager issueManager) {
  72. this.issueManager = issueManager;
  73. }
  74. public List<ChangeHistoryGroup> apply(final Issue issue) {
  75. final List<ChangeHistoryGroup> changeGroups = new ArrayList<ChangeHistoryGroup>();
  76. try {
  77. // get a List<GenericValue> of changes
  78. final List<GenericValue> allChanges = issueManager.getEntitiesByIssueObject(IssueRelationConstants.CHANGE_GROUPS, issue);
  79. for (final GenericValue element : allChanges) {
  80. final List<ChangeHistoryItem> changes = new ArrayList<ChangeHistoryItem>();
  81. final List<GenericValue> changeitems = element.getRelated("ChildChangeItem");
  82. for (final GenericValue changeItem : changeitems) {
  83. changes.add(new ChangeHistoryItem(changeItem.getLong("id"), changeItem.getLong("group"), issue.getProjectObject().getId(), issue.getId(), issue.getKey(), "status",
  84. new Timestamp(System.currentTimeMillis()), changeItem.getString("oldstring"),
  85. changeItem.getString("newstring"), changeItem.getString("oldvalue"),
  86. changeItem.getString("newvalue"), element.getString("author")));
  87. }
  88. changeGroups.add(new ChangeHistoryGroup(element.getLong("id"), issue.getProjectObject().getId(), issue.getId(), issue.getKey(), element.getString("author"), changes, element.getTimestamp("created")));
  89. }
  90. } catch (final Exception e) {
  91. throw new DataAccessException(e);
  92. }
  93. return changeGroups;
  94. }
  95. }
  96. private static class SimpleComment extends MockComment {
  97. SimpleComment(final GenericValue gv, final Issue issue) {
  98. super(gv.getLong("id"), gv.getString("author"), gv.getString("updateauthor"), gv.getString("body"), gv.getString("level"),
  99. gv.getLong("rolelevel"), JiraDateUtils.copyDateNullsafe(gv.getTimestamp("created")),
  100. JiraDateUtils.copyDateNullsafe(gv.getTimestamp("updated")), issue);
  101. }
  102. }
  103. }