View Javadoc
1   package fr.ifremer.quadrige2.ui.swing.common.content.db;
2   
3   /*-
4    * #%L
5    * Quadrige2 Core :: Quadrige2 UI Common
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2017 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
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   * <p>DbManagerUIHandler class.</p>
53   *
54   * @since 1.0
55   */
56  public class DbManagerUIHandler extends AbstractUIHandler<ApplicationUIContext, DbManagerUI> {
57  
58      /**
59       * Logger.
60       */
61      private static final Log LOG = LogFactory.getLog(DbManagerUIHandler.class);
62  
63      /**
64       * <p>updateMessage.</p>
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  //            String jdbcUrl = config.getJdbcUrl();
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                  // db loaded
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                  // no db loaded
100                 title = n("quadrige2.dbManager.info.no.db.loaded");
101             }
102 
103             // get referential version
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             // db does not exist
139             message = t("quadrige2.dbManager.info.no.db.exist");
140         }
141         String result = ApplicationUIUtil.getHtmlString(message);
142         getUI().getInformationArea().setText(result);
143     }
144 
145     /** {@inheritDoc} */
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     /** {@inheritDoc} */
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         // Export all referential to create a install DB : only available for local administrator (see mantis #26694)
192         getUI().getExportAllReferentialToFileButton().setEnabled(
193                 SecurityContextHelper.hasAuthority(Quadrige2UserAuthority.LOCAL_ADMIN)
194         );
195     }
196 
197     /** {@inheritDoc} */
198     @Override
199     public String getTitle() {
200         return t("quadrige2.screen.DbManagerUI.title");
201     }
202 
203     /**
204      * <p>getInstallButtonText.</p>
205      *
206      * @param dbExist a boolean.
207      * @return a {@link String} object.
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      * <p>getInstallButtonTip.</p>
221      *
222      * @param dbExist a boolean.
223      * @return a {@link String} object.
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 }