The release of JSD 3.10 has caused us considerable pain, especially for Project Configurator but the impact on ScriptRunner has been high too. Many of the classes we depend on changed for this release, and we cannot rely just on API classes because they do not give the functionality they need.
Project Configurator (PC) is a key part of Atlassian's Data Portability strategy, with PC providing ways to migrate and promote configuration between instances. We currently have three implementations of the JSD integration for PC to support Jira 7.0 to 7.7 and at the current rate we will need to add as much as one per Jira release which will lead to an unmaintainable mess.
What I'd like to do is start a conversation to get the functionality we need into an API with the same kinds of deprecation policies that other Atlassian APIs. If we don't have this then we will need to revisit support for JSD in the Data Portability strategy.
At App week we spoke to Lachlan Goodhew-Cook about this and we agreed that it would be a good thing to do.
It would be good to include lgoodhewcook, vsharma@atlassian.com, and gkaszkur@atlassian.com in this discussion. We have also had discussions with Keshav Puttaswamy, Jakub Lazynski and Jakub Kurcek about Data Portability.
Please add the relavent people to the ticket and we can discuss.
For reference here are all the JSD classes we use:
com.atlassian.jira.plugins.workinghours.api.calendar.Calendar com.atlassian.jira.plugins.workinghours.api.calendar.CalendarBuilder com.atlassian.jira.plugins.workinghours.api.calendar.CalendarService com.atlassian.jira.plugins.workinghours.api.calendar.HolidayBuilder com.atlassian.jira.plugins.workinghours.api.calendar.Weekday com.atlassian.jira.plugins.workinghours.api.calendar.WorkingTime com.atlassian.jira.plugins.workinghours.api.calendar.WorkingTimeBuilder com.atlassian.jira.plugins.workinghours.internal.calendar.builder.CalendarBuilderFactoryImpl com.atlassian.jira.plugins.workinghours.internal.calendar.builder.HolidayBuilderFactoryImpl com.atlassian.jira.plugins.workinghours.internal.calendar.builder.WorkingTimeBuilderFactoryImpl com.atlassian.servicedesk.api.ServiceDesk com.atlassian.servicedesk.api.ServiceDeskService com.atlassian.servicedesk.api.portal.Portal com.atlassian.servicedesk.api.portal.PortalManager com.atlassian.servicedesk.api.requesttype.RequestType com.atlassian.servicedesk.api.requesttype.RequestTypeService com.atlassian.servicedesk.api.sla.metrics.TimeMetric com.atlassian.servicedesk.bootstrap.version.BuildPropertiesImpl com.atlassian.servicedesk.internal.api.portal.PortalManager com.atlassian.servicedesk.internal.feature.customer.portal.Portal com.atlassian.servicedesk.internal.feature.customer.portal.PortalInternal com.atlassian.servicedesk.internal.feature.customer.portal.PortalManagerImpl com.atlassian.servicedesk.internal.feature.customer.request.requesttype.PartialRequestType com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestStatusService com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestStatusStore com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestType com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestTypeFieldQStore com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestTypeInternalManager com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestTypeInternalManagerScala com.atlassian.servicedesk.internal.feature.customer.request.requesttype.RequestTypeStore com.atlassian.servicedesk.internal.feature.customer.request.requesttype.field.PartialRequestTypeField com.atlassian.servicedesk.internal.feature.customer.request.requesttype.field.RequestTypeField com.atlassian.servicedesk.internal.feature.customer.request.requesttype.field.RequestTypeFieldInternal com.atlassian.servicedesk.internal.feature.customer.request.requesttype.field.RequestTypeFieldManager com.atlassian.servicedesk.internal.feature.customer.request.requesttype.field.value.PartialRequestTypeFieldValue com.atlassian.servicedesk.internal.feature.customer.request.requesttype.field.value.RequestTypeFieldValue com.atlassian.servicedesk.internal.feature.customer.request.requesttype.requesttypegroup.LegacyRequestTypeGroupManager com.atlassian.servicedesk.internal.feature.customer.request.requesttype.requesttypegroup.PartialRequestTypeGroup com.atlassian.servicedesk.internal.feature.customer.request.requesttype.requesttypegroup.RequestTypeGroupManager com.atlassian.servicedesk.internal.feature.customer.request.requesttype.requesttypegroup.RequestTypeGroupStore com.atlassian.servicedesk.internal.feature.customer.request.requesttype.status.RequestStatusServiceScala com.atlassian.servicedesk.internal.feature.customer.request.requesttype.status.RequestStatusStore com.atlassian.servicedesk.internal.feature.customer.request.requesttype.status.RequestTypeStatusQStore com.atlassian.servicedesk.internal.feature.queue.QueueDetails com.atlassian.servicedesk.internal.feature.queue.QueueRequest com.atlassian.servicedesk.internal.feature.queue.QueueServiceInternalScala com.atlassian.servicedesk.internal.feature.queue.QueueStore com.atlassian.servicedesk.internal.feature.servicedesk.InternalServiceDeskManager com.atlassian.servicedesk.internal.feature.servicedesk.InternalServiceDeskServiceScala com.atlassian.servicedesk.internal.feature.servicedesk.ServiceDeskInternalManagerScala com.atlassian.servicedesk.internal.feature.servicedesk.ServiceDeskManagerImpl com.atlassian.servicedesk.internal.permission.restore.PermissionSchemeMisconfigurationManager com.atlassian.servicedesk.internal.sla.configuration.TimeMetricCreationServiceImpl com.atlassian.servicedesk.internal.sla.configuration.condition.ConditionType com.atlassian.servicedesk.internal.sla.configuration.condition.MetricConditionRef com.atlassian.servicedesk.internal.sla.configuration.condition.MetricConditionRefManagerImpl com.atlassian.servicedesk.internal.sla.configuration.goal.Goal com.atlassian.servicedesk.internal.sla.configuration.goal.GoalManagerImpl com.atlassian.servicedesk.internal.sla.configuration.threshold.SlaThresholdManagerImpl com.atlassian.servicedesk.internal.sla.configuration.timemetric.TimeMetricManagerImpl com.atlassian.servicedesk.internal.sla.configuration.timemetric.TimeMetricQStoreImpl com.atlassian.servicedesk.internal.sla.customfield.SLAFieldServiceImpl com.atlassian.servicedesk.internal.user.SDUserFactoryImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.project.ProjectRunAsUserContextConfigServiceImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetManagerImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetServiceImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.ConfigurationDataBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputBuilderImpl$IfConditionConfigurationBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputBuilderImpl$IfThenBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputBuilderImpl$RuleBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputBuilderImpl$ThenActionConfigurationBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputBuilderImpl$WhenHandlerConfigurationBuilderImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.input.RuleSetInputValidationServiceImpl com.atlassian.servicedesk.plugins.automation.internal.configuration.user.RunAsUserContextConfigFactoryImpl it.com.atlassian.servicedesk.plugins.automation.RuleSetBackdoorImpl