Jira SAL с использованием PluginSettings

Я искал способ для хранения специфичных для проекта конфигураций для моего плагина. На первом этапе я хочу сохранить только простую строку типа "Hello".

Итак, я нашел SAL и PluginSettings. https://developer.atlassian.com/docs/atlassian-platform-common-components/shared-access-layer/sal-services

Это кажется довольно простым в использовании, но я понятия не имею, как внедрить его в мой код. Я использовал WebWork в разделе администрирования проекта:

@Override
public String doDefault() throws Exception {
    Project project = getProjectManager().getProjectObjByKey(_projectKey);
    HttpServletRequest request = ExecutingHttpRequest.get();
    request.setAttribute((new StringBuilder()).append("com.atlassian.jira.projectconfig.util.ServletRequestProjectConfigRequestCache").append(":project").toString(), project);
    return INPUT;
}

@Override
protected String doExecute() throws Exception {
    Project project = getProjectManager().getProjectObjByKey(_projectKey);
    HttpServletRequest request = ExecutingHttpRequest.get();
    request.setAttribute((new StringBuilder()).append("com.atlassian.jira.projectconfig.util.ServletRequestProjectConfigRequestCache").append(":project").toString(), project);
    String param = request.getParameter("param");
    return SUCCESS;
}

public void setProjectKey(String projectKey) {
    _projectKey = projectKey;
    }

public String getProjectKey() {
    return _projectKey;
}

public String getBaseUrl() {
    return ComponentAccessor.getApplicationProperties().getString(APKeys.JIRA_BASEURL);
}

Как сказал SAL, я реализовал класс настроек:

public CustomProjectSettings(
        final PluginSettingsFactory pluginSettingsFactory,
        final String projectKey) {
    this.pluginSettingsFactory = pluginSettingsFactory;
    this.projectKey = projectKey;
}

public void setValue(final String key, final String value) {
    final PluginSettings settings = pluginSettingsFactory
            .createSettingsForKey(projectKey);
    settings.put(key, value);
}

public Object getValue(final String key) {
    final PluginSettings settings = pluginSettingsFactory
            .createSettingsForKey(projectKey);
    return settings.get(key);
}

И я добавил компонент в XML:

<component-import key="pluginSettingsFactory" interface="com.atlassian.sal.api.pluginsettings.PluginSettingsFactory" />

Так как мне подключиться и внедрить это в мою веб-работу, чтобы сказать

protected String doExecute() throws Exception{
    [...]
    pluginSettings.setValue("Key", param);
    [...]
}

1 ответ

Решение

Это было проще, чем я думал. Мне просто нужно было ввести Настройки как зависимость для моего WebWork:

public WebWorkAction(CustomProjectSettings settings){
    this.settings = settings
}

Класс настроек становится автоматически подключенным

<component-import key="pluginSettingsFactory" 
interface="com.atlassian.sal.api.pluginsettings.PluginSettingsFactory" />

и добавив

<component key="settingsComponent"
      class="com.xxx.CustomProjectSettings">
</component>
Другие вопросы по тегам