1 package fr.ifremer.tutti.ui.swing;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import fr.ifremer.tutti.ui.swing.content.actions.AbstractMainUITuttiAction;
26 import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
27 import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
28 import jaxx.runtime.JAXXObject;
29 import org.apache.commons.lang3.reflect.ConstructorUtils;
30 import org.nuiton.jaxx.application.ApplicationTechnicalException;
31 import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler;
32 import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction;
33 import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory;
34
35 import javax.swing.AbstractButton;
36 import javax.swing.Action;
37
38 import static org.nuiton.i18n.I18n.t;
39
40
41
42
43
44
45
46 public class TuttiActionFactory extends ApplicationActionFactory {
47
48 @Override
49 public <A extends AbstractApplicationAction> A createLogicAction(AbstractApplicationUIHandler handler,
50 Class<A> actionName) {
51 TuttiUIContext context = (TuttiUIContext) handler.getContext();
52 if (AbstractMainUITuttiAction.class.isAssignableFrom(actionName) &&
53 context.getMainUI() != null) {
54 handler = context.getMainUI().getHandler();
55 }
56
57 try {
58
59 return ConstructorUtils.invokeConstructor(actionName, (AbstractTuttiUIHandler) handler);
60 } catch (Exception e) {
61 throw new ApplicationTechnicalException(t("application.action.create.error", actionName), e);
62 }
63 }
64
65 public <A extends Action> A createSimpleAction(AbstractApplicationUIHandler handler,
66 AbstractButton abstractButton,
67 Class<A> actionType) {
68 try {
69
70 A action = ConstructorUtils.invokeConstructor(actionType, (JAXXObject) handler.getUI());
71 TuttiUIUtil.prepareAction(abstractButton, action, abstractButton.getName());
72
73 return action;
74
75 } catch (Exception e) {
76 throw new ApplicationTechnicalException(t("jaxx.application.action.create.error", actionType), e);
77 }
78
79 }
80
81 public <A extends Action> A createSimpleAction(JAXXObject ui,
82 AbstractButton abstractButton,
83 Class<A> actionType) {
84 try {
85
86 A action = ConstructorUtils.invokeConstructor(actionType, ui);
87 TuttiUIUtil.prepareAction(abstractButton, action, abstractButton.getName());
88
89 return action;
90
91 } catch (Exception e) {
92 throw new ApplicationTechnicalException(t("jaxx.application.action.create.error", actionType), e);
93 }
94
95 }
96 }