рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрд╕рдЖрдИрдПрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦ рдпрд╣рд╛рдБ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редрдПрд╕рдЖрдИрдПрд▓ рдХреЗ рдореБрдЦреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдПрд╕рдЖрдИрдПрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рдЬреАрд░рд╛ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрд╕рд╛рдЗрд▓реЗрдВрдЯ-рдПрдХреНрд╕рдЯреЗрдВрд╢рди-рдЖрд░реНрдХрдПрдкреНрдЯ рд╕реЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдПрдВ
рдкреНрд░рддрд┐рд░реВрдк рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ:git clone https://alex1mmm@bitbucket.org/alex1mmm/sil-extension-archetype.git --branch v1 --single-branch
рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрд░реНрдХрдЯрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдЖрд░реНрдХрд╣рд╛рдЗрдк рд╕реЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редрдПрд╕рдЖрдИрдПрд▓ рд╕реЗрд╡рд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ
рдЬреАрд░рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреЛрд░реНрдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдПрд╕рдЖрдИрдПрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдиред рд╣рдо рдПрд╕рдЖрдИрдПрд▓ рдЬрд╛рд╡рд╛ рдПрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреАрд░рд╛ рдЬрд╛рд╡рд╛ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХреЙрд▓ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░реЗрдВрдЧреЗредрд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдПрд╕рдЖрдИрдПрд▓ рдХреМрди рд╕реА рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?рд╣рдо рдПрд╕рдЖрдИрдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрди рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 2990 / рдЬреАрд░рд╛ / рдкреНрд▓рдЧрдЗрдиреНрд╕ / рд╕рд░реНрд╡рд▓реЗрдЯ / рдЕрдкрдо / рдУрд╕реНрдЧреАрдЖрдк рдЬреАрд░рд╛ рдореЗрдВ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдУрдПрд╕рдЬреАрдЖрдИ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдВрдЧреЗ:
рд╣рдо
рдХреЗрдЯреАрдПрд▓ рдХреЙрдордиреНрд╕ рд╕реВрдЪреА рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдкрдВрдЬреАрдХреГрдд рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЦреЛрд▓реЗрдВрдЧреЗ : рдЬреЗрдПрдордпреВрдЬрд╝рд░рд╕рд░реНрд╡рд┐рд╕реЗрдЬ, рдЬреЗрдордкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрд╡рд╛рдПрдБ рд╡реЗ рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреА рд╣реИрдВ рд╕рд┐рд▓редрдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрд╕рдЖрдИрдПрд▓ рд╕реЗрд╡рд╛рдПрдВ рдХреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдирд╛рдо рд╕реЗ рд╣рдо рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВредрдЪрд▓рд┐рдП рдмрдирд╛рдпреЗ рдЧрдП рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ
рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреМрди рд╕реА рд╕реЗрд╡рд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредBeanService.java
@Named
public class BeanService {
@Getter
private final KIssueService kIssueService;
@Getter
private final ClassLoaderService classLoaderService;
@Getter
private final CurrentUserHelper currentUserHelper;
@Getter
private final JMIssueSearchServices jmIssueSearchServices;
@Getter
private final UserHelper userHelper;
@Getter
private final JMIssueServices jmIssueServices;
@Inject
public BeanService(@ComponentImport KIssueService kIssueService,
@ComponentImport CurrentUserHelper currentUserHelper,
@ComponentImport JMIssueSearchServices jmIssueSearchServices,
@ComponentImport UserHelper userHelper,
@ComponentImport JMIssueServices jmIssueServices,
ClassLoaderService classLoaderService) {
this.kIssueService = kIssueService;
this.classLoaderService = classLoaderService;
this.currentUserHelper = currentUserHelper;
this.jmIssueSearchServices = jmIssueSearchServices;
this.userHelper = userHelper;
this.jmIssueServices = jmIssueServices;
}
}
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╡реЗ рд╕рднреА рд╕реЗрд╡рд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдХреЙрд▓ рдХреА рдирдХрд▓ рди рд╣реЛредрдЖрдЗрдП рдЗрди рд░реЗрдЦрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ:@Getter
private final KIssueService kIssueService;
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗрд╡рд╛рд▓рд╛рдпрд╣ рдПрдХ рд▓рдВрдмреЛрдХ рдПрдиреЛрдЯреЗрд╢рди kIssueService рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдмрдирд╛рддрд╛ рд╣реИредрд╣рдо рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдЧреБрдг рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред public BeanService(@ComponentImport KIssueService kIssueService,
@ComponentImport CurrentUserHelper currentUserHelper,
@ComponentImport JMIssueSearchServices jmIssueSearchServices,
@ComponentImport UserHelper userHelper,
@ComponentImport JMIssueServices jmIssueServices,
ClassLoaderService classLoaderService) {
this.kIssueService = kIssueService;
this.classLoaderService = classLoaderService;
this.currentUserHelper = currentUserHelper;
this.jmIssueSearchServices = jmIssueSearchServices;
this.userHelper = userHelper;
this.jmIssueServices = jmIssueServices;
}
рдХрд┐рдпрд╛ рд╣реБрдЖредESLauncher рд╡рд░реНрдЧ рдореЗрдВ рдмреАрдирд╕реЗрд╡рд╛ рдмреАрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмреАрди рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ:
private final BeanService beanService;
@Inject
public ESLauncher(@ComponentImport EventPublisher eventPublisher,
PluginInfoService pluginInfoService,
@ComponentImport CommonPluginConfigurationService commonPluginConfigurationService,
@ComponentImport HostConfigurationProvider hostConfigurationProvider,
@ClasspathComponent PluginConfigurationServiceImpl pluginConfigurationService,
BeanService beanService)
{
super(eventPublisher, pluginInfoService, hostConfigurationProvider, pluginConfigurationService);
log.error("eslauncher constructor");
this.beanService = beanService;
}
@Override
public void doAtLaunch() {
super.doAtLaunch();
log.error("eslauncher doatlaunch");
RoutineRegistry.register(new SayHello( beanService,"SayHello"));
RoutineRegistry.register(new SayHello2( beanService,"SayHello2"));
RoutineRegistry.register(new SayHello3( beanService,"SayHello3"));
}
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмреАрди рд╕рд░реНрд╡рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредSayHello.java
SayHello.java рдореЗрдВ рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдИрдореЗрд▓ рдкрддреЗ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рд╕рднреА рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рд╣рдЯрд╛рдП рдЧрдП рдкреНрд░реЗрд╖рд┐рдд рдИрдореЗрд▓ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╣рдЯрд╛ рджреЗрдВредрдмреЗрд╢рдХ, рд╣рдо рдЗрд╕ рддрд░реНрдХ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрд╕рдЖрдИрдПрд▓ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:function deleteIssueForUser(string userEmail) {
if (isUserInGroup("jira-administrators", currentUserKey())) {
string[] issues = selectIssues("reporter = " + currentUserKey());
for (string issue in issues) {
deleteIssue(issue);
}
}
}
deleteIssueForUser("user@email.com");
рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдХрд╛рдо рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛редрдпрд╣рд╛рдБ рдХрдХреНрд╖рд╛ рдкрд╛рда рд╣реИ:@Slf4j
public class SayHello extends AbstractSILRoutine<MutableString> {
private static final SILType[][] types = {{ TypeInst.STRING }};
private final BeanService beanService;
public SayHello(BeanService beanService, String name) {
super(beanService.getClassLoaderService().getPluginClassLoader(), name, types);
this.beanService = beanService;
}
@Override
public SILType<MutableString> getReturnType() {
return TypeInst.STRING;
}
@Override
protected SILValue<MutableString> runRoutine(SILContext silContext, List<SILValue<?>> list) {
SILValue param = list.get(0);
String userEmail = param.toStringValue();
KIssueService kIssueService = beanService.getKIssueService();
CurrentUserHelper currentUserHelper = beanService.getCurrentUserHelper();
JMIssueSearchServices jmIssueSearchServices = beanService.getJmIssueSearchServices();
UserHelper userHelper = beanService.getUserHelper();
JMIssueServices jmIssueServices = beanService.getJmIssueServices();
ApplicationUser requestedUser = userHelper.getUserByEmail(userEmail);
if (currentUserHelper.isUserAdministrator()) {
SearchService.ParseResult parseResult = jmIssueSearchServices.getSearchService().parseQuery(requestedUser, "reporter = " + requestedUser.getKey());
List<Issue> issues = (List<Issue>) kIssueService.searchIssues(requestedUser, parseResult.getQuery());
issues.stream().forEach(issue -> kIssueService.deindexIssue(jmIssueServices.getIssueManager().getIssueByCurrentKey(issue.getKey())));
}
return SILValueFactory.string( "issues deleted");
}
@Override
public String getParams() {
return "(userEmail)";
}
}
рд╣рдо рд░рдирдЖрдЙрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: @Override
protected SILValue<MutableString> runRoutine(SILContext silContext, List<SILValue<?>> list) {
SILValue param = list.get(0);
String userEmail = param.toStringValue();
KIssueService kIssueService = beanService.getKIssueService();
CurrentUserHelper currentUserHelper = beanService.getCurrentUserHelper();
JMIssueSearchServices jmIssueSearchServices = beanService.getJmIssueSearchServices();
UserHelper userHelper = beanService.getUserHelper();
JMIssueServices jmIssueServices = beanService.getJmIssueServices();
ApplicationUser requestedUser = userHelper.getUserByEmail(userEmail);
if (currentUserHelper.isUserAdministrator()) {
SearchService.ParseResult parseResult = jmIssueSearchServices.getSearchService().parseQuery(requestedUser, "reporter = " + requestedUser.getKey());
List<Issue> issues = (List<Issue>) kIssueService.searchIssues(requestedUser, parseResult.getQuery());
issues.stream().forEach(issue -> kIssueService.deindexIssue(jmIssueServices.getIssueManager().getIssueByCurrentKey(issue.getKey())));
}
return SILValueFactory.string( "issues deleted");
}
рдореИрдВрдиреЗ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреАредKIssueFieldsService рд╕реЗрд╡рд╛
рдореИрдВ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдПрд╕рдЖрдИрдПрд▓ рдореЗрдВ, рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдлрд╝реАрд▓реНрдб рдирд╛рдо рдпрд╛ рдлрд╝реАрд▓реНрдб рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреЛ customfield_NNNNN рдпрд╛ рдлрд╝реАрд▓реНрдб рдПрд▓рд┐рдпрд╛рд╕ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдпрджрд┐ рд╣рдордиреЗ рдПрд╕рдЖрдИрдПрд▓ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рддрд░реНрдХ рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди KIssueFieldsService рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░, рд╣рдо рдПрдХ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ:CustomField customField= this.kIssueFieldsService.getCustomField(customFieldName);
рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬреАрд░рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрд╕рдЖрдИрдПрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреЛрд░реНрдЯреЗрдмрд▓ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред