View Javadoc
1   package fr.ifremer.dali.ui.swing.content.config;
2   
3   /*
4    * #%L
5    * Dali :: 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.dali.config.DaliConfiguration;
28  import fr.ifremer.dali.config.DaliConfigurationOption;
29  import fr.ifremer.dali.config.DaliSecuredConfigurationOption;
30  import fr.ifremer.dali.map.MapMode;
31  import fr.ifremer.dali.map.MapProjection;
32  import fr.ifremer.dali.ui.swing.DaliUIContext;
33  import fr.ifremer.dali.ui.swing.action.GoToPreviousScreenAction;
34  import fr.ifremer.dali.ui.swing.action.ReloadApplicationAction;
35  import fr.ifremer.dali.ui.swing.util.AbstractDaliUIHandler;
36  import fr.ifremer.dali.ui.swing.util.DaliUI;
37  import fr.ifremer.quadrige3.core.config.QuadrigeConfigurationOption;
38  import fr.ifremer.quadrige3.core.config.QuadrigeCoreConfigurationOption;
39  import fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority;
40  import fr.ifremer.quadrige3.ui.swing.table.editor.DatePatternCellEditor;
41  import fr.ifremer.quadrige3.ui.swing.table.editor.EnumValueCellEditor;
42  import fr.ifremer.quadrige3.ui.swing.table.editor.NumberCellEditor;
43  import fr.ifremer.quadrige3.ui.swing.table.renderer.CheckBoxRenderer;
44  import fr.ifremer.quadrige3.ui.swing.table.renderer.EnumValueCellRenderer;
45  import jaxx.runtime.SwingUtil;
46  import jaxx.runtime.swing.config.ConfigUI;
47  import jaxx.runtime.swing.config.ConfigUIHelper;
48  import jaxx.runtime.swing.config.model.MainCallBackFinalizer;
49  
50  import javax.swing.DefaultCellEditor;
51  import javax.swing.JComponent;
52  import javax.swing.JTextField;
53  import javax.swing.table.DefaultTableCellRenderer;
54  import java.awt.BorderLayout;
55  import java.util.List;
56  
57  import static org.nuiton.i18n.I18n.n;
58  import static org.nuiton.i18n.I18n.t;
59  
60  /**
61   * <p>DaliConfigUIHandler class.</p>
62   *
63   * @since 1.0
64   */
65  public class DaliConfigUIHandler extends AbstractDaliUIHandler<DaliUIContext, DaliConfigUI> {
66  
67      /**
68       * Constant <code>CALLBACK_APPLICATION="application"</code>
69       */
70      private static final String CALLBACK_APPLICATION = "application";
71  
72      /**
73       * Constant <code>CALLBACK_UI="ui"</code>
74       */
75      private static final String CALLBACK_UI = "ui";
76  
77      @Override
78      public void beforeInit(DaliConfigUI ui) {
79          super.beforeInit(ui);
80  
81          ui.setContextValue(SwingUtil.createActionIcon("config"));
82      }
83  
84      /**
85       * {@inheritDoc}
86       */
87      @Override
88      public void afterInit(DaliConfigUI ui) {
89  
90          initUI(ui);
91  
92          getContext().getSwingSession().addUnsavedRootComponentByName(ui.getName());
93  
94          DaliConfiguration config = getConfig();
95  
96          ConfigUIHelper helper = new ConfigUIHelper(config.getApplicationConfig(), config.getApplicationConfig(), config.getConfigFile());
97  
98          helper.registerCallBack(
99                  CALLBACK_UI, n("dali.config.action.reload.ui"),
100                 SwingUtil.createActionIcon("reload-ui"),
101                 this::reloadUI
102         ).registerCallBack(
103                 CALLBACK_APPLICATION, n("dali.config.action.reload.application"),
104                 SwingUtil.createActionIcon("reload-application"),
105                 this::reloadApplication
106         );
107 
108         // Application category
109         helper.addCategory(n("dali.config.category.application"), n("dali.config.category.application.description"))
110                 .addOption(DaliConfigurationOption.CONTROL_SURVEY_LOCATION_MINIMUM_DISTANCE_IN_METER)
111                 .setOptionEditor(new NumberCellEditor<>(Integer.class, false, DaliUI.INT_6_DIGITS_PATTERN))
112                 .setOptionShortLabel(t("dali.config.option.control.survey.location.minDistance.meter.shortLabel"));
113 
114         // Data category
115         List<QuadrigeUserAuthority> neededRoles = Lists.newArrayList(QuadrigeUserAuthority.ADMIN);
116         helper.addCategory(n("dali.config.category.data"), n("dali.config.category.data.description"), CALLBACK_APPLICATION)
117                 // Authentication URL :
118                 .addOption(new DaliSecuredConfigurationOption(QuadrigeCoreConfigurationOption.AUTHENTICATION_INTRANET_SITE_URL, neededRoles))
119                 .setOptionEditor(new DefaultCellEditor(new JTextField()))
120                 .setOptionShortLabel(t("dali.config.option.authentication.intranet.site.url.shortLabel"))
121                 .addOption(new DaliSecuredConfigurationOption(QuadrigeCoreConfigurationOption.AUTHENTICATION_EXTRANET_SITE_URL, neededRoles))
122                 .setOptionShortLabel(t("dali.config.option.authentication.extranet.site.url.shortLabel"))
123                 .addOption(new DaliSecuredConfigurationOption(QuadrigeConfigurationOption.SYNCHRONIZATION_SITE_URL, neededRoles))
124                 .setOptionShortLabel(t("dali.config.option.synchronization.site.url.shortLabel"))
125                 .addOption(new DaliSecuredConfigurationOption(DaliConfigurationOption.SITE_URL, neededRoles))
126                 .setOptionShortLabel(t("dali.config.option.site.url.shortLabel"))
127                 .addOption(new DaliSecuredConfigurationOption(QuadrigeCoreConfigurationOption.UPDATE_APPLICATION_URL, neededRoles))
128                 .setOptionShortLabel(t("dali.config.option.update.application.url.shortLabel"))
129                 .addOption(new DaliSecuredConfigurationOption(QuadrigeCoreConfigurationOption.UPDATE_DATA_URL, neededRoles))
130                 .setOptionShortLabel(t("dali.config.option.update.data.url.shortLabel"))
131                 .addOption(new DaliSecuredConfigurationOption(DaliConfigurationOption.SISMER_WEBSITE_URL, neededRoles))
132                 .setOptionShortLabel(t("dali.config.option.campaign.sismer.url.shortLabel"));
133 
134         // UI category
135         helper.addCategory(n("dali.config.category.ui"), n("dali.config.category.ui.description"), CALLBACK_UI)
136                 .addOption(DaliConfigurationOption.COLOR_ALTERNATE_ROW)
137                 .setOptionShortLabel(t("dali.config.option.ui.color.alternateRow.shortLabel"))
138                 .addOption(DaliConfigurationOption.COLOR_SELECTED_ROW)
139                 .setOptionShortLabel(t("dali.config.option.ui.color.selectedRow.shortLabel"))
140                 .addOption(DaliConfigurationOption.COLOR_ROW_INVALID)
141                 .setOptionShortLabel(t("dali.config.option.ui.color.rowInvalid.shortLabel"))
142                 .addOption(DaliConfigurationOption.COLOR_ROW_READ_ONLY)
143                 .setOptionShortLabel(t("dali.config.option.ui.color.rowReadOnly.shortLabel"))
144                 .addOption(DaliConfigurationOption.COLOR_CELL_WITH_VALUE)
145                 .setOptionShortLabel(t("dali.config.option.ui.color.cellWithValue.shortLabel"))
146                 .addOption(DaliConfigurationOption.COLOR_COMPUTED_WEIGHTS)
147                 .setOptionShortLabel(t("dali.config.option.ui.color.computedWeights.shortLabel"))
148                 .addOption(DaliConfigurationOption.COLOR_BLOCKING_LAYER)
149                 .setOptionShortLabel(t("dali.config.option.ui.color.blockingLayer.shortLabel"))
150                 .addOption(DaliConfigurationOption.COLOR_SELECTED_CELL)
151                 .setOptionShortLabel(t("dali.config.option.ui.color.selectedCell.shortLabel"))
152                 .addOption(DaliConfigurationOption.COLOR_UNUSED_EDITOR_BACKGROUND)
153                 .setOptionShortLabel(t("dali.config.option.ui.color.unusedEditorBackground.shortLabel"))
154                 .addOption(DaliConfigurationOption.DATE_FORMAT).setOptionEditor(new DatePatternCellEditor())
155                 .setOptionShortLabel(t("dali.config.option.ui.dateFormat.shortLabel"))
156                 .addOption(DaliConfigurationOption.DATE_TIME_FORMAT).setOptionEditor(new DatePatternCellEditor())
157                 .setOptionShortLabel(t("dali.config.option.ui.dateTimeFormat.shortLabel"))
158                 .addOption(DaliConfigurationOption.TABLES_CHECKBOX).setOptionRenderer(new CheckBoxRenderer())
159                 .setOptionShortLabel(t("dali.config.option.ui.table.showCheckbox.shortLabel"));
160 
161         // Map category
162         helper.addCategory(n("dali.config.category.map"), n("dali.config.category.map.description"), CALLBACK_UI)
163                 .addOption(DaliConfigurationOption.MAP_BASE_LAYER_DEFAULT)
164                 .setOptionShortLabel(t("dali.config.option.survey.map.baseLayer.default.shortLabel"))
165                 .setOptionEditor(new EnumValueCellEditor(MapMode.class))
166                 .setOptionRenderer(new EnumValueCellRenderer(MapMode.class))
167                 .addOption(DaliConfigurationOption.MAP_PROJECTION_CODE)
168                 .setOptionShortLabel(t("dali.config.option.survey.map.projection.code.shortLabel"))
169                 .setOptionEditor(new EnumValueCellEditor(MapProjection.class))
170                 .setOptionRenderer(new EnumValueCellRenderer(MapProjection.class))
171 //                .addOption(DaliConfigurationOption.MAP_SEXTANT_WMS_URL)
172 //                .setOptionShortLabel(t("dali.config.option.survey.map.sextantWMS.url.shortLabel"))
173                 .addOption(DaliConfigurationOption.MAP_SEXTANT_WMTS_URL)
174                 .setOptionShortLabel(t("dali.config.option.survey.map.sextantWMTS.url.shortLabel"))
175                 .setOptionEditor(new DefaultCellEditor(new JTextField())).setOptionRenderer(new DefaultTableCellRenderer()) // reset for below options
176                 .addOption(DaliConfigurationOption.MAP_OSM_URL)
177                 .setOptionShortLabel(t("dali.config.option.survey.map.openStreetMap.url.shortLabel"))
178                 .addOption(DaliConfigurationOption.MAP_OTM_URL)
179                 .setOptionShortLabel(t("dali.config.option.survey.map.openTopoMap.url.shortLabel"))
180                 .addOption(DaliConfigurationOption.MAP_CARTO_BASE_URL)
181                 .setOptionShortLabel(t("dali.config.option.survey.map.cartoBase.url.shortLabel"))
182                 .addOption(DaliConfigurationOption.MAP_SATELLITE_URL)
183                 .setOptionShortLabel(t("dali.config.option.survey.map.satellite.url.shortLabel"))
184                 .addOption(DaliConfigurationOption.MAP_MAX_SELECTION)
185                 .setOptionShortLabel(t("dali.config.option.survey.map.maxSelection.shortLabel"))
186         ;
187 
188         // Technical category
189         helper.addCategory(n("dali.config.category.technical"), n("dali.config.category.technical.description"), CALLBACK_APPLICATION)
190                 .addOption(DaliConfigurationOption.BASEDIR)
191                 .setOptionShortLabel(t("dali.config.option.basedir.shortLabel"))
192                 .addOption(QuadrigeConfigurationOption.DATA_DIRECTORY)
193                 .setOptionShortLabel(t("dali.config.option.data.directory.shortLabel"))
194                 .addOption(QuadrigeConfigurationOption.TMP_DIRECTORY)
195                 .setOptionShortLabel(t("dali.config.option.tmp.directory.shortLabel"))
196                 .addOption(QuadrigeConfigurationOption.I18N_DIRECTORY)
197                 .setOptionShortLabel(t("dali.config.option.i18n.directory.shortLabel"))
198                 .addOption(DaliConfigurationOption.HELP_DIRECTORY)
199                 .setOptionShortLabel(t("dali.config.option.help.directory.shortLabel"))
200                 .addOption(QuadrigeCoreConfigurationOption.CONFIG_DIRECTORY)
201                 .setOptionShortLabel(t("dali.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(DaliConfigurationOption.DB_BACKUP_EXTERNAL_DIRECTORY)
209                 .setOptionShortLabel(t("dali.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(DaliConfigurationOption.UI_CONFIG_FILE)
215                 .setOptionShortLabel(t("dali.config.option.ui.config.file.shortLabel"));
216 
217         helper.setFinalizer(new MainCallBackFinalizer(CALLBACK_APPLICATION));
218 
219         helper.setCloseAction(() -> getContext().getActionEngine().runInternalAction(
220                 DaliConfigUIHandler.this,
221                 GoToPreviousScreenAction.class));
222         ConfigUI configUI = helper.buildUI(
223                 getUI(),
224                 n("dali.config.category.application"));
225 
226         configUI.getHandler().setTopContainer(getUI());
227         getUI().add(configUI, BorderLayout.CENTER);
228     }
229 
230     /**
231      * {@inheritDoc}
232      */
233     @Override
234     protected JComponent getComponentToFocus() {
235         return getUI();
236     }
237 
238     /**
239      * <p>reloadApplication.</p>
240      */
241     private void reloadApplication() {
242         ReloadApplicationAction action = getContext().getActionFactory().createLogicAction(this, ReloadApplicationAction.class);
243         getContext().getActionEngine().runAction(action);
244     }
245 
246     /**
247      * <p>reloadUI.</p>
248      */
249     private void reloadUI() {
250         getContext().getMainUI().getHandler().reloadUI();
251     }
252 
253 }