2015-07-28 40 views
8

Chciałbym zmienić zachowanie powiadamiania JIRA i dodać dodatkowe odbiorniki do określonych zdarzeń. Wiem, że mogę zarejestrować EventPublisher i przechwycić wszystkie niezbędne zdarzenia.Jak ponownie użyć szablonów prędkości JIRA dla wiadomości e-mail?

public class MyIssueCreatedResolvedListenerImpl implements InitializingBean, DisposableBean { 
    private final EventPublisher eventPublisher; 

    public MyIssueCreatedResolvedListenerImpl(EventPublisher eventPublisher) { 
     this.eventPublisher = eventPublisher; 
    } 

    @Override 
    public void afterPropertiesSet() throws Exception { 
     eventPublisher.register(this); 
    } 

    @Override 
    public void destroy() throws Exception { 
     eventPublisher.unregister(this); 
    } 

    @EventListener 
    public void onIssueEvent(IssueEvent issueEvent) { 
     // Process the issue events. I'm using the code presented below. 
    } 
} 

W onIssueEvent chciałbym ponownie wykorzystać istniejące szablony e-mail z JIRA i wysyłać je z obiektu do dalszych odbiorników SMTPMailServer. W tej chwili używam następującego kodu do odczytywania i wypełniania szablonów prędkości.

ApplicationProperties ap = ComponentAccessor.getApplicationProperties(); 
String baseUrl = ap.getString(APKeys.JIRA_BASEURL); 
String webworkEncoding = ap.getString(APKeys.JIRA_WEBWORK_ENCODING); 

VelocityManager vm = ComponentAccessor.getVelocityManager(); 
VelocityParamFactory vp = ComponentAccessor.getVelocityParamFactory(); 

Map context = vp.getDefaultVelocityParams(); 
context.put("baseurl", baseUrl); 
context.put("currentTimestamp", new Date()); 
context.put("issue", issueEvent.getIssue()); 

String renderedText = vm.getEncodedBody("templates/email/html/", "issueclosed.vm", baseUrl, webworkEncoding, context); 

SMTPMailServer mailServer = MailFactory.getServerManager().getDefaultSMTPMailServer(); 

Email email = new Email("<E-Mail-Adress>"); 
email.setMimeType("text/html"); 
email.setEncoding("utf-8"); 
email.setBody(renderedText); 

try { 
    mailServer.send(email); 
} catch (MailException e) { 
    e.printStackTrace(); 
} 

Powyższy kod działa częściowo. Kilka pól jest wypełnionych, ale nadal brakuje mi CSS, obrazów lub i18n w powiadomieniu e-mail. Uwaga: nie będę używać żadnych dodatkowych dodatków z rynku.

  • Czy to jest poprawna implementacja do ponownego użycia szablonów JIRA?

  • Jak dołączyć CSS, obrazy, i18n itp.? Czy mogę zastosować inne podejście?

Odpowiedz

2

kilka pól są pełne, ale wciąż brakuje CSS, obrazów lub i18n

How Does Internationalisation Work?

Przed zaimplementowaniem internacjonalizacji (również zwany 'i18n', ponieważ tam to 18 liter między "i" i "n"), które obsługują wtyczkę, ważne jest, aby zrozumieć, jak wtyczka jest umiędzynarodowiona.

Po pierwsze, wszystkie wiadomości w wtyczce muszą zostać przeniesione poza kod do pliku właściwości wtyczki. Plik właściwości przechowuje domyślne (angielskie) tłumaczenia dla wszystkich wiadomości wewnątrz wtyczki. Format pliku właściwości jest formatem klucz = wartość, w którym klucz jest używany w odniesieniu do zasobu w kodzie, a wartość jest domyślnym komunikatem w języku angielskim.

You can't use /images/ in your path unless you map the directory.

Including Javascript and CSS resources:

Dla każdego zasobu, lokalizację zasobu powinien dopasować ścieżkę do zasobu w pliku JAR wtyczek. Ścieżki do zasobów są przesyłane z nazwami do wtyczki, więc nie mogą kolidować z zasobami w innych wtyczkach z tą samą lokalizacją (w przeciwieństwie do zasobów i18n lub Velocity). Jednak może się okazać, że wygodnie jest używać nazwy ścieżki, która jest specyficzna dla twojej wtyczki, aby była zgodna z tymi innymi typami.

Aby uwzględnić niestandardowy zasób internetowy na stronie, na której używana jest wtyczka, należy użyć makra #requireResource Velocity.