Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: ebe457ca by tchemit at 2019-09-25T09:29:37Z Review Report action - - - - - 18 changed files: - client-core/src/main/i18n/getters/java.getter - client-core/src/main/i18n/getters/jaxx.getter - client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminActionModel.java - client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java - client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIInitializer.java - client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportConfigUI.jaxx - client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportConfigUI.jcss - client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportModel.java - client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUI.jaxx - client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUI.jcss - client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUIHandler.java - + client-core/src/main/java/fr/ird/observe/client/ui/admin/report/actions/ChooseFileReport.java - + client-core/src/main/java/fr/ird/observe/client/ui/admin/report/actions/CopyResultToClipboard.java - client-core/src/main/java/fr/ird/observe/client/ui/content/api/ContentUIInitializer.java - client-db/src/main/java/fr/ird/observe/client/ui/util/UIHelperSupport.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties Changes: ===================================== client-core/src/main/i18n/getters/java.getter ===================================== @@ -46,6 +46,7 @@ observe.action.configuration.tip observe.action.connexions observe.action.connexions.tip observe.action.continue +observe.action.copy observe.action.copy.to.clipBoard observe.action.copyFloatingObjectPartToLeft observe.action.copyFloatingObjectPartToLeft.tip @@ -153,12 +154,10 @@ observe.actions.operation.message.needFix observe.actions.operation.message.running observe.actions.operation.message.successed observe.actions.report -observe.actions.report.description -observe.actions.report.title -observe.actions.report.title.tip observe.actions.saveLocal observe.actions.saveLocal.description observe.actions.synchro.cancel.tip +observe.actions.synchro.copy.tip observe.actions.synchro.data observe.actions.synchro.data.copyToLeft.tip observe.actions.synchro.data.copyToRight.tip @@ -262,6 +261,9 @@ observe.actions.validate.validator.message.header observe.actions.validate.validator.message.header.tip observe.actions.validate.validator.scope.header observe.actions.validate.validator.scope.header.tip +observe.admin.report.description +observe.admin.report.title +observe.admin.report.title.tip observe.admin.resume.no.operation.done observe.admin.resume.operation.canceled observe.admin.resume.operation.done ===================================== client-core/src/main/i18n/getters/jaxx.getter ===================================== @@ -9,15 +9,8 @@ observe.Id.species observe.Id.weightMeasureType observe.Id.whenArriving observe.Id.whenLeaving -observe.action.auto.copy.to.clipboard -observe.action.auto.copy.to.clipboard.tip observe.action.configuration observe.action.connexions -observe.action.copy -observe.action.copy.column.headers -observe.action.copy.column.headers.tip -observe.action.copy.row.headers -observe.action.copy.row.headers.tip observe.action.create observe.action.delete observe.action.floatingObjectPresets @@ -27,16 +20,6 @@ observe.action.save.all.tip observe.actions.longline.pairing.config observe.actions.operation.configuration observe.actions.operations -observe.actions.report.config -observe.actions.report.copy.options -observe.actions.report.model.type -observe.actions.report.report.description -observe.actions.report.result -observe.actions.report.select -observe.actions.report.select.file -observe.actions.report.select.file.tip -observe.actions.report.variables -observe.actions.synchro.copy.tip observe.actions.synchro.data.actionsToPerform observe.actions.synchro.referential.config.mode observe.actions.synchro.referential.obsolete.entities.list @@ -51,6 +34,21 @@ observe.actions.validate.select.mode observe.actions.validate.select.mode.tip observe.actions.validate.select.scope observe.actions.validate.select.scope.tip +observe.admin.report.auto.copy.to.clipboard +observe.admin.report.auto.copy.to.clipboard.tip +observe.admin.report.config +observe.admin.report.copy.column.headers +observe.admin.report.copy.column.headers.tip +observe.admin.report.copy.options +observe.admin.report.copy.row.headers +observe.admin.report.copy.row.headers.tip +observe.admin.report.model.type +observe.admin.report.report.description +observe.admin.report.result +observe.admin.report.select +observe.admin.report.select.file +observe.admin.report.select.file.tip +observe.admin.report.variables observe.common.directory observe.common.file observe.common.global.progression.description ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminActionModel.java ===================================== @@ -6,21 +6,24 @@ * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the + * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public + * + * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package fr.ird.observe.client.ui.admin; +import io.ultreia.java4all.bean.JavaBean; +import io.ultreia.java4all.bean.definition.JavaBeanDefinition; +import io.ultreia.java4all.bean.definition.JavaBeanDefinitionStore; import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardExtStepModel; /** @@ -29,10 +32,23 @@ import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardExtStepModel; * @author Tony Chemit - dev@tchemit.fr * @since 1.4 */ -public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> { +public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> implements JavaBean { + /** + * Lazy helper class that manages all java bean operations. + * + * @see #javaBeanDefinition() + */ + private transient JavaBeanDefinition javaBeanDefinition; protected AdminActionModel(AdminStep objectOperation) { super(objectOperation); } + @Override + public final JavaBeanDefinition javaBeanDefinition() { + return javaBeanDefinition == null + ? javaBeanDefinition = JavaBeanDefinitionStore.getDefinition(getClass()).orElseThrow(() -> new NullPointerException("Can't find JavaBeanDefinition for " + getClass())) + : javaBeanDefinition; + } + } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java ===================================== @@ -197,11 +197,11 @@ public enum AdminStep implements WizardExtStep { /** pour lancer la generation des rapports */ REPORT( - n("observe.actions.report.title"), - n("observe.actions.report.title.tip"), + n("observe.admin.report.title"), + n("observe.admin.report.title.tip"), "report", n("observe.actions.report"), - n("observe.actions.report.description"), + n("observe.admin.report.description"), ReportModel.class, ReportUI.class, false, ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIInitializer.java ===================================== @@ -25,7 +25,9 @@ package fr.ird.observe.client.ui.admin; import com.google.common.collect.ImmutableMap; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.content.api.ContentUIInitializer; +import fr.ird.observe.client.ui.util.BeanCheckBox; import fr.ird.observe.client.ui.util.UIHelper; +import fr.ird.observe.client.ui.util.UIHelperSupport; import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.dto.decoration.DecoratorService; import org.apache.commons.lang3.BooleanUtils; @@ -80,7 +82,6 @@ public class AdminTabUIInitializer<UI extends AdminTabUI> { private static final String CLIENT_PROPERTY_NOT_BLOCKING = "notBlocking"; - /** Logger. */ private static final Logger log = LogManager.getLogger(AdminTabUIInitializer.class); protected final UI ui; @@ -115,6 +116,10 @@ public class AdminTabUIInitializer<UI extends AdminTabUI> { // init((JComponent) o, doNotBlockComponentIds); // } + if (o instanceof BeanCheckBox) { + init((BeanCheckBox) o); + } + if (o instanceof AbstractButton) { init((AbstractButton) o); continue; @@ -191,6 +196,15 @@ public class AdminTabUIInitializer<UI extends AdminTabUI> { } } + protected void init(BeanCheckBox editor) { + log.debug("init simple boolean editor " + editor.getName()); + String propertyName = editor.getProperty(); + if (StringUtils.isEmpty(propertyName)) { + editor.setProperty(editor.getName()); + } + editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor)); + } + @SuppressWarnings("unchecked") protected void init(BeanComboBox beanComboBox) { if (log.isDebugEnabled()) { ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportConfigUI.jaxx ===================================== @@ -59,10 +59,7 @@ protected void finalize() throws Throwable { <JLabel id='modelTypeLabel'/> </cell> <cell weightx='1' fill="horizontal" columns="2"> - <EnumEditor id="modelType" - genericType='ObserveModelType' - constructorParams='ObserveModelType.class' - onItemStateChanged='getHandler().setModelTypeFromEvent(event)'/> + <EnumEditor id="modelType" genericType='ObserveModelType' constructorParams='ObserveModelType.class' onItemStateChanged='getHandler().setModelTypeFromEvent(event)'/> </cell> </row> <row> @@ -70,11 +67,10 @@ protected void finalize() throws Throwable { <JLabel id='reportFileLabel'/> </cell> <cell weightx='1' fill="horizontal"> - <JTextField id="reportFile" - onKeyReleased='stepModel.setReportFile(new File(((JTextField)event.getSource()).getText()))'/> + <JTextField id="reportFile" onKeyReleased='stepModel.setReportFile(new File(((JTextField)event.getSource()).getText()))'/> </cell> <cell anchor="east"> - <JButton id="reportFileChooserAction" onActionPerformed="getHandler().chooseReportFile()"/> + <JButton id="chooseFileReport"/> </cell> </row> </Table> ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportConfigUI.jcss ===================================== @@ -21,11 +21,11 @@ */ #reportConfig { - border:{new TitledBorder(t("observe.actions.report.config"))}; + border:{new TitledBorder(t("observe.admin.report.config"))}; } #modelTypeLabel { - text:"observe.actions.report.model.type"; + text:"observe.admin.report.model.type"; } #modelType { @@ -33,15 +33,11 @@ } #reportFileLabel { - text:"observe.actions.report.select.file"; - toolTipText:"observe.actions.report.select.file.tip"; + text:"observe.admin.report.select.file"; + toolTipText:"observe.admin.report.select.file.tip"; } #reportFile { text:{getStringValue(stepModel.getReportFile())}; } -#reportFileChooserAction { - actionIcon:"fileChooser"; -} - ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportModel.java ===================================== @@ -32,8 +32,9 @@ import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel; import fr.ird.observe.dto.ObserveModelType; import fr.ird.observe.services.service.actions.report.Report; import fr.ird.observe.services.service.actions.report.ReportBuilder; -import org.apache.logging.log4j.Logger; +import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.beans.PropertyChangeListener; import java.io.File; @@ -50,6 +51,7 @@ import java.util.stream.Collectors; * @author Tony Chemit - dev@tchemit.fr * @since 1.3 */ +@GenerateJavaBeanDefinition public class ReportModel extends AdminActionModel { public static final String SELECTED_TRIP_PROPERTY_NAME = "selectedTrip"; ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUI.jaxx ===================================== @@ -28,6 +28,8 @@ fr.ird.observe.client.ui.admin.AdminUI fr.ird.observe.services.service.actions.report.Report + fr.ird.observe.client.ui.util.BeanCheckBox + java.awt.Dimension javax.swing.DefaultComboBoxModel @@ -81,17 +83,15 @@ public void destroy() { </JScrollPane> <JPanel id="copyPane" constraints='BorderLayout.SOUTH'> - <JPanel id='copyOptions' constraints='BorderLayout.NORTH'> - <JCheckBox id='autoCopyToClipboard' - onStateChanged='getStepModel().setAutoCopyToClipboard(((JCheckBox)event.getSource()).isSelected())'/> - <JCheckBox id='copyRowHeaders' - onStateChanged='getStepModel().setCopyRowHeaders(((JCheckBox)event.getSource()).isSelected())'/> - <JCheckBox id='copyColumnHeaders' - onStateChanged='getStepModel().setCopyColumnHeaders(((JCheckBox)event.getSource()).isSelected())'/> + <JPanel id='copyOptions' constraints='BorderLayout.NORTH' beanScope="stepModel"> + <BeanCheckBox id='autoCopyToClipboard'/> +<!-- onStateChanged='getStepModel().setAutoCopyToClipboard(((JCheckBox)event.getSource()).isSelected())'/>--> + <BeanCheckBox id='copyRowHeaders'/> +<!-- onStateChanged='getStepModel().setCopyRowHeaders(((JCheckBox)event.getSource()).isSelected())'/>--> + <BeanCheckBox id='copyColumnHeaders'/> +<!-- onStateChanged='getStepModel().setCopyColumnHeaders(((JCheckBox)event.getSource()).isSelected())'/>--> </JPanel> - <JButton id="copy" constraints='BorderLayout.CENTER' - onActionPerformed='getHandler().copyReportToClipBoard(getStepModel().getSelectedReport(), getResultModel(), getStepModel().isCopyRowHeaders(), - getStepModel().isCopyColumnHeaders())'/> + <JButton id="copyResultToClipboard" constraints='BorderLayout.CENTER'/> </JPanel> ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUI.jcss ===================================== @@ -35,18 +35,17 @@ JToolBar { } #reportVariableSelectorPanel { - border:{new TitledBorder(t("observe.actions.report.variables"))}; + border:{new TitledBorder(t("observe.admin.report.variables"))}; layout:{new GridLayout(0,1)}; } #copyOptions { - border:{new TitledBorder(t("observe.actions.report.copy.options"))}; + border:{new TitledBorder(t("observe.admin.report.copy.options"))}; layout:{new GridLayout(0,1)}; } #resultPane { - border:{new TitledBorder(t("observe.actions.report.result"))}; - /*columnHeaderView:{resultTable.getTableHeader()};*/ + border:{new TitledBorder(t("observe.admin.report.result"))}; verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}; } @@ -56,7 +55,7 @@ JToolBar { } #requestSelectorPane { - border:{new TitledBorder(t("observe.actions.report.select"))}; + border:{new TitledBorder(t("observe.admin.report.select"))}; layout:{new BorderLayout()}; } @@ -66,7 +65,7 @@ JToolBar { } #reportDescriptionPane { - columnHeaderView:{UIHelper.newLabel(t("observe.actions.report.report.description") ,"information", 10)}; + columnHeaderView:{UIHelper.newLabel(t("observe.admin.report.report.description") ,"information", 10)}; minimumSize:{new Dimension(0,0)}; } @@ -86,29 +85,25 @@ JToolBar { #copyPane { layout:{new BorderLayout()}; } + #autoCopyToClipboard { - text:"observe.action.auto.copy.to.clipboard"; - toolTipText:"observe.action.auto.copy.to.clipboard.tip"; - selected:{stepModel.isAutoCopyToClipboard()}; + text:"observe.admin.report.auto.copy.to.clipboard"; + toolTipText:"observe.admin.report.auto.copy.to.clipboard.tip"; + /*selected:{stepModel.isAutoCopyToClipboard()};*/ } #copyRowHeaders { - text:"observe.action.copy.row.headers"; - toolTipText:"observe.action.copy.row.headers.tip"; - selected:{stepModel.isCopyRowHeaders()}; + text:"observe.admin.report.copy.row.headers"; + toolTipText:"observe.admin.report.copy.row.headers.tip"; + /*selected:{stepModel.isCopyRowHeaders()};*/ } #copyColumnHeaders { - text:"observe.action.copy.column.headers"; - toolTipText:"observe.action.copy.column.headers.tip"; - selected:{stepModel.isCopyColumnHeaders()}; -} - -#copy { - text:"observe.action.copy"; - toolTipText:"observe.actions.synchro.copy.tip"; - actionIcon:"report-copy"; - /*enabled:{stepModel.getSelectedReport() != null};*/ - enabled:{stepModel.isValid() }; - mnemonic:C; + text:"observe.admin.report.copy.column.headers"; + toolTipText:"observe.admin.report.copy.column.headers.tip"; + /*selected:{stepModel.isCopyColumnHeaders()};*/ +} + +#copyResultToClipboard { + enabled:{stepModel.isValid()}; } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUIHandler.java ===================================== @@ -26,7 +26,9 @@ import fr.ird.observe.client.ObserveSwingTechnicalException; import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.ui.admin.AdminStep; import fr.ird.observe.client.ui.admin.AdminTabUIHandler; +import fr.ird.observe.client.ui.admin.AdminTabUIInitializer; import fr.ird.observe.client.ui.admin.config.ConfigUI; +import fr.ird.observe.client.ui.admin.report.actions.CopyResultToClipboard; import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.util.UIHelperSupport; import fr.ird.observe.dto.ObserveModelType; @@ -61,7 +63,6 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Font; import java.awt.event.ItemEvent; -import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -87,26 +88,21 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa @Override public void afterInit(ReportUI ui) { + new AdminTabUIInitializer<>(ui).initUI(); super.afterInit(ui); - if (log.isDebugEnabled()) { - log.debug(" specialized for [" + ui.getStep() + "] for main ui " + parentUI.getClass().getName() + "@" + System.identityHashCode(this.ui)); - } + log.debug(String.format(" specialized for [%s] for main ui %s@%d", ui.getStep(), parentUI.getClass().getName(), System.identityHashCode(this.ui))); revalidateTabUI = ui::revalidate; - UIHelper.setLayerUI(ui.getContent(), parentUI.getConfigBlockLayerUI()); + UIHelperSupport.setLayerUI(ui.getContent(), parentUI.getConfigBlockLayerUI()); ReportModel stepModel = getStepModel(); stepModel.addPropertyChangeListener(evt -> { - if (ui.getModel().getModelState() == WizardState.CANCELED) { - // action annulée, on ne declanche plus rien return; } String propertyName = evt.getPropertyName(); Object newValue = evt.getNewValue(); - ReportModel source = (ReportModel) evt.getSource(); - if (ReportModel.REPORTS_PROPERTY_NAME.equals(propertyName)) { List<?> reports = (List<?>) newValue; onReportsChanged(ui, reports); @@ -119,8 +115,6 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa } else if (ReportModel.VALID_PROPERTY_NAME.equals(propertyName)) { final Boolean valid = (Boolean) newValue; SwingUtilities.invokeLater(() -> onValidChanged(source, valid != null && valid)); - - } }); @@ -130,14 +124,12 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if (value == null) { - // on affiche une message de sélection de report value = t("observe.message.select.report"); } return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); } } - ); // ajout du renderer sur le tableau @@ -180,15 +172,11 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa ui.getResultTable().setDefaultRenderer(String.class, renderer); // initialisation de l'ui de configuration - if (log.isInfoEnabled()) { - log.info("Init extra configuration for " + ui.getName()); - } + log.info(String.format("Init extra configuration for %s", ui.getName())); ConfigUI configUI = (ConfigUI) parentUI.getStepUI(AdminStep.CONFIG); JAXXInitialContext tx = new JAXXInitialContext().add(configUI).add(this); - ReportConfigUI extraConfig = new ReportConfigUI(tx); - configUI.getExtraConfig().add(extraConfig); } @@ -199,11 +187,7 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa } void updateSelectedReportFromEvent(ItemEvent event) { - if (event.getStateChange() == ItemEvent.SELECTED) { - if (log.isInfoEnabled()) { - log.info("Item selected!"); - } JComboBox source = (JComboBox) event.getSource(); updateSelectedReport((Report) source.getSelectedItem()); } @@ -212,11 +196,8 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa void updateSelectedReport(Report report) { ui.getModel().setBusy(true); try { - if (log.isInfoEnabled()) { - log.info("New selected report : " + report); - } + log.info(String.format("New selected report : %s", report)); getStepModel().setSelectedReport(report); - } finally { ui.getModel().setBusy(false); } @@ -232,64 +213,24 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa private void updateVariable(JComboBox combo, Object value) { String variableName = (String) combo.getClientProperty(VARIABLE_NAME); if (variableName == null) { - throw new IllegalStateException( - "No 'variableName' clientProperty on " + combo); + throw new IllegalStateException("No 'variableName' clientProperty on " + combo); } - log.info("Set variable [" + variableName + "] to value " + value); + log.info(String.format("Set variable [%s] to value %s", variableName, value)); getStepModel().addVariable(variableName, value); } - void chooseReportFile() { - ReportModel model = ui.getModel().getReportModel(); - File f = UIHelper.chooseFile( - ui, - t("observe.title.choose.reportFile"), - t("observe.action.choose.reportFile"), - model.getReportFile(), - "^.+\\.properties$", - t("observe.action.choose.reportFile.description")); - model.setReportFile(f); - } - - void copyReportToClipBoard(Report report, - ResultTableModel model, - boolean copyRowHeaders, - boolean copyColumnHeaders) { - if (report == null) { - - // pas de report sélectionné, rien à faire - return; - } - - if (log.isDebugEnabled()) { - log.debug("Will copy result of report " + report.getName()); - log.debug("Result dimension : [" + model.getRowCount() + "," + - model.getColumnCount() + "]"); - } - String content = model.getClipbordContent(copyRowHeaders, copyColumnHeaders); - UIHelper.copyToClipBoard(content); - } - private void onReportsChanged(ReportUI tabUI, List<?> newValue) { - - if (log.isDebugEnabled()) { - log.debug("New reports : " + newValue); - } - + log.debug("New reports : " + newValue); // on ajoute toujours une premiere valeur null (pour ne rien selectionne) newValue.add(0, null); - // on charge le nouveau modèle dans la liste déroulante - UIHelper.fillComboBox(tabUI.getReportSelector(), newValue, null); + UIHelperSupport.fillComboBox(tabUI.getReportSelector(), newValue, null); } @SuppressWarnings({"unchecked"}) private void onSelectedReportChanged(ReportUI tabUI, ReportModel model, Report report) { - log.info("New selected report [" + report + "]"); - ui.getModel().setBusy(true); - try { // on regénère l'ui de configuration des variables JPanel variablesPanel = tabUI.getReportVariableSelectorPanel(); @@ -303,30 +244,22 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa model.getResultModel().clear(); if (report != null) { - try { - ObserveSwingDataSource dataSource = ui.getModel().getConfigModel().getLocalSourceModel().getSafeSource(true); - ReportService reportService = dataSource.getReportService(); - report = reportService.populateVariables(report, ui.getModel().getSelectDataModel().getSelectedTripIds()); - } catch (Exception e) { throw new ObserveSwingTechnicalException("unable to populate report : " + report.getName(), e); } if (useVariables) { - // on construit les ui pour chaqsue variable for (ReportVariable variable : report.getVariables()) { String variableName = variable.getName(); - // String value = variables.get(variableName); Set values = variable.getValues(); List<Object> universe = new ArrayList<>(values); - - Decorator decorator; log.info("Variable type: " + variable.getType()); + Decorator decorator; Class type; if (ReferentialDto.class.isAssignableFrom(variable.getType()) && !universe.isEmpty()) { type = DtoModelHelper.fromReferentialDto(variable.getType()).toReferenceType(); @@ -340,7 +273,6 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa } log.info("Variable real type: " + type); BeanFilterableComboBox combo = UIHelperSupport.newBeanFilterableComboBox(type, (JXPathDecorator) decorator, universe); - combo.setShowReset(true); JPanel p = new JPanel(new BorderLayout()); p.add(new JLabel(t(I18nDecoratorHelper.getTypeI18nKey(variable.getType()))), BorderLayout.WEST); @@ -349,20 +281,14 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa JComboBox jComboBox = combo.getCombobox(); jComboBox.putClientProperty(VARIABLE_NAME, variableName); jComboBox.addItemListener(e -> { - JComboBox comboBox = (JComboBox) e.getSource(); - if (e.getStateChange() == ItemEvent.DESELECTED) { - - // ne rien faire de l'évènement de déselection - // sauf si le modèle devient vide - + // ne rien faire de l'évènement de déselection sauf si le modèle devient vide if (comboBox.getSelectedItem() == null) { updateVariable(comboBox, null); } return; } - Object o = e.getItem(); updateVariable(comboBox, o); }); @@ -371,51 +297,35 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa // on revalide la disposition de l'onglet SwingUtilities.invokeLater(revalidateTabUI); - Map<String, Object> variables = model.getVariables(); updateValidState(report, variables); } } finally { - ui.getModel().setBusy(false); - } } private void onVariablesChanges(ReportModel model, Map<String, Object> variables) { - Report report = model.getSelectedReport(); if (report != null) { - updateValidState(report, variables); } } private void onValidChanged(ReportModel model, boolean valid) { - - if (log.isInfoEnabled()) { - log.info("valid state changed to " + valid); - } - + log.info("valid state changed to " + valid); if (!valid) { // calcul des données et contruction du tableau model.getResultModel().clear(); return; } - ui.getModel().setBusy(true); - try { - Report report = model.getSelectedReport(); - ImmutableSet<String> tripIds = ui.getModel().getSelectDataModel().getSelectedTripIds(); DataDtoReference trip = ui.getModel().getSelectDataModel().getSelectedTrip(); - log.info(String.format("Build result for report [%s] on %s", report.getName(), trip)); - Map<String, Object> variables = model.getVariables(); - for (ReportVariable variable : report.getVariables()) { Object value = variables.get(variable.getName()); variable.setSelectedValue(value); @@ -429,11 +339,8 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa } ReportService reportService = dataSource.getReportService(); - DataMatrix data = reportService.executeReport(report, tripIds); - timeLog.log(startTime, "execute", report.getName()); - log.info("Result to display:\n" + data.getClipboardContent(true, true, false, '\t')); // calcul des données et contruction du tableau @@ -441,10 +348,10 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa // mise a jour du clipboard automatique si requis if (model.isAutoCopyToClipboard()) { - copyReportToClipBoard(report, - model.getResultModel(), - model.isCopyRowHeaders(), - model.isCopyColumnHeaders()); + CopyResultToClipboard.copyReportToClipBoard(report, + model.getResultModel(), + model.isCopyRowHeaders(), + model.isCopyColumnHeaders()); } } catch (Exception e) { UIHelper.handlingError("Could not obtain report data", e); ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/actions/ChooseFileReport.java ===================================== @@ -0,0 +1,56 @@ +package fr.ird.observe.client.ui.admin.report.actions; + +/*- + * #%L + * ObServe :: Client core + * %% + * Copyright (C) 2008 - 2019 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.client.ui.ObserveKeyStrokesSupport; +import fr.ird.observe.client.ui.admin.report.ReportConfigUI; +import fr.ird.observe.client.ui.admin.report.ReportModel; +import fr.ird.observe.client.ui.util.UIHelper; +import org.nuiton.jaxx.runtime.swing.action.JComponentActionSupport; + +import java.awt.event.ActionEvent; +import java.io.File; + +import static io.ultreia.java4all.i18n.I18n.t; + +public class ChooseFileReport extends JComponentActionSupport<ReportConfigUI> { + + public ChooseFileReport() { + super("", "", "fileChooser", ObserveKeyStrokesSupport.KEY_STROKE_STORAGE_DO_CHOOSE_FILE); + } + + @Override + protected void doActionPerformed(ActionEvent e, ReportConfigUI ui) { + ReportModel model = ui.getModel().getReportModel(); + File f = UIHelper.chooseFile( + ui, + t("observe.title.choose.reportFile"), + t("observe.action.choose.reportFile"), + model.getReportFile(), + "^.+\\.properties$", + t("observe.action.choose.reportFile.description")); + if (f != null) { + model.setReportFile(f); + } + } +} ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/report/actions/CopyResultToClipboard.java ===================================== @@ -0,0 +1,66 @@ +package fr.ird.observe.client.ui.admin.report.actions; + +/*- + * #%L + * ObServe :: Client core + * %% + * Copyright (C) 2008 - 2019 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.client.ui.admin.actions.AdminTabUIActionSupport; +import fr.ird.observe.client.ui.admin.report.ReportModel; +import fr.ird.observe.client.ui.admin.report.ReportUI; +import fr.ird.observe.client.ui.admin.report.ResultTableModel; +import fr.ird.observe.client.ui.util.UIHelperSupport; +import fr.ird.observe.services.service.actions.report.Report; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.awt.event.ActionEvent; + +import static io.ultreia.java4all.i18n.I18n.t; + +public class CopyResultToClipboard extends AdminTabUIActionSupport<ReportUI> { + + private static final Logger log = LogManager.getLogger(CopyResultToClipboard.class); + + public CopyResultToClipboard() { + super(t("observe.action.copy"), t("observe.actions.synchro.copy.tip"), "report-copy", 'C'); + } + + @Override + protected void doActionPerformed(ActionEvent e, ReportUI ui) { + ReportModel stepModel = ui.getStepModel(); + Report report = stepModel.getSelectedReport(); + ResultTableModel model = stepModel.getResultModel(); + copyReportToClipBoard(report, model, stepModel.isCopyRowHeaders(), stepModel.isCopyColumnHeaders()); + } + + public static void copyReportToClipBoard(Report report, + ResultTableModel model, + boolean copyRowHeaders, + boolean copyColumnHeaders) { + if (report == null) { + return; + } + + log.info(String.format("Will copy result of report %s - result dimension : [%d,%d]", report.getName(), model.getRowCount(), model.getColumnCount())); + String content = model.getClipbordContent(copyRowHeaders, copyColumnHeaders); + UIHelperSupport.copyToClipBoard(content); + } +} ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/api/ContentUIInitializer.java ===================================== @@ -33,6 +33,7 @@ import fr.ird.observe.client.ui.util.BeanDatePicker; import fr.ird.observe.client.ui.util.BeanEnumEditor; import fr.ird.observe.client.ui.util.BooleanEditor; import fr.ird.observe.client.ui.util.UIHelper; +import fr.ird.observe.client.ui.util.UIHelperSupport; import fr.ird.observe.client.ui.util.tripMap.ObserveMapPane; import fr.ird.observe.client.validation.ObserveSwingValidator; import fr.ird.observe.dto.I18nEnumHelper; @@ -132,9 +133,6 @@ public class ContentUIInitializer<UI extends ContentUI> { public static final String SUB_TABBED_PANE = "subTabbedPane"; private static final String CLIENT_PROPERTY_NOT_BLOCKING = "notBlocking"; - private static final String CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN = "skipBindingToBean"; - private static final String CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN = "skipBindingFromBean"; - private static final Logger log = LogManager.getLogger(ContentUIInitializer.class); protected final UI ui; @@ -365,7 +363,7 @@ public class ContentUIInitializer<UI extends ContentUI> { editor.getModel().addPropertyChangeListener("format", e -> ((EditableContentUI<?>) ui).getValidator().doValidate()); if (editor.getBean() != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { editor.getModel().addPropertyChangeListener(propertyName, e -> { Float oldValue = editor.getModel().getTemperature(); Float newValue = (Float) e.getNewValue(); @@ -382,7 +380,7 @@ public class ContentUIInitializer<UI extends ContentUI> { editor.setProperty(editor.getName()); } if (editor.getBean() != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { editor.getModel().addPropertyChangeListener(editor.getProperty(), e -> { String oldValue = editor.getText(); String newValue = (String) e.getNewValue(); @@ -400,7 +398,7 @@ public class ContentUIInitializer<UI extends ContentUI> { } if (editor.getBean() != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { editor.getModel().addPropertyChangeListener(editor.getProperty(), e -> { String oldValue = editor.getText(); String newValue = (String) e.getNewValue(); @@ -418,7 +416,7 @@ public class ContentUIInitializer<UI extends ContentUI> { } if (editor.getBean() != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { editor.getModel().addPropertyChangeListener(editor.getProperty(), e -> { String oldValue = editor.getText(); String newValue = (String) e.getNewValue(); @@ -495,7 +493,7 @@ public class ContentUIInitializer<UI extends ContentUI> { } editor.init(); if (editor.getBean() != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { ((JavaBean) editor.getBean()).addPropertyChangeListener(config.getProperty(), e -> { Number oldValue = editor.getModel().getNumberValue(); Number newValue = (Number) e.getNewValue(); @@ -523,7 +521,7 @@ public class ContentUIInitializer<UI extends ContentUI> { JavaBean bean = (JavaBean) editor.getBean(); String property = editor.getProperty(); if (bean != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { bean.addPropertyChangeListener(property, e -> { Object oldValue = editor.getSelectedItem(); Object newValue = e.getNewValue(); @@ -573,7 +571,7 @@ public class ContentUIInitializer<UI extends ContentUI> { JavaBean bean = (JavaBean) editor.getModel().getBean(); String property = editor.getModel().getProperty(); if (bean != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { bean.addPropertyChangeListener(property, e -> { Collection oldValue = editor.getModel().getSelected(); Collection newValue = (Collection) e.getNewValue(); @@ -606,7 +604,7 @@ public class ContentUIInitializer<UI extends ContentUI> { JavaBean bean = (JavaBean) editor.getModel().getBean(); String property = editor.getModel().getPropertyTime(); if (bean != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { bean.addPropertyChangeListener(property, e -> { Date oldValue = editor.getModel().getTime(); Date newValue = (Date) e.getNewValue(); @@ -658,7 +656,7 @@ public class ContentUIInitializer<UI extends ContentUI> { JavaBean bean = (JavaBean) editor.getModel().getBean(); String property = editor.getModel().getPropertyDate(); if (bean != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { bean.addPropertyChangeListener(property, e -> { Date oldValue = editor.getModel().getDate(); Date newValue = (Date) e.getNewValue(); @@ -693,7 +691,7 @@ public class ContentUIInitializer<UI extends ContentUI> { JavaBean bean = (JavaBean) editor.getModel().getBean(); if (bean != null) { - if (isBindingFromBean(editor)) { + if (UIHelperSupport.isBindingFromBean(editor)) { bean.addPropertyChangeListener(editor.getModel().getPropertyLatitude(), e -> { Float oldValue = editor.getModel().getLatitude(); Float newValue = (Float) e.getNewValue(); @@ -755,7 +753,7 @@ public class ContentUIInitializer<UI extends ContentUI> { if (StringUtils.isEmpty(propertyName)) { editor.setProperty(editor.getName()); } - editor.init(isBindingFromBean(editor), isBindingToBean(editor)); + editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor)); } protected void init(BeanCheckBox editor) { @@ -764,7 +762,7 @@ public class ContentUIInitializer<UI extends ContentUI> { if (StringUtils.isEmpty(propertyName)) { editor.setProperty(editor.getName()); } - editor.init(isBindingFromBean(editor), isBindingToBean(editor)); + editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor)); } protected <B extends Enum<B>> void init(BeanEnumEditor<B> editor) { @@ -773,7 +771,7 @@ public class ContentUIInitializer<UI extends ContentUI> { if (StringUtils.isEmpty(propertyName)) { editor.setProperty(editor.getName()); } - editor.init(isBindingFromBean(editor), isBindingToBean(editor)); + editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor)); ImmutableMap.Builder<B, String> labelsBuilder = ImmutableMap.builder(); for (B e : EnumSet.allOf(editor.getType())) { @@ -791,7 +789,7 @@ public class ContentUIInitializer<UI extends ContentUI> { if (StringUtils.isEmpty(propertyName)) { editor.setProperty(editor.getName()); } - editor.init(isBindingFromBean(editor), isBindingToBean(editor)); + editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor)); editor.setLocale(ObserveSwingApplicationContextSupport.get().getConfig().getLocale()); JFormattedTextField formattedTextField = editor.getEditor(); formattedTextField.setEditable(true); @@ -840,16 +838,6 @@ public class ContentUIInitializer<UI extends ContentUI> { log.debug("init table editor " + editor.getName()); } - private boolean isBindingToBean(JComponent editor) { - Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN); - return skip == null || !skip; - } - - private boolean isBindingFromBean(JComponent editor) { - Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN); - return skip == null || !skip; - } - private boolean isAutoSelectOnFocus(JComponent comp) { Boolean selectOnFocus = (Boolean) comp.getClientProperty("selectOnFocus"); return BooleanUtils.isTrue(selectOnFocus); ===================================== client-db/src/main/java/fr/ird/observe/client/ui/util/UIHelperSupport.java ===================================== @@ -76,6 +76,8 @@ public class UIHelperSupport extends SwingUtil { public static final PropertyChangeListener LOG_PROPERTY_CHANGE_LISTENER = new LogPropertyChanged(); static private final Logger log = LogManager.getLogger(UIHelperSupport.class); + private static final String CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN = "skipBindingToBean"; + private static final String CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN = "skipBindingFromBean"; /** * Choisir un fichier via un sélecteur graphique de fichiers. @@ -357,6 +359,16 @@ public class UIHelperSupport extends SwingUtil { return new JAXXInitialContext().add(model).add(ui); } + public static boolean isBindingToBean(JComponent editor) { + Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN); + return skip == null || !skip; + } + + public static boolean isBindingFromBean(JComponent editor) { + Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN); + return skip == null || !skip; + } + public static class LogPropertyChanged implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -33,8 +33,6 @@ observe.action.about.tip=About ObServe... observe.action.admin.cancel=Cancel wizard observe.action.admin.close=Close wizard observe.action.apply=Apply -observe.action.auto.copy.to.clipboard=Automatic copy in clipboard -observe.action.auto.copy.to.clipboard.tip=Copy automaticly in clipboard with report result observe.action.back.to.list=Back to list observe.action.back.to.list.tip=Go back to the list observe.action.cancel=Cancel @@ -84,10 +82,6 @@ observe.action.connexions=Manage connections observe.action.connexions.tip=Manage connection profiles observe.action.continue=Continue observe.action.copy=Copy -observe.action.copy.column.headers=Copy column headers -observe.action.copy.column.headers.tip=Add in result column headers -observe.action.copy.row.headers=Copy row header -observe.action.copy.row.headers.tip=Add in result row headers observe.action.copy.to.clipBoard=Copy in clipboard observe.action.copyFloatingObjectPartToLeft=Copy values from leaving to arriving observe.action.copyFloatingObjectPartToLeft.tip=Copy values from leaving to arriving @@ -236,18 +230,6 @@ observe.actions.operation.message.running=Operation <%1$s> is running... observe.actions.operation.message.successed=operation <%1$> is done. observe.actions.operations=operations observe.actions.report=Report -observe.actions.report.config=Report configuration -observe.actions.report.copy.options=Copy into clipboard options -observe.actions.report.description=Generate reports -observe.actions.report.model.type=Model type to use -observe.actions.report.report.description=Description of selected report -observe.actions.report.result=Results -observe.actions.report.select=Select report -observe.actions.report.select.file=File of reports definitions -observe.actions.report.select.file.tip=Choose file of reports definitions -observe.actions.report.title=Help to generat reports -observe.actions.report.title.tip=Help to generate reports -observe.actions.report.variables=Variables configuration observe.actions.saveLocal=Save local database observe.actions.saveLocal.description=Save modifcations on local database observe.actions.synchro.cancel.tip=Cancel @@ -369,6 +351,24 @@ observe.actions.validate.validator.message.header=Message observe.actions.validate.validator.message.header.tip=Message observe.actions.validate.validator.scope.header=... observe.actions.validate.validator.scope.header.tip=Type of message +observe.admin.report.auto.copy.to.clipboard=Automatic copy in clipboard +observe.admin.report.auto.copy.to.clipboard.tip=Copy automaticly in clipboard with report result +observe.admin.report.config=Report configuration +observe.admin.report.copy.column.headers=Copy column headers +observe.admin.report.copy.column.headers.tip=Add in result column headers +observe.admin.report.copy.options=Copy into clipboard options +observe.admin.report.copy.row.headers=Copy row header +observe.admin.report.copy.row.headers.tip=Add in result row headers +observe.admin.report.description=Generate reports +observe.admin.report.model.type=Model type to use +observe.admin.report.report.description=Description of selected report +observe.admin.report.result=Results +observe.admin.report.select=Select report +observe.admin.report.select.file=File of reports definitions +observe.admin.report.select.file.tip=Choose file of reports definitions +observe.admin.report.title=Help to generat reports +observe.admin.report.title.tip=Help to generate reports +observe.admin.report.variables=Variables configuration observe.admin.resume.no.operation.done=No operation done. observe.admin.resume.operation.canceled=operation canceled observe.admin.resume.operation.done=operation done ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -33,8 +33,6 @@ observe.action.about.tip=A cerca de ObServe... observe.action.admin.cancel=Anular el asintente observe.action.admin.close=Cerrar el asistente observe.action.apply=Aplicar -observe.action.auto.copy.to.clipboard=Copia automatica al portapapeles -observe.action.auto.copy.to.clipboard.tip=Puesta a punto automáticamente el contenido del portapapeles con los resultados observe.action.back.to.list=Volver a la lista observe.action.back.to.list.tip=Volver a la lista de datos observe.action.cancel=Cancelar @@ -84,10 +82,6 @@ observe.action.connexions=Gérer les connexions \#TODO observe.action.connexions.tip=Gérer les profiles de connexion \#TODO observe.action.continue=Continuar observe.action.copy=Copiar en el portapeles -observe.action.copy.column.headers=Copiar los encabezados de columnas -observe.action.copy.column.headers.tip=Añadir al resultado las cabeceras de columna -observe.action.copy.row.headers=Copiar las cabeceras de linea -observe.action.copy.row.headers.tip=Añadir al resultado las cabeceras de linea (ej. la primera columna) observe.action.copy.to.clipBoard=Copiar el contenido en el portapapeles observe.action.copyFloatingObjectPartToLeft=Copy values from leaving to arriving \#TODO observe.action.copyFloatingObjectPartToLeft.tip=Copy values from leaving to arriving \#TODO @@ -236,18 +230,6 @@ observe.actions.operation.message.running=La operación < %1$s > se está ejecut observe.actions.operation.message.successed=La operación < %1$s > se terminó. observe.actions.operations=Operaciones a realizar observe.actions.report=Cuadros de síntesis -observe.actions.report.config=Configuración de los informes -observe.actions.report.copy.options=Opciones de copia en el portapapeles -observe.actions.report.description=Generar los cuadros de síntesis del informe de fin del embarque -observe.actions.report.model.type=Tipo de modelo a utilizar -observe.actions.report.report.description=Descripción del informe seleccionado -observe.actions.report.result=Resultados del informe -observe.actions.report.select=Selección del informe -observe.actions.report.select.file=Archivo de definición de informes -observe.actions.report.select.file.tip=Elegir el archivo de definición de informes -observe.actions.report.title=Ayuda a la generación de informes -observe.actions.report.title.tip=Ayuda a la generación del informe de fin del embarque -observe.actions.report.variables=Configuración de variables observe.actions.saveLocal=Copia de seguridad de la base local observe.actions.saveLocal.description=Guardar las modificationes realizadas en la base locale observe.actions.synchro.cancel.tip=Cancelar @@ -369,6 +351,24 @@ observe.actions.validate.validator.message.header=Mensaje observe.actions.validate.validator.message.header.tip=El texto del mensaje observe.actions.validate.validator.scope.header=... observe.actions.validate.validator.scope.header.tip=El tipo del mensaje +observe.admin.report.auto.copy.to.clipboard=Copia automatica al portapapeles +observe.admin.report.auto.copy.to.clipboard.tip=Puesta a punto automáticamente el contenido del portapapeles con los resultados +observe.admin.report.config=Configuración de los informes +observe.admin.report.copy.column.headers=Copiar los encabezados de columnas +observe.admin.report.copy.column.headers.tip=Añadir al resultado las cabeceras de columna +observe.admin.report.copy.options=Opciones de copia en el portapapeles +observe.admin.report.copy.row.headers=Copiar las cabeceras de linea +observe.admin.report.copy.row.headers.tip=Añadir al resultado las cabeceras de linea (ej. la primera columna) +observe.admin.report.description=Generar los cuadros de síntesis del informe de fin del embarque +observe.admin.report.model.type=Tipo de modelo a utilizar +observe.admin.report.report.description=Descripción del informe seleccionado +observe.admin.report.result=Resultados del informe +observe.admin.report.select=Selección del informe +observe.admin.report.select.file=Archivo de definición de informes +observe.admin.report.select.file.tip=Elegir el archivo de definición de informes +observe.admin.report.title=Ayuda a la generación de informes +observe.admin.report.title.tip=Ayuda a la generación del informe de fin del embarque +observe.admin.report.variables=Configuración de variables observe.admin.resume.no.operation.done=Ninguna operación realizada observe.admin.resume.operation.canceled=operación cancelada observe.admin.resume.operation.done=operacion realizada ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -33,8 +33,6 @@ observe.action.about.tip=À propos d'ObServe... observe.action.admin.cancel=Annulation de l'assistant observe.action.admin.close=Fermeture de l'assistant observe.action.apply=Appliquer -observe.action.auto.copy.to.clipboard=Copie automatique dans le presse-papier -observe.action.auto.copy.to.clipboard.tip=Mettre à jour automatiquement le contenu du presse-papier avec les résultats observe.action.back.to.list=Retour à la liste observe.action.back.to.list.tip=Retour à la liste des données observe.action.cancel=Annuler @@ -84,10 +82,6 @@ observe.action.connexions=Gérer les connexions observe.action.connexions.tip=Gérer les profiles de connexion observe.action.continue=Continuer observe.action.copy=Copier dans le presse-papier -observe.action.copy.column.headers=Copier les entêtes de colonne -observe.action.copy.column.headers.tip=Ajoute dans le résultat les entêtes de colonne (i.e la première ligne) -observe.action.copy.row.headers=Copier les entêtes de ligne -observe.action.copy.row.headers.tip=Ajoute dans le résultat les entêtes de ligne (i.e la première colonne) observe.action.copy.to.clipBoard=Copier le contenu dans le presse-papier observe.action.copyFloatingObjectPartToLeft=Recopier les valeurs du départ vers l'arrivée observe.action.copyFloatingObjectPartToLeft.tip=Recopier les valeurs du départ vers l'arrivée @@ -236,18 +230,6 @@ observe.actions.operation.message.running=L'opération < %1$s > est en cours d'e observe.actions.operation.message.successed=L'opération < %1$s > est terminée. observe.actions.operations=Opérations à effectuer observe.actions.report=Tableaux de synthèse -observe.actions.report.config=Configuration des reports -observe.actions.report.copy.options=Options de copie dans le presse-papier -observe.actions.report.description=Générer les tableaux de synthèse du rapport de fin d'embarquement -observe.actions.report.model.type=Type de modèle à utiliser -observe.actions.report.report.description=Description du rapport sélectionné -observe.actions.report.result=Résultats du rapport -observe.actions.report.select=Sélection du rapport -observe.actions.report.select.file=Fichier de définition de reports -observe.actions.report.select.file.tip=Choisir le fichier de définition des reports -observe.actions.report.title=Aide à la génération de rapport -observe.actions.report.title.tip=Aide à la génération du rapport de fin d'embarquement -observe.actions.report.variables=Configuration des variables observe.actions.saveLocal=Sauvegarde de la base locale observe.actions.saveLocal.description=Sauvegarder les modifications effectuées vers la base locale observe.actions.synchro.cancel.tip=Annuler @@ -369,6 +351,24 @@ observe.actions.validate.validator.message.header=Message observe.actions.validate.validator.message.header.tip=Le texte du message observe.actions.validate.validator.scope.header=... observe.actions.validate.validator.scope.header.tip=Le type de message +observe.admin.report.auto.copy.to.clipboard=Copie automatique dans le presse-papier +observe.admin.report.auto.copy.to.clipboard.tip=Mettre à jour automatiquement le contenu du presse-papier avec les résultats +observe.admin.report.config=Configuration des reports +observe.admin.report.copy.column.headers=Copier les entêtes de colonne +observe.admin.report.copy.column.headers.tip=Ajoute dans le résultat les entêtes de colonne (i.e la première ligne) +observe.admin.report.copy.options=Options de copie dans le presse-papier +observe.admin.report.copy.row.headers=Copier les entêtes de ligne +observe.admin.report.copy.row.headers.tip=Ajoute dans le résultat les entêtes de ligne (i.e la première colonne) +observe.admin.report.description=Générer les tableaux de synthèse du rapport de fin d'embarquement +observe.admin.report.model.type=Type de modèle à utiliser +observe.admin.report.report.description=Description du rapport sélectionné +observe.admin.report.result=Résultats du rapport +observe.admin.report.select=Sélection du rapport +observe.admin.report.select.file=Fichier de définition de reports +observe.admin.report.select.file.tip=Choisir le fichier de définition des reports +observe.admin.report.title=Aide à la génération de rapport +observe.admin.report.title.tip=Aide à la génération du rapport de fin d'embarquement +observe.admin.report.variables=Configuration des variables observe.admin.resume.no.operation.done=Aucune opération réalisée. observe.admin.resume.operation.canceled=opération annulée observe.admin.resume.operation.done=opération réussie View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/ebe457ca303b922f53224288b3a1... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/ebe457ca303b922f53224288b3a1... You're receiving this email because of your account on gitlab.com.