1 package fr.ifremer.quadrige2.ui.swing.common.content.db;
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 com.google.common.collect.Maps;
28 import fr.ifremer.quadrige2.core.security.Quadrige2UserAuthority;
29 import fr.ifremer.quadrige2.core.security.SecurityContextHelper;
30 import fr.ifremer.quadrige2.core.service.ClientServiceLocator;
31 import fr.ifremer.quadrige2.ui.swing.common.ApplicationUIContext;
32 import fr.ifremer.quadrige2.ui.swing.common.ApplicationUIUtil;
33 import fr.ifremer.quadrige2.ui.swing.common.callback.DatabaseUpdaterCallBack;
34 import fr.ifremer.quadrige2.ui.swing.common.AbstractUIHandler;
35 import jaxx.runtime.SwingUtil;
36 import org.apache.commons.lang3.StringUtils;
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39 import org.nuiton.updater.ApplicationInfo;
40 import org.nuiton.updater.ApplicationUpdater;
41 import org.nuiton.version.Version;
42
43 import javax.swing.SwingUtilities;
44 import java.beans.PropertyChangeEvent;
45 import java.beans.PropertyChangeListener;
46 import java.util.Map;
47
48 import static org.nuiton.i18n.I18n.n;
49 import static org.nuiton.i18n.I18n.t;
50
51
52
53
54
55
56 public class DbManagerUIHandler extends AbstractUIHandler<ApplicationUIContext, DbManagerUI> {
57
58
59
60
61 private static final Log LOG = LogFactory.getLog(DbManagerUIHandler.class);
62
63
64
65
66 public void updateMessage() {
67
68 boolean dbExist = getContext().isDbExist();
69 boolean dbLoaded = getContext().isPersistenceLoaded();
70
71 if (LOG.isDebugEnabled()) {
72 LOG.debug("Rebuild information text... (dbExist?" + dbExist
73 + "/ dbLoaded?" + dbLoaded + ")");
74 }
75
76 String message;
77
78 if (dbExist) {
79
80
81
82 Map<String, String> characteristics = Maps.newLinkedHashMap();
83
84 String title;
85
86 characteristics.put(t("quadrige2.dbManager.characteristic.url"), getConfig().getJdbcUrl());
87
88 if (dbLoaded) {
89
90 Version dbVersion = ClientServiceLocator.instance().getPersistenceService().getDbVersion();
91
92
93 title = n("quadrige2.dbManager.info.db.loaded");
94
95 characteristics.put(t("quadrige2.dbManager.characteristic.schemaVersion"), dbVersion == null ? "not found" : dbVersion.toString());
96
97 } else {
98
99
100 title = n("quadrige2.dbManager.info.no.db.loaded");
101 }
102
103
104 String urlDb = getConfig().getUpdateDataUrl();
105 if (getContext().checkUpdateReachable(urlDb, false)) {
106
107 ApplicationUpdater up = new ApplicationUpdater();
108 Map<String, ApplicationInfo> dbVersions = up.getVersions(urlDb, getConfig().getDataDirectory());
109
110 ApplicationInfo updateDbVersion = dbVersions.get(DatabaseUpdaterCallBack.DB_UPDATE_NAME);
111
112 if (updateDbVersion != null) {
113 String currentReferentialVersion = updateDbVersion.oldVersion;
114 String newReferentialVersion = updateDbVersion.newVersion;
115 characteristics.put(t("quadrige2.dbManager.characteristic.referentialVersion"), currentReferentialVersion);
116 if (newReferentialVersion != null) {
117 characteristics.put(t("quadrige2.dbManager.characteristic.lastReferentialVersion"), newReferentialVersion);
118 }
119 } else {
120 characteristics.put(t("quadrige2.dbManager.characteristic.referentialVersion.undefined"), "");
121 }
122 }
123
124 StringBuilder characteristicsToString = new StringBuilder("<ul>");
125 for (Map.Entry<String, String> entry : characteristics.entrySet()) {
126 characteristicsToString.append("<li>");
127 characteristicsToString.append(entry.getKey());
128 characteristicsToString.append(" : <strong>");
129 characteristicsToString.append(entry.getValue());
130 characteristicsToString.append("</strong></li>");
131 }
132 characteristicsToString.append("</ul>");
133
134 message = t(title, characteristicsToString);
135
136 } else {
137
138
139 message = t("quadrige2.dbManager.info.no.db.exist");
140 }
141 String result = ApplicationUIUtil.getHtmlString(message);
142 getUI().getInformationArea().setText(result);
143 }
144
145
146 @Override
147 public void beforeInit(DbManagerUI ui) {
148 super.beforeInit(ui);
149 ui.setContextValue(getContext());
150
151 ui.setContextValue(SwingUtil.createActionIcon("manage-db"));
152
153 }
154
155
156 @Override
157 public void afterInit(DbManagerUI ui) {
158
159 initUI(ui);
160 clearValidators();
161
162 getModel().addPropertyChangeListener(ApplicationUIContext.PROPERTY_DB_EXIST, new PropertyChangeListener() {
163 @Override
164 public void propertyChange(PropertyChangeEvent evt) {
165
166 Boolean dbExist = (Boolean) evt.getNewValue();
167 String mnemonic;
168 if (dbExist) {
169 mnemonic = t("quadrige2.dbManager.action.reinstallDb.mnemonic");
170 } else {
171 mnemonic = t("quadrige2.dbManager.action.installDb.mnemonic");
172 }
173 if (StringUtils.isNotBlank(mnemonic)) {
174 getUI().getInstallOrReinstallDbButton().setMnemonic(mnemonic.charAt(0));
175 }
176
177 }
178 });
179
180 updateMessage();
181
182 SwingUtilities.invokeLater(
183 new Runnable() {
184 @Override
185 public void run() {
186 getContext().getMainUI().getBody().repaint();
187 }
188 }
189 );
190
191
192 getUI().getExportAllReferentialToFileButton().setEnabled(
193 SecurityContextHelper.hasAuthority(Quadrige2UserAuthority.LOCAL_ADMIN)
194 );
195 }
196
197
198 @Override
199 public String getTitle() {
200 return t("quadrige2.screen.DbManagerUI.title");
201 }
202
203
204
205
206
207
208
209 public String getInstallButtonText(boolean dbExist) {
210 String result;
211 if (dbExist) {
212 result = t("quadrige2.dbManager.action.reinstallDb");
213 } else {
214 result = t("quadrige2.dbManager.action.installDb");
215 }
216 return result;
217 }
218
219
220
221
222
223
224
225 public String getInstallButtonTip(boolean dbExist) {
226 String result;
227 if (dbExist) {
228 result = t("quadrige2.dbManager.action.reinstallDb.tip");
229 } else {
230 result = t("quadrige2.dbManager.action.installDb.tip");
231 }
232 return result;
233 }
234 }