1 package fr.ifremer.tutti.ui.swing.content.db.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.persistence.ProgressionModel;
26 import fr.ifremer.tutti.ui.swing.RunTutti;
27 import fr.ifremer.tutti.ui.swing.TuttiUIContext;
28 import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
29 import fr.ifremer.tutti.ui.swing.content.actions.AbstractMainUITuttiAction;
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32 import org.nuiton.jaxx.application.ApplicationIOUtil;
33
34 import java.io.File;
35 import java.util.Date;
36
37 import static org.nuiton.i18n.I18n.t;
38
39
40
41
42
43
44
45 public class ReinstallDbAction extends AbstractMainUITuttiAction {
46
47
48 private static final Log log = LogFactory.getLog(ReinstallDbAction.class);
49
50 protected File backupFile;
51
52 protected String jdbcUrl;
53
54 public ReinstallDbAction(MainUIHandler handler) {
55 super(handler, true);
56 setActionDescription(t("tutti.dbManager.action.installDb.tip"));
57 }
58
59 @Override
60 public boolean prepareAction() throws Exception {
61 boolean doAction = super.prepareAction();
62
63 if (doAction) {
64
65
66
67
68 TuttiUIContext context = getContext();
69 doAction = context.checkUpdateDataReachable(true);
70 }
71
72 if (doAction) {
73
74 jdbcUrl = null;
75 backupFile = null;
76
77 jdbcUrl = getConfig().getJdbcUrl();
78
79 if (getModel().isDbExist()) {
80
81 if (getConfig().isImportDbSkipBackup()) {
82
83 if (log.isInfoEnabled()) {
84 log.info("Skip backup before import, lucky you...");
85 }
86
87 } else {
88
89 displayInfoMessage(
90 t("tutti.dbManager.title.backup.db"),
91 t("tutti.dbManager.action.installDb.backup.db")
92 );
93
94
95 backupFile = saveFile(
96 getConfig().getDbBackupDirectory(),
97 "tutti-db-" + ExportDbAction.df.format(new Date()),
98 "zip",
99 t("tutti.dbManager.title.choose.dbExportFile"),
100 t("tutti.dbManager.action.chooseDbExportFile"),
101 "^.*\\.zip", t("tutti.common.file.zip")
102 );
103
104 if (backupFile == null) {
105
106 displayWarningMessage(
107 t("tutti.dbManager.title.backup.db"),
108 t("tutti.dbManager.action.installDb.no.backup.db.choosen")
109 );
110
111 doAction = false;
112 }
113
114 }
115
116 }
117 }
118
119 if (doAction) {
120
121 ProgressionModel progressionModel = new ProgressionModel();
122 progressionModel.setTotal(3 + (backupFile == null ? 0 : 1));
123 setProgressionModel(progressionModel);
124 }
125 return doAction;
126 }
127
128 @Override
129 public void doAction() {
130
131 ProgressionModel progressionModel = getProgressionModel();
132
133 boolean doBackup = backupFile != null;
134
135
136 progressionModel.increments(t("tutti.reinstallDb.step.closeDb", jdbcUrl));
137
138 if (!doBackup) {
139 getContext().getPersistenceService().setSkipShutdownDbWhenClosing();
140 }
141 getContext().closePersistenceService();
142
143 if (doBackup) {
144
145
146 progressionModel.increments(t("tutti.reinstallDb.step.backupDb", backupFile));
147 getContext().getPersistenceService().exportDb(backupFile);
148
149 }
150
151
152 getContext().clearDbContext();
153
154
155 String actionContent = InstallDbAction.class.getName();
156
157 File startActionFile = getConfig().getStartActionFile();
158 ApplicationIOUtil.writeContent(startActionFile, actionContent, t("tutti.error.write.startActionFile", startActionFile));
159
160
161 getContext().deleteDbOnExit();
162
163
164 progressionModel.increments(t("tutti.reinstallDb.step.reloadApplication"));
165 RunTutti.closeTutti(getHandler(), RunTutti.RESTART_EXIT_CODE);
166
167 }
168 }