1 package fr.ifremer.quadrige2.ui.swing.common.action;
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 import fr.ifremer.quadrige2.core.exception.Quadrige2TechnicalException;
28 import fr.ifremer.quadrige2.ui.swing.common.ApplicationUIContext;
29 import fr.ifremer.quadrige2.ui.swing.common.AbstractUIHandler;
30 import org.apache.commons.lang3.reflect.ConstructorUtils;
31 import org.nuiton.i18n.I18n;
32 import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler;
33 import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction;
34 import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory;
35
36 import javax.swing.AbstractButton;
37 import java.util.concurrent.*;
38
39
40
41
42 public class ActionFactory extends ApplicationActionFactory {
43
44
45 @Override
46 public <A extends AbstractApplicationAction> A createLogicAction(AbstractApplicationUIHandler handler, Class<A> actionName) {
47 ApplicationUIContext context = (ApplicationUIContext) handler.getContext();
48 if (AbstractMainUIAction.class.isAssignableFrom(actionName) && context.getMainUI() != null) {
49 handler = context.getMainUI().getHandler();
50 }
51
52 return super.createLogicAction(handler, actionName);
53 }
54
55
56
57
58
59
60
61
62
63 public <A extends AbstractWorkerAction> A createNonBlockingUIAction(AbstractUIHandler handler, Class<A> actionName) {
64 return createNonBlockingUIAction(handler, actionName, null);
65 }
66
67
68
69
70
71
72
73
74
75
76 public <A extends AbstractWorkerAction> A createNonBlockingUIAction(AbstractUIHandler handler, Class<A> actionName, AbstractButton button) {
77 try {
78
79 A action = ConstructorUtils.invokeConstructor(actionName, handler);
80
81 if (button != null) {
82 action.setActionIcon(button.getIcon());
83 action.setActionName(button.getText());
84 action.setActionDescription(button.getToolTipText());
85 action.setActionMnemonic(button.getMnemonic());
86 }
87
88 return action;
89 } catch (Exception e) {
90 throw new Quadrige2TechnicalException(I18n.t("quadrige2.error.create.action", actionName.getName()), e);
91 }
92
93 }
94
95
96
97
98
99
100
101
102 public static ThreadPoolExecutor createThreadExecutor(boolean isPoolActive) {
103 int capacity = isPoolActive ? 2 : 1;
104 BlockingQueue<Runnable> queue = new LinkedBlockingDeque<>(capacity);
105
106 RejectedExecutionHandler rejectedExecutionHandler = isPoolActive
107 ? new ThreadPoolExecutor.DiscardPolicy()
108 : new ThreadPoolExecutor.AbortPolicy();
109
110 return new ThreadPoolExecutor(1, 1, 1, TimeUnit.MINUTES, queue, rejectedExecutionHandler);
111 }
112 }