PageRenderTime 31ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/jira/collector/plugin/components/CollectorStoreImpl.java

https://bitbucket.org/knecht_andreas/jira-issue-collector-plugin/
Java | 229 lines | 199 code | 26 blank | 4 comment | 16 complexity | cbb4eacb652dd6abccaee7472a0ab728 MD5 | raw file
  1. package com.atlassian.jira.collector.plugin.components;
  2. import com.atlassian.sal.api.pluginsettings.PluginSettings;
  3. import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
  4. import com.atlassian.security.random.DefaultSecureTokenGenerator;
  5. import org.apache.log4j.Logger;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.List;
  9. /**
  10. * TODO: Document this class / interface here
  11. */
  12. public class CollectorStoreImpl implements CollectorStore
  13. {
  14. private static final Logger log = Logger.getLogger(CollectorStoreImpl.class);
  15. public static final String COLLECTOR_IDS = "COLLECTOR_IDS";
  16. static final class Fields
  17. {
  18. static final String COLLECTOR_ID = "collectorId";
  19. static final String COLLECTOR_NAME = "name";
  20. static final String PROJECT_ID = "projectId";
  21. static final String ISSUE_TYPE_ID = "issueTypeId";
  22. static final String REPORTER = "reporter";
  23. static final String DESCRIPTION = "description";
  24. static final String ENABLED = "enabled";
  25. static final String RECORD_WEB_INFO = "recordWebInfo";
  26. static final String TEMPLATE_ID = "templateId";
  27. static final String USE_CREDENTIALS = "useCredentials";
  28. static final String TRIGGER_TEXT = "triggerText";
  29. static final String TRIGGER_POSITION = "triggerPosition";
  30. static final String TRIGGER_CUSTOM_FUNC = "triggerCustomFunc";
  31. private Fields() {}
  32. }
  33. private final PluginSettingsFactory pluginSettingsFactory;
  34. private final TemplateStore templateStore;
  35. public CollectorStoreImpl(final PluginSettingsFactory pluginSettingsFactory,
  36. final TemplateStore templateStore)
  37. {
  38. this.pluginSettingsFactory = pluginSettingsFactory;
  39. this.templateStore = templateStore;
  40. }
  41. @Override
  42. public List<Collector> getCollectors()
  43. {
  44. final PluginSettings globalSettings = pluginSettingsFactory.createGlobalSettings();
  45. final List<String> ids = getAllCollectorIds(globalSettings);
  46. final List<Collector> collectors = new ArrayList<Collector>();
  47. for (String id : ids)
  48. {
  49. final Collector collector = getCollector(id);
  50. if (collector != null)
  51. {
  52. collectors.add(collector);
  53. }
  54. }
  55. return collectors;
  56. }
  57. @Override
  58. public Collector getCollector(final String collectorId)
  59. {
  60. final PluginSettings settings = pluginSettingsFactory.createSettingsForKey(collectorId);
  61. Object id = settings.get(Fields.COLLECTOR_ID);
  62. if (id == null)
  63. {
  64. return null;
  65. }
  66. else
  67. {
  68. final Trigger trigger = new Trigger(
  69. (String) settings.get(Fields.TRIGGER_TEXT),
  70. Trigger.Position.valueOf((String) settings.get(Fields.TRIGGER_POSITION)),
  71. (String) settings.get(Fields.TRIGGER_CUSTOM_FUNC));
  72. return new Collector.Builder().
  73. id((String) settings.get(Fields.COLLECTOR_ID)).
  74. name((String) settings.get(Fields.COLLECTOR_NAME)).
  75. projectId(getLongValue(settings, Fields.PROJECT_ID, collectorId)).
  76. issueTypeId(getLongValue(settings, Fields.ISSUE_TYPE_ID, collectorId)).
  77. reporter((String) settings.get(Fields.REPORTER)).
  78. description((String) settings.get(Fields.DESCRIPTION)).
  79. template(templateStore.getTemplate((String) settings.get(Fields.TEMPLATE_ID))).
  80. enabled(getBooleanValue(settings.get(Fields.ENABLED))).
  81. recoredWebInfo(getBooleanValue(settings.get(Fields.RECORD_WEB_INFO))).
  82. useCredentials(getBooleanValue(settings.get(Fields.USE_CREDENTIALS))).
  83. trigger(trigger).
  84. build();
  85. }
  86. }
  87. private boolean getBooleanValue(final Object booleanObject)
  88. {
  89. if (booleanObject == null)
  90. {
  91. return false;
  92. }
  93. return Boolean.valueOf((String) booleanObject);
  94. }
  95. @Override
  96. public boolean enableCollector(final String collectorId)
  97. {
  98. final Collector collector = getCollector(collectorId);
  99. if (collector != null)
  100. {
  101. storeCollector(new Collector.Builder().collector(collector).enabled(true).build());
  102. }
  103. return false;
  104. }
  105. @Override
  106. public boolean disableCollector(final String collectorId)
  107. {
  108. final Collector collector = getCollector(collectorId);
  109. if (collector != null)
  110. {
  111. storeCollector(new Collector.Builder().collector(collector).enabled(false).build());
  112. return true;
  113. }
  114. return false;
  115. }
  116. @Override
  117. public void deleteCollector(final String collectorId)
  118. {
  119. PluginSettings globalSettings = pluginSettingsFactory.createGlobalSettings();
  120. List<String> allCollectorIds = getAllCollectorIds(globalSettings);
  121. if (allCollectorIds.contains(collectorId))
  122. {
  123. final List<String> collectorIds = new ArrayList<String>(allCollectorIds);
  124. collectorIds.remove(collectorId);
  125. globalSettings.put(COLLECTOR_IDS, collectorIds);
  126. }
  127. PluginSettings settings = pluginSettingsFactory.createSettingsForKey(collectorId);
  128. settings.remove(Fields.COLLECTOR_ID);
  129. settings.remove(Fields.COLLECTOR_NAME);
  130. settings.remove(Fields.PROJECT_ID);
  131. settings.remove(Fields.ISSUE_TYPE_ID);
  132. settings.remove(Fields.DESCRIPTION);
  133. settings.remove(Fields.REPORTER);
  134. settings.remove(Fields.ENABLED);
  135. settings.remove(Fields.RECORD_WEB_INFO);
  136. settings.remove(Fields.TEMPLATE_ID);
  137. settings.remove(Fields.USE_CREDENTIALS);
  138. settings.remove(Fields.TRIGGER_TEXT);
  139. settings.remove(Fields.TRIGGER_POSITION);
  140. settings.remove(Fields.TRIGGER_CUSTOM_FUNC);
  141. }
  142. @Override
  143. public Collector addCollector(final Collector input)
  144. {
  145. String collectorId = generateCollectorId();
  146. //just in case the collector is already taken!
  147. while (getCollector(collectorId) != null)
  148. {
  149. collectorId = generateCollectorId();
  150. }
  151. storeCollector(new Collector.Builder().collector(input).id(collectorId).build());
  152. PluginSettings globalSettings = pluginSettingsFactory.createGlobalSettings();
  153. final List<String> allCollectorIds = new ArrayList<String>();
  154. allCollectorIds.addAll(getAllCollectorIds(globalSettings));
  155. allCollectorIds.add(collectorId);
  156. globalSettings.put(COLLECTOR_IDS, allCollectorIds);
  157. return getCollector(collectorId);
  158. }
  159. private void storeCollector(final Collector input)
  160. {
  161. final PluginSettings settings = pluginSettingsFactory.createSettingsForKey(input.getId());
  162. settings.put(Fields.COLLECTOR_ID, input.getId());
  163. settings.put(Fields.COLLECTOR_NAME, input.getName());
  164. settings.put(Fields.PROJECT_ID, input.getProjectId().toString());
  165. settings.put(Fields.ISSUE_TYPE_ID, input.getIssueTypeId().toString());
  166. settings.put(Fields.REPORTER, input.getReporter());
  167. settings.put(Fields.DESCRIPTION, input.getDescription());
  168. settings.put(Fields.TEMPLATE_ID, input.getTemplate().getId());
  169. settings.put(Fields.ENABLED, Boolean.valueOf(input.isEnabled()).toString());
  170. settings.put(Fields.RECORD_WEB_INFO, Boolean.valueOf(input.isRecordWebInfo()).toString());
  171. settings.put(Fields.USE_CREDENTIALS, Boolean.valueOf(input.isUseCredentials()).toString());
  172. settings.put(Fields.TRIGGER_TEXT, input.getTrigger().getText());
  173. settings.put(Fields.TRIGGER_POSITION, input.getTrigger().getPosition().toString());
  174. settings.put(Fields.TRIGGER_CUSTOM_FUNC, input.getTrigger().getCustomFunction());
  175. }
  176. private List<String> getAllCollectorIds(final PluginSettings globalSettings)
  177. {
  178. @SuppressWarnings ("unchecked")
  179. final List<String> ids = (List<String>) globalSettings.get(COLLECTOR_IDS);
  180. if (ids == null)
  181. {
  182. return Collections.emptyList();
  183. }
  184. return ids;
  185. }
  186. private Long getLongValue(final PluginSettings settings, final String field, final String id)
  187. {
  188. final String valueString = (String) settings.get(field);
  189. try
  190. {
  191. return Long.parseLong(valueString);
  192. }
  193. catch (NumberFormatException e)
  194. {
  195. log.error("Invalid value for collector '" + id + "' field '" + field + "': '" + valueString + "'");
  196. return null;
  197. }
  198. }
  199. private String generateCollectorId()
  200. {
  201. return DefaultSecureTokenGenerator.getInstance().generateToken().substring(0, 8);
  202. }
  203. }