View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.config;
2   
3   /*
4    * #%L
5    * Reef DB :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 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  import com.google.common.collect.Lists;
27  import fr.ifremer.quadrige3.core.config.QuadrigeConfigurationOption;
28  import fr.ifremer.quadrige3.core.config.QuadrigeCoreConfigurationOption;
29  import fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority;
30  import fr.ifremer.quadrige3.ui.swing.table.editor.DatePatternCellEditor;
31  import fr.ifremer.quadrige3.ui.swing.table.renderer.CheckBoxRenderer;
32  import fr.ifremer.reefdb.config.ReefDbConfiguration;
33  import fr.ifremer.reefdb.config.ReefDbConfigurationOption;
34  import fr.ifremer.reefdb.config.ReefDbReadOnlyConfigurationOption;
35  import fr.ifremer.reefdb.config.ReefDbSecuredConfigurationOption;
36  import fr.ifremer.reefdb.ui.swing.ReefDbUIContext;
37  import fr.ifremer.reefdb.ui.swing.action.GoToPreviousScreenAction;
38  import fr.ifremer.reefdb.ui.swing.action.ReloadApplicationAction;
39  import fr.ifremer.reefdb.ui.swing.util.AbstractReefDbUIHandler;
40  import jaxx.runtime.SwingUtil;
41  import jaxx.runtime.swing.config.ConfigUI;
42  import jaxx.runtime.swing.config.ConfigUIHelper;
43  import jaxx.runtime.swing.config.model.MainCallBackFinalizer;
44  import org.apache.commons.logging.Log;
45  import org.apache.commons.logging.LogFactory;
46  
47  import javax.swing.DefaultCellEditor;
48  import javax.swing.JComponent;
49  import javax.swing.JTextField;
50  import java.awt.BorderLayout;
51  import java.util.List;
52  
53  import static org.nuiton.i18n.I18n.n;
54  import static org.nuiton.i18n.I18n.t;
55  
56  /**
57   * <p>ReefDbConfigUIHandler class.</p>
58   *
59   * @since 1.0
60   */
61  public class ReefDbConfigUIHandler extends AbstractReefDbUIHandler<ReefDbUIContext, ReefDbConfigUI> {
62  
63      /**
64       * Logger.
65       */
66      private static final Log LOG = LogFactory.getLog(ReefDbConfigUIHandler.class);
67  
68      /**
69       * Constant <code>CALLBACK_APPLICATION="application"</code>
70       */
71      public static final String CALLBACK_APPLICATION = "application";
72  
73      /**
74       * Constant <code>CALLBACK_UI="ui"</code>
75       */
76      public static final String CALLBACK_UI = "ui";
77  
78  //    public static final String CALLBACK_CACHE = "cache";
79  
80      @Override
81      public void beforeInit(ReefDbConfigUI ui) {
82          super.beforeInit(ui);
83  
84          ui.setContextValue(SwingUtil.createActionIcon("config"));
85  
86      }
87  
88      /**
89       * {@inheritDoc}
90       */
91      @Override
92      public void afterInit(ReefDbConfigUI ui) {
93  
94          initUI(ui);
95  
96          getContext().getSwingSession().addUnsavedRootComponentByName(ui.getName());
97  
98          ReefDbConfiguration config = getConfig();
99  
100         ConfigUIHelper helper = new ConfigUIHelper(config.getApplicationConfig(), config.getApplicationConfig(), config.getConfigFile());
101 
102         helper.registerCallBack(
103                 CALLBACK_UI, n("reefdb.config.action.reload.ui"),
104                 SwingUtil.createActionIcon("reload-ui"),
105                 this::reloadUI
106         ).registerCallBack(
107                 CALLBACK_APPLICATION, n("reefdb.config.action.reload.application"),
108                 SwingUtil.createActionIcon("reload-application"),
109                 this::reloadApplication
110         )/*.registerCallBack(
111                 CALLBACK_CACHE, n("reefdb.config.action.reload.cache"),
112                 SwingUtil.createActionIcon("reload-ui"),
113                 new Runnable() {
114 
115                     @Override
116                     public void run() {
117                         reloadPersistence();
118                     }
119                 }
120         )*/;
121 
122 //        // Application category
123 //        helper.addCategory(n("reefdb.config.category.applications"),
124 //            n("reefdb.config.category.applications.description"), CALLBACK_CACHE);
125 //            //            .addOption(ReefDbConfigurationOption.CSV_SEPARATOR)
126 //            //            .setOptionEditor(new DefaultCellEditor(new JTextField()))
127 //            //            .setOptionShortLabel(t("reefdb.config.option.csv.separator.shortLabel"))
128 //
129 //        helper.addOption(ReefDbConfigurationOption.PREDOC_PERIOD_LENGTH)
130 //            .setOptionEditor(newNumberCellEditor(Integer.class, false, ReefDbUI.INT_2_DIGITS_PATTERN, 1, 24))
131 //            .setOptionShortLabel(t("reefdb.config.option.predocumentation.period.length.shortLabel"));
132 
133         // Data category
134         List<QuadrigeUserAuthority> neededRoles = Lists.newArrayList(QuadrigeUserAuthority.LOCAL_ADMIN, QuadrigeUserAuthority.ADMIN);
135         helper.addCategory(n("reefdb.config.category.data"),
136                 n("reefdb.config.category.data.description"),
137                 CALLBACK_APPLICATION)
138                 // Authentification URL :
139                 .addOption(new ReefDbSecuredConfigurationOption(QuadrigeCoreConfigurationOption.AUTHENTICATION_INTRANET_SITE_URL, neededRoles))
140                 .setOptionEditor(new DefaultCellEditor(new JTextField()))
141                 .setOptionShortLabel(t("reefdb.config.option.authentication.intranet.site.url.shortLabel"))
142                 .addOption(new ReefDbSecuredConfigurationOption(QuadrigeCoreConfigurationOption.AUTHENTICATION_EXTRANET_SITE_URL, neededRoles))
143                 .setOptionShortLabel(t("reefdb.config.option.authentication.extranet.site.url.shortLabel"))
144                 .addOption(new ReefDbSecuredConfigurationOption(QuadrigeConfigurationOption.SYNCHRONIZATION_SITE_URL, neededRoles))
145                 .setOptionShortLabel(t("reefdb.config.option.synchronization.site.url.shortLabel"))
146                 .addOption(new ReefDbReadOnlyConfigurationOption(ReefDbConfigurationOption.PMFM_ID_DEPTH_VALUES))
147                 .setOptionShortLabel(t("reefdb.config.option.pmfm.id.depthValues.shortLabel"))
148                 .addOption(new ReefDbReadOnlyConfigurationOption(ReefDbConfigurationOption.PMFM_IDS_TRANSITION_LENGTH))
149                 .setOptionShortLabel(t("reefdb.config.option.pmfm.ids.transitionLength.shortLabel"))
150         ;
151 
152         // UI category
153         helper.addCategory(n("reefdb.config.category.ui"),
154                 n("reefdb.config.category.ui.description"),
155                 CALLBACK_UI)
156                 .addOption(ReefDbConfigurationOption.COLOR_ALTERNATE_ROW)
157                 .setOptionShortLabel(t("reefdb.config.option.ui.color.alternateRow.shortLabel"))
158                 .addOption(ReefDbConfigurationOption.COLOR_SELECTED_ROW)
159                 .setOptionShortLabel(t("reefdb.config.option.ui.color.selectedRow.shortLabel"))
160                 .addOption(ReefDbConfigurationOption.COLOR_ROW_INVALID)
161                 .setOptionShortLabel(t("reefdb.config.option.ui.color.rowInvalid.shortLabel"))
162                 .addOption(ReefDbConfigurationOption.COLOR_ROW_READ_ONLY)
163                 .setOptionShortLabel(t("reefdb.config.option.ui.color.rowReadOnly.shortLabel"))
164                 .addOption(ReefDbConfigurationOption.COLOR_CELL_WITH_VALUE)
165                 .setOptionShortLabel(t("reefdb.config.option.ui.color.cellWithValue.shortLabel"))
166                 .addOption(ReefDbConfigurationOption.COLOR_COMPUTED_WEIGHTS)
167                 .setOptionShortLabel(t("reefdb.config.option.ui.color.computedWeights.shortLabel"))
168                 .addOption(ReefDbConfigurationOption.COLOR_BLOCKING_LAYER)
169                 .setOptionShortLabel(t("reefdb.config.option.ui.color.blockingLayer.shortLabel"))
170                 .addOption(ReefDbConfigurationOption.COLOR_SELECTED_CELL)
171                 .setOptionShortLabel(t("reefdb.config.option.ui.color.selectedCell.shortLabel"))
172                 .addOption(ReefDbConfigurationOption.DATE_FORMAT).setOptionEditor(new DatePatternCellEditor())
173                 .setOptionShortLabel(t("reefdb.config.option.ui.dateFormat.shortLabel"))
174                 .addOption(ReefDbConfigurationOption.DATE_TIME_FORMAT).setOptionEditor(new DatePatternCellEditor())
175                 .setOptionShortLabel(t("reefdb.config.option.ui.dateTimeFormat.shortLabel"))
176                 .addOption(ReefDbConfigurationOption.TABLES_CHECKBOX).setOptionRenderer(new CheckBoxRenderer())
177                 .setOptionShortLabel(t("reefdb.config.option.ui.table.showCheckbox.shortLabel"));
178 
179         // Fonctional category
180 //        helper.addCategory(n("reefdb.config.category.fonctional"),
181 //                n("reefdb.config.category.fonctional.description"), CALLBACK_UI)
182 //                .addOption(ReefDbConfigurationOption.TABBED_PANE_OBSERVATION_MESURES_CHECKBOX).setOptionRenderer(new CheckBoxRenderer())
183 //                .setOptionShortLabel(t("reefdb.config.option.ui.tabbedPane.observation.mesures.showCheckbox"))
184 //                .addOption(ReefDbConfigurationOption.TABBED_PANE_PRELEVEMENTS_DETAILS_CHECKBOX).setOptionRenderer(new CheckBoxRenderer())
185 //                .setOptionShortLabel(t("reefdb.config.option.ui.tabbedPane.prelevements.details.showCheckbox"));
186 
187         // Technical category
188         helper.addCategory(n("reefdb.config.category.technical"),
189                 n("reefdb.config.category.technical.description"), CALLBACK_APPLICATION)
190                 .addOption(ReefDbConfigurationOption.BASEDIR)
191                 .setOptionShortLabel(t("reefdb.config.option.basedir.shortLabel"))
192                 .addOption(QuadrigeConfigurationOption.DATA_DIRECTORY)
193                 .setOptionShortLabel(t("reefdb.config.option.data.directory.shortLabel"))
194                 .addOption(QuadrigeConfigurationOption.TMP_DIRECTORY)
195                 .setOptionShortLabel(t("reefdb.config.option.tmp.directory.shortLabel"))
196                 .addOption(QuadrigeConfigurationOption.I18N_DIRECTORY)
197                 .setOptionShortLabel(t("reefdb.config.option.i18n.directory.shortLabel"))
198                 .addOption(ReefDbConfigurationOption.HELP_DIRECTORY)
199                 .setOptionShortLabel(t("reefdb.config.option.help.directory.shortLabel"))
200                 .addOption(QuadrigeCoreConfigurationOption.CONFIG_DIRECTORY)
201                 .setOptionShortLabel(t("reefdb.config.option.config.directory.shortLabel"))
202                 .addOption(QuadrigeConfigurationOption.JDBC_URL)
203                 .setOptionShortLabel(t("quadrige3.config.option.persistence.jdbc.url.shortLabel"))
204                 .addOption(QuadrigeConfigurationOption.DB_DIRECTORY)
205                 .setOptionShortLabel(t("quadrige3.config.option.persistence.db.directory.shortLabel"))
206                 .addOption(QuadrigeConfigurationOption.DB_BACKUP_DIRECTORY)
207                 .setOptionShortLabel(t("quadrige3.config.option.persistence.db.backup.directory.shortLabel"))
208                 .addOption(ReefDbConfigurationOption.DB_BACKUP_EXTERNAL_DIRECTORY)
209                 .setOptionShortLabel(t("reefdb.config.option.persistence.db.backup.external.directory.shortLabel"))
210                 .addOption(QuadrigeConfigurationOption.DB_ATTACHMENT_DIRECTORY)
211                 .setOptionShortLabel(t("quadrige3.config.option.persistence.db.attachment.directory.shortLabel"))
212                 .addOption(QuadrigeConfigurationOption.DB_CACHE_DIRECTORY)
213                 .setOptionShortLabel(t("quadrige3.config.option.persistence.db.cache.directory.shortLabel"))
214                 .addOption(ReefDbConfigurationOption.UI_CONFIG_FILE)
215                 .setOptionShortLabel(t("reefdb.config.option.ui.config.file.shortLabel"))
216                 .addOption(ReefDbConfigurationOption.SITE_URL)
217                 .setOptionShortLabel(t("reefdb.config.option.site.url.shortLabel"))
218                 .addOption(QuadrigeCoreConfigurationOption.UPDATE_APPLICATION_URL)
219                 .setOptionShortLabel(t("reefdb.config.option.update.application.url.shortLabel"))
220                 .addOption(QuadrigeCoreConfigurationOption.UPDATE_DATA_URL)
221                 .setOptionShortLabel(t("reefdb.config.option.update.data.url.shortLabel"));
222 
223 
224         helper.setFinalizer(new MainCallBackFinalizer(CALLBACK_APPLICATION));
225 
226         helper.setCloseAction(() -> getContext().getActionEngine().runInternalAction(
227                 ReefDbConfigUIHandler.this,
228                 GoToPreviousScreenAction.class));
229         ConfigUI configUI = helper.buildUI(
230                 getUI(),
231                 n("reefdb.config.category.data"));
232 //            n("reefdb.config.category.applications"));
233 
234         configUI.getHandler().setTopContainer(getUI());
235         getUI().add(configUI, BorderLayout.CENTER);
236     }
237 
238     /**
239      * {@inheritDoc}
240      */
241     @Override
242     protected JComponent getComponentToFocus() {
243         return getUI();
244     }
245 
246     /**
247      * <p>reloadApplication.</p>
248      */
249     protected void reloadApplication() {
250         ReloadApplicationAction action = getContext().getActionFactory().createLogicAction(this, ReloadApplicationAction.class);
251         getContext().getActionEngine().runAction(action);
252     }
253 
254     /**
255      * <p>reloadUI.</p>
256      */
257     protected void reloadUI() {
258         getContext().getMainUI().getHandler().reloadUI();
259     }
260 
261 //    protected void reloadPersistence() {
262 //        getContext().reloadDbCache(progressionModel);
263 //        reloadUI();
264 //    }
265 
266 }