1 package fr.ifremer.tutti.ui.swing.update.actions;
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.TuttiConfiguration;
26 import fr.ifremer.tutti.persistence.ProgressionModel;
27 import fr.ifremer.tutti.ui.swing.RunTutti;
28 import fr.ifremer.tutti.ui.swing.TuttiUIContext;
29 import fr.ifremer.tutti.ui.swing.content.actions.AbstractMainUITuttiAction;
30 import fr.ifremer.tutti.ui.swing.content.actions.CloseApplicationAction;
31 import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
32 import fr.ifremer.tutti.ui.swing.update.TuttiApplicationUpdaterCallBack;
33 import fr.ifremer.tutti.ui.swing.update.Updates;
34 import fr.ifremer.tutti.ui.swing.updater.UpdateModule;
35 import org.apache.commons.logging.Log;
36 import org.apache.commons.logging.LogFactory;
37 import org.nuiton.updater.ApplicationUpdater;
38
39 import java.io.File;
40
41 import static org.nuiton.i18n.I18n.t;
42
43
44
45
46
47
48
49 public class UpdateApplicationAction extends AbstractMainUITuttiAction {
50
51
52 private static final Log log = LogFactory.getLog(UpdateApplicationAction.class);
53
54 public UpdateApplicationAction(MainUIHandler handler) {
55 super(handler, true);
56 setActionDescription(t("tutti.main.action.updateApplication.tip"));
57 modulesToUpdate = Updates.getApplicationModules();
58 }
59
60 protected UpdateModule[] modulesToUpdate;
61
62 protected boolean reload;
63
64 @Override
65 public boolean prepareAction() throws Exception {
66 boolean doAction = super.prepareAction();
67
68 if (doAction) {
69
70 TuttiUIContext context = getContext();
71 doAction = context.checkUpdateApplicationReachable(true);
72 }
73 return doAction;
74 }
75
76 @Override
77 public void releaseAction() {
78 super.releaseAction();
79 modulesToUpdate = Updates.getApplicationModules();
80 }
81
82 @Override
83 public void doAction() throws Exception {
84
85 reload = false;
86
87 TuttiUIContext context = getContext();
88 TuttiConfiguration config = getConfig();
89
90 File current = config.getBasedir();
91 if (current == null || !current.exists()) {
92
93
94 if (log.isWarnEnabled()) {
95 log.warn("No application base directory defined, skip updates.");
96 }
97 } else {
98
99 String url = config.getUpdateApplicationUrl();
100
101 if (log.isInfoEnabled()) {
102 log.info(String.format("Try to update jre, i18N, help or tutti (current application location: %s), using update url: %s", current, url));
103 }
104
105 ProgressionModel progressionModel = new ProgressionModel();
106 context.getActionUI().getModel().setProgressionModel(progressionModel);
107 progressionModel.setMessage(t("tutti.updateApplication.checkUpdates"));
108
109 TuttiApplicationUpdaterCallBack callback = new TuttiApplicationUpdaterCallBack(url, this, progressionModel);
110
111 callback.setModulesToUpdate(modulesToUpdate);
112
113 Updates.doUpdate(config, callback, current);
114
115 if (callback.isApplicationUpdated()) {
116
117 reload = true;
118
119 } else {
120
121 sendMessage(t("tutti.updateApplication.noUpdate"));
122 }
123 }
124 }
125
126 public void setModulesToUpdate(UpdateModule... modulesToUpdate) {
127 this.modulesToUpdate = modulesToUpdate;
128 }
129
130 @Override
131 public void postSuccessAction() {
132 super.postSuccessAction();
133
134 if (reload) {
135
136 try {
137 Thread.sleep(1000);
138 } catch (InterruptedException e) {
139 if (log.isWarnEnabled()) {
140 log.warn("Could not wait 1 second...", e);
141 }
142 }
143
144
145
146 getHandler().showSuccessMessage(t("tutti.updateApplication.title.success"),
147 t("tutti.updateApplication.message.success"));
148
149 CloseApplicationAction action = getContext().getActionFactory().createLogicAction(
150 getHandler(), CloseApplicationAction.class);
151 action.setExitCode(RunTutti.RESTART_EXIT_CODE);
152 getActionEngine().runAction(action);
153 }
154 }
155
156 public boolean isReload() {
157 return reload;
158 }
159 }