1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.mylasta.direction.sponsor;
17
18 import java.util.List;
19 import java.util.Locale;
20
21 import org.codelibs.fess.mylasta.direction.FessConfig;
22 import org.dbflute.mail.send.SMailDeliveryDepartment;
23 import org.dbflute.mail.send.SMailPostalMotorbike;
24 import org.dbflute.mail.send.SMailPostalParkingLot;
25 import org.dbflute.mail.send.SMailPostalPersonnel;
26 import org.dbflute.mail.send.embedded.personnel.SMailDogmaticPostalPersonnel;
27 import org.dbflute.mail.send.embedded.receptionist.SMailConventionReceptionist;
28 import org.dbflute.mail.send.supplement.async.SMailAsyncStrategy;
29 import org.dbflute.mail.send.supplement.filter.SMailSubjectFilter;
30 import org.dbflute.mail.send.supplement.label.SMailLabelStrategy;
31 import org.dbflute.optional.OptionalThing;
32 import org.dbflute.util.DfStringUtil;
33 import org.lastaflute.core.magic.async.AsyncManager;
34 import org.lastaflute.core.magic.async.ConcurrentAsyncCall;
35 import org.lastaflute.core.message.MessageManager;
36 import org.lastaflute.core.util.ContainerUtil;
37
38
39
40
41
42
43 public class FessMailDeliveryDepartmentCreator {
44
45
46
47
48 protected final FessConfig fessConfig;
49
50
51
52
53 public FessMailDeliveryDepartmentCreator(final FessConfig fessConfig) {
54 this.fessConfig = fessConfig;
55 }
56
57
58
59
60 public SMailDeliveryDepartment create() {
61 return new SMailDeliveryDepartment(createPostalParkingLot(), createPostalPersonnel());
62 }
63
64
65
66
67 protected SMailPostalParkingLot createPostalParkingLot() {
68 final SMailPostalParkingLot parkingLot = new SMailPostalParkingLot();
69 final SMailPostalMotorbike motorbike = new SMailPostalMotorbike();
70 final String hostAndPort = fessConfig.getMailSmtpServerMainHostAndPort();
71 final List<String> hostPortList = DfStringUtil.splitListTrimmed(hostAndPort, ":");
72 motorbike.registerConnectionInfo(hostPortList.get(0), Integer.parseInt(hostPortList.get(1)));
73 motorbike.registerReturnPath(fessConfig.getMailReturnPath());
74 parkingLot.registerMotorbikeAsMain(motorbike);
75 return parkingLot;
76 }
77
78
79
80
81 protected SMailPostalPersonnel createPostalPersonnel() {
82 final SMailDogmaticPostalPersonnel personnel = createDogmaticPostalPersonnel();
83 return fessConfig.isMailSendMock() ? personnel.asTraining() : personnel;
84 }
85
86 protected SMailDogmaticPostalPersonnel createDogmaticPostalPersonnel() {
87 final AsyncManager asyncManager = getAsyncManager();
88 final MessageManager messageManager = getMessageManager();
89 return new SMailDogmaticPostalPersonnel() {
90
91
92
93 @Override
94 protected SMailConventionReceptionist createConventionReceptionist() {
95 return super.createConventionReceptionist().asReceiverLocale(postcard -> OptionalThing.empty());
96 }
97
98 @Override
99 protected OptionalThing<SMailSubjectFilter> createSubjectFilter() {
100 return OptionalThing.of((view, subject) -> subject);
101 }
102
103 @Override
104 protected OptionalThing<SMailAsyncStrategy> createAsyncStrategy() {
105 return OptionalThing.of((view, runnable) -> async(asyncManager, runnable));
106 }
107
108 @Override
109 protected OptionalThing<SMailLabelStrategy> createLabelStrategy() {
110 return OptionalThing.of((view, locale, label) -> resolveLabelIfNeeds(messageManager, locale, label));
111 }
112 };
113 }
114
115
116
117
118 protected void async(final AsyncManager asyncManager, final Runnable runnable) {
119 asyncManager.async(new ConcurrentAsyncCall() {
120 @Override
121 public void callback() {
122 runnable.run();
123 }
124
125 @Override
126 public boolean asPrimary() {
127 return true;
128 }
129 });
130 }
131
132
133
134
135 protected String resolveLabelIfNeeds(final MessageManager messageManager, final Locale locale, final String label) {
136 return label.startsWith("labels.") ? messageManager.getMessage(locale, label) : label;
137 }
138
139
140
141
142 protected MessageManager getMessageManager() {
143 return ContainerUtil.getComponent(MessageManager.class);
144 }
145
146 protected AsyncManager getAsyncManager() {
147 return ContainerUtil.getComponent(AsyncManager.class);
148 }
149 }