/src/main/java/com/atlassian/jira/collector/plugin/components/CollectorStoreImpl.java
Java | 229 lines | 199 code | 26 blank | 4 comment | 16 complexity | cbb4eacb652dd6abccaee7472a0ab728 MD5 | raw file
- package com.atlassian.jira.collector.plugin.components;
- import com.atlassian.sal.api.pluginsettings.PluginSettings;
- import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
- import com.atlassian.security.random.DefaultSecureTokenGenerator;
- import org.apache.log4j.Logger;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- /**
- * TODO: Document this class / interface here
- */
- public class CollectorStoreImpl implements CollectorStore
- {
- private static final Logger log = Logger.getLogger(CollectorStoreImpl.class);
- public static final String COLLECTOR_IDS = "COLLECTOR_IDS";
- static final class Fields
- {
- static final String COLLECTOR_ID = "collectorId";
- static final String COLLECTOR_NAME = "name";
- static final String PROJECT_ID = "projectId";
- static final String ISSUE_TYPE_ID = "issueTypeId";
- static final String REPORTER = "reporter";
- static final String DESCRIPTION = "description";
- static final String ENABLED = "enabled";
- static final String RECORD_WEB_INFO = "recordWebInfo";
- static final String TEMPLATE_ID = "templateId";
- static final String USE_CREDENTIALS = "useCredentials";
- static final String TRIGGER_TEXT = "triggerText";
- static final String TRIGGER_POSITION = "triggerPosition";
- static final String TRIGGER_CUSTOM_FUNC = "triggerCustomFunc";
- private Fields() {}
- }
- private final PluginSettingsFactory pluginSettingsFactory;
- private final TemplateStore templateStore;
- public CollectorStoreImpl(final PluginSettingsFactory pluginSettingsFactory,
- final TemplateStore templateStore)
- {
- this.pluginSettingsFactory = pluginSettingsFactory;
- this.templateStore = templateStore;
- }
- @Override
- public List<Collector> getCollectors()
- {
- final PluginSettings globalSettings = pluginSettingsFactory.createGlobalSettings();
- final List<String> ids = getAllCollectorIds(globalSettings);
- final List<Collector> collectors = new ArrayList<Collector>();
- for (String id : ids)
- {
- final Collector collector = getCollector(id);
- if (collector != null)
- {
- collectors.add(collector);
- }
- }
- return collectors;
- }
- @Override
- public Collector getCollector(final String collectorId)
- {
- final PluginSettings settings = pluginSettingsFactory.createSettingsForKey(collectorId);
- Object id = settings.get(Fields.COLLECTOR_ID);
- if (id == null)
- {
- return null;
- }
- else
- {
- final Trigger trigger = new Trigger(
- (String) settings.get(Fields.TRIGGER_TEXT),
- Trigger.Position.valueOf((String) settings.get(Fields.TRIGGER_POSITION)),
- (String) settings.get(Fields.TRIGGER_CUSTOM_FUNC));
- return new Collector.Builder().
- id((String) settings.get(Fields.COLLECTOR_ID)).
- name((String) settings.get(Fields.COLLECTOR_NAME)).
- projectId(getLongValue(settings, Fields.PROJECT_ID, collectorId)).
- issueTypeId(getLongValue(settings, Fields.ISSUE_TYPE_ID, collectorId)).
- reporter((String) settings.get(Fields.REPORTER)).
- description((String) settings.get(Fields.DESCRIPTION)).
- template(templateStore.getTemplate((String) settings.get(Fields.TEMPLATE_ID))).
- enabled(getBooleanValue(settings.get(Fields.ENABLED))).
- recoredWebInfo(getBooleanValue(settings.get(Fields.RECORD_WEB_INFO))).
- useCredentials(getBooleanValue(settings.get(Fields.USE_CREDENTIALS))).
- trigger(trigger).
- build();
- }
- }
- private boolean getBooleanValue(final Object booleanObject)
- {
- if (booleanObject == null)
- {
- return false;
- }
- return Boolean.valueOf((String) booleanObject);
- }
- @Override
- public boolean enableCollector(final String collectorId)
- {
- final Collector collector = getCollector(collectorId);
- if (collector != null)
- {
- storeCollector(new Collector.Builder().collector(collector).enabled(true).build());
- }
- return false;
- }
- @Override
- public boolean disableCollector(final String collectorId)
- {
- final Collector collector = getCollector(collectorId);
- if (collector != null)
- {
- storeCollector(new Collector.Builder().collector(collector).enabled(false).build());
- return true;
- }
- return false;
- }
- @Override
- public void deleteCollector(final String collectorId)
- {
- PluginSettings globalSettings = pluginSettingsFactory.createGlobalSettings();
- List<String> allCollectorIds = getAllCollectorIds(globalSettings);
- if (allCollectorIds.contains(collectorId))
- {
- final List<String> collectorIds = new ArrayList<String>(allCollectorIds);
- collectorIds.remove(collectorId);
- globalSettings.put(COLLECTOR_IDS, collectorIds);
- }
- PluginSettings settings = pluginSettingsFactory.createSettingsForKey(collectorId);
- settings.remove(Fields.COLLECTOR_ID);
- settings.remove(Fields.COLLECTOR_NAME);
- settings.remove(Fields.PROJECT_ID);
- settings.remove(Fields.ISSUE_TYPE_ID);
- settings.remove(Fields.DESCRIPTION);
- settings.remove(Fields.REPORTER);
- settings.remove(Fields.ENABLED);
- settings.remove(Fields.RECORD_WEB_INFO);
- settings.remove(Fields.TEMPLATE_ID);
- settings.remove(Fields.USE_CREDENTIALS);
- settings.remove(Fields.TRIGGER_TEXT);
- settings.remove(Fields.TRIGGER_POSITION);
- settings.remove(Fields.TRIGGER_CUSTOM_FUNC);
- }
- @Override
- public Collector addCollector(final Collector input)
- {
- String collectorId = generateCollectorId();
- //just in case the collector is already taken!
- while (getCollector(collectorId) != null)
- {
- collectorId = generateCollectorId();
- }
- storeCollector(new Collector.Builder().collector(input).id(collectorId).build());
- PluginSettings globalSettings = pluginSettingsFactory.createGlobalSettings();
- final List<String> allCollectorIds = new ArrayList<String>();
- allCollectorIds.addAll(getAllCollectorIds(globalSettings));
- allCollectorIds.add(collectorId);
- globalSettings.put(COLLECTOR_IDS, allCollectorIds);
- return getCollector(collectorId);
- }
- private void storeCollector(final Collector input)
- {
- final PluginSettings settings = pluginSettingsFactory.createSettingsForKey(input.getId());
- settings.put(Fields.COLLECTOR_ID, input.getId());
- settings.put(Fields.COLLECTOR_NAME, input.getName());
- settings.put(Fields.PROJECT_ID, input.getProjectId().toString());
- settings.put(Fields.ISSUE_TYPE_ID, input.getIssueTypeId().toString());
- settings.put(Fields.REPORTER, input.getReporter());
- settings.put(Fields.DESCRIPTION, input.getDescription());
- settings.put(Fields.TEMPLATE_ID, input.getTemplate().getId());
- settings.put(Fields.ENABLED, Boolean.valueOf(input.isEnabled()).toString());
- settings.put(Fields.RECORD_WEB_INFO, Boolean.valueOf(input.isRecordWebInfo()).toString());
- settings.put(Fields.USE_CREDENTIALS, Boolean.valueOf(input.isUseCredentials()).toString());
- settings.put(Fields.TRIGGER_TEXT, input.getTrigger().getText());
- settings.put(Fields.TRIGGER_POSITION, input.getTrigger().getPosition().toString());
- settings.put(Fields.TRIGGER_CUSTOM_FUNC, input.getTrigger().getCustomFunction());
- }
- private List<String> getAllCollectorIds(final PluginSettings globalSettings)
- {
- @SuppressWarnings ("unchecked")
- final List<String> ids = (List<String>) globalSettings.get(COLLECTOR_IDS);
- if (ids == null)
- {
- return Collections.emptyList();
- }
- return ids;
- }
- private Long getLongValue(final PluginSettings settings, final String field, final String id)
- {
- final String valueString = (String) settings.get(field);
- try
- {
- return Long.parseLong(valueString);
- }
- catch (NumberFormatException e)
- {
- log.error("Invalid value for collector '" + id + "' field '" + field + "': '" + valueString + "'");
- return null;
- }
- }
- private String generateCollectorId()
- {
- return DefaultSecureTokenGenerator.getInstance().generateToken().substring(0, 8);
- }
- }