I would like to create a single select custom field through jira plugin tried below code but I am unable to see field in customfields section after deploying the plugin
package com.zscaler.select2plugin.jira.customfields;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.customfields.manager.GenericConfigManager;
import com.atlassian.jira.issue.customfields.impl.FieldValidationException;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.customfields.manager.OptionsManager;
import com.atlassian.jira.issue.customfields.persistence.PersistenceFieldType;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItem;
import java.util.Collections;
import java.util.List;
import org.apache.commons.collections.MultiMap;
import java.util.Map;
import com.atlassian.jira.issue.customfields.impl.AbstractSingleFieldType;
import com.atlassian.jira.issue.customfields.view.CustomFieldParams;
import com.atlassian.jira.issue.customfields.option.Options;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.issue.customfields.converters.StringConverter;
import com.atlassian.jira.issue.customfields.persistence.CustomFieldValuePersister;
import com.atlassian.jira.issue.context.IssueContext;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.util.ErrorCollection;
import com.atlassian.jira.util.ErrorCollection.Reason;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
public class select2singleselect extends AbstractSingleFieldType<String> {
OptionsManager optionsManager;
protected select2singleselect(CustomFieldValuePersister customFieldValuePersister, GenericConfigManager genericConfigManager) {
super(customFieldValuePersister, genericConfigManager);
}
@Nonnull
@Override
protected PersistenceFieldType getDatabaseType() {
return PersistenceFieldType.TYPE_UNLIMITED_TEXT;
}
@Nullable
@Override
protected Object getDbValueFromObject(String s) {
return s;
}
@Nullable
@Override
protected String getObjectFromDbValue(@Nonnull Object o) throws FieldValidationException {
return String.valueOf(o);
}
@Override
public String getStringFromSingularObject(String s) {
return s;
}
@Override
public String getSingularObjectFromString(String s) throws FieldValidationException {
return s;
}
@Override
public Map<String, Object> getVelocityParameters(
Issue issue,
CustomField customField,
FieldLayoutItem fieldLayoutItem) {
// Call the parent method to ensure default parameters are set
Map<String, Object> velocityParams = super.getVelocityParameters(issue, customField, fieldLayoutItem);
// Fetch options based on the custom field's context
List<Option> options = getOptionsForContext(customField, issue);
// Add options to the Velocity context
velocityParams.put("customFieldOptions", options);
// Add the current value if it exists
Object currentValue = customField.getValue(issue);
if (currentValue instanceof Option) {
velocityParams.put("value", currentValue);
}
return velocityParams;
}
private List<Option> getOptionsForContext(CustomField customField, Issue issue) {
// Fetch the configuration for the custom field based on the issue's context
FieldConfig fieldConfig = customField.getRelevantConfig(issue);
if (fieldConfig != null) {
OptionsManager optionsManager = ComponentAccessor.getOptionsManager();
return optionsManager.getOptions(fieldConfig).getRootOptions();
}
return Collections.emptyList();
}
}