1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.mail.app.main;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.jcr.util.SessionUtil;
38 import info.magnolia.module.mail.app.MailSubAppDecriptor;
39 import info.magnolia.objectfactory.ComponentProvider;
40 import info.magnolia.repository.RepositoryConstants;
41 import info.magnolia.ui.api.app.SubAppContext;
42 import info.magnolia.ui.api.context.UiContext;
43 import info.magnolia.ui.dialog.formdialog.FormBuilder;
44 import info.magnolia.ui.form.definition.FormDefinition;
45 import info.magnolia.ui.vaadin.form.FormViewReduced;
46 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
47 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
48
49 import javax.jcr.Node;
50 import javax.jcr.RepositoryException;
51
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55 import com.google.inject.Inject;
56
57
58
59
60 public class MailMainPresenter implements MailMainView.Listener {
61
62 private MailMainView view;
63 private FormBuilder builder;
64 private ComponentProvider componentProvider;
65 private FormDefinition formDefinition;
66 private JcrNodeAdapter jcrItem;
67 private UiContext context;
68 private SimpleTranslator translator;
69
70 public static final String CONFIG_SMTP_NODE_PATH = "/modules/mail/config/smtp";
71
72 private static final Logger log = LoggerFactory.getLogger(MailMainPresenter.class);
73
74 @Inject
75 public MailMainPresenter(MailMainView view, FormBuilder builder, ComponentProvider componentProvider, SubAppContext subAppContext, UiContext context, SimpleTranslator translator) {
76 this.view = view;
77 this.builder = builder;
78 this.componentProvider = componentProvider;
79 this.context = context;
80 this.translator = translator;
81 this.jcrItem = new JcrNodeAdapter(getMailConfigurationNode());
82 this.formDefinition = ((MailSubAppDecriptor) subAppContext.getSubAppDescriptor()).getFormDefinitions().get("main");
83 }
84
85 public MailMainView start() {
86 FormViewReduced formView = this.componentProvider.getComponent(FormViewReduced.class);
87 this.builder.buildReducedForm(this.formDefinition, formView, jcrItem, null);
88
89 view.setListener(this);
90 view.setFormViewReduced(formView);
91
92 view.build();
93 return view;
94 }
95
96 @Override
97 public void save() {
98 view.showValidation(true);
99 if (view.isValid()) {
100 try {
101 final Node node = jcrItem.applyChanges();
102 node.getSession().save();
103 context.openNotification(MessageStyleTypeEnum.INFO, true, translator.translate("mail.app.main.button.save.success"));
104 } catch (RepositoryException e) {
105 log.error(e.getMessage(), e);
106 context.openNotification(MessageStyleTypeEnum.ERROR, true, translator.translate("mail.app.main.button.save.error"));
107 }
108 }
109 }
110
111 @Override
112 public void reset() {
113 FormViewReduced newView = componentProvider.getComponent(FormViewReduced.class);
114 builder.buildReducedForm(formDefinition, newView, jcrItem, null);
115 view.setFormViewReduced(newView);
116 context.openNotification(MessageStyleTypeEnum.INFO, true, translator.translate("mail.app.main.button.reset.success"));
117 }
118
119 protected static Node getMailConfigurationNode() {
120 return SessionUtil.getNode(RepositoryConstants.CONFIG, CONFIG_SMTP_NODE_PATH);
121 }
122
123 }