Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe

Commits:

19 changed files:

Changes:

  • client-core/src/main/java/fr/ird/observe/client/util/ObserveKeyStrokesSupport.java
    ... ... @@ -59,10 +59,10 @@ public abstract class ObserveKeyStrokesSupport {
    59 59
     
    
    60 60
         public static final KeyStroke KEY_STROKE_CANCEL = KeyStroke.getKeyStroke("alt pressed A");
    
    61 61
         public static final KeyStroke KEY_STROKE_EXIT = KeyStroke.getKeyStroke("alt pressed F");
    
    62
    -    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_COPY_FROM_LEFT = KeyStroke.getKeyStroke("ctrl pressed C");
    
    63
    -    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_LEFT = KeyStroke.getKeyStroke("ctrl pressed D");
    
    64
    -    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_COPY_FROM_RIGHT = KeyStroke.getKeyStroke("shift ctrl pressed C");
    
    65
    -    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_RIGHT = KeyStroke.getKeyStroke("shift ctrl pressed D");
    
    62
    +    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_COPY = KeyStroke.getKeyStroke("pressed F1");
    
    63
    +    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_DELETE = KeyStroke.getKeyStroke("pressed F2");
    
    64
    +    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_COPY_FROM_RIGHT = KeyStroke.getKeyStroke("shift pressed F1");
    
    65
    +    public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_RIGHT = KeyStroke.getKeyStroke("shift pressed F2");
    
    66 66
     
    
    67 67
         public static final KeyStroke KEY_STROKE_STORAGE_DO_CONFIGURE_REMOTE = KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK);
    
    68 68
         public static final KeyStroke KEY_STROKE_STORAGE_DO_CONFIGURE_SERVER = KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK);
    

  • client-datasource-actions/src/main/i18n/getters/java.getter
    ... ... @@ -18,7 +18,6 @@ observe.action.goto.next.stage
    18 18
     observe.action.goto.next.stage.tip
    
    19 19
     observe.action.goto.previous.stage
    
    20 20
     observe.action.goto.previous.stage.tip
    
    21
    -observe.action.info.storage
    
    22 21
     observe.action.info.storage.tip
    
    23 22
     observe.action.validate.config.generateReport
    
    24 23
     observe.actions.consolidate
    

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroModel.java
    ... ... @@ -26,6 +26,7 @@ import fr.ird.observe.client.datasource.actions.AdminActionModel;
    26 26
     import fr.ird.observe.client.datasource.actions.AdminStep;
    
    27 27
     import fr.ird.observe.client.datasource.actions.AdminUI;
    
    28 28
     import fr.ird.observe.client.datasource.actions.synchronize.data.task.DataSynchronizeTaskSupport;
    
    29
    +import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroUI;
    
    29 30
     import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    30 31
     import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreeModel;
    
    31 32
     import fr.ird.observe.client.util.ProgressModel;
    
    ... ... @@ -46,6 +47,7 @@ public class DataSynchroModel extends AdminActionModel {
    46 47
         private static final String RIGHT_SOURCE_PROPERTY_NAME = "rightSource";
    
    47 48
         private static final String LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME = "leftSelectionModelChanged";
    
    48 49
         private static final String RIGHT_SELECTION_MODEL_CHANGED_PROPERTY_NAME = "rightSelectionModelChanged";
    
    50
    +    private static final String TASKS_EMPTY_PROPERTY_NAME = "tasksEmpty";
    
    49 51
         private static final Logger log = LogManager.getLogger(DataSynchroModel.class);
    
    50 52
     
    
    51 53
         private final DefaultListModel<DataSynchronizeTaskSupport> tasks;
    
    ... ... @@ -97,7 +99,7 @@ public class DataSynchroModel extends AdminActionModel {
    97 99
             return leftSelectionDataModel;
    
    98 100
         }
    
    99 101
     
    
    100
    -    void setLeftSelectionDataModel(SelectionTreeModel leftSelectionDataModel) {
    
    102
    +    public void setLeftSelectionDataModel(SelectionTreeModel leftSelectionDataModel) {
    
    101 103
             this.leftSelectionDataModel = leftSelectionDataModel;
    
    102 104
         }
    
    103 105
     
    
    ... ... @@ -105,7 +107,7 @@ public class DataSynchroModel extends AdminActionModel {
    105 107
             return rightSelectionDataModel;
    
    106 108
         }
    
    107 109
     
    
    108
    -    void setRightSelectionDataModel(SelectionTreeModel rightSelectionDataModel) {
    
    110
    +    public void setRightSelectionDataModel(SelectionTreeModel rightSelectionDataModel) {
    
    109 111
             this.rightSelectionDataModel = rightSelectionDataModel;
    
    110 112
         }
    
    111 113
     
    
    ... ... @@ -122,7 +124,13 @@ public class DataSynchroModel extends AdminActionModel {
    122 124
         }
    
    123 125
     
    
    124 126
         public void addTask(DataSynchronizeTaskSupport task) {
    
    127
    +        boolean tasksEmpty = isTasksEmpty();
    
    125 128
             tasks.addElement(task);
    
    129
    +        firePropertyChange(TASKS_EMPTY_PROPERTY_NAME, tasksEmpty, isTasksEmpty());
    
    130
    +    }
    
    131
    +
    
    132
    +    public boolean isTasksEmpty() {
    
    133
    +        return tasks.isEmpty();
    
    126 134
         }
    
    127 135
     
    
    128 136
         private void populateSelectionModel(ObserveSwingDataSource dataSource, SelectionTreeModel selectionDataModel, String propertyName) {
    
    ... ... @@ -143,7 +151,7 @@ public class DataSynchroModel extends AdminActionModel {
    143 151
             //FIXME Check we don't need any longer
    
    144 152
     //        configUI.getLocalSourceConfig().setBorder(new TitledBorder(ui.getModel().getConfigModel().getLocalSourceLabel()));
    
    145 153
     //        configUI.getCentralSourceConfig().setBorder(new TitledBorder(ui.getModel().getConfigModel().getCentralSourceLabel()));
    
    146
    -
    
    154
    +        ((DataSynchroUI)ui.getStepUI(AdminStep.DATA_SYNCHRONIZE)).getApply().setEnabled(false);
    
    147 155
         }
    
    148 156
     
    
    149 157
         public ProgressModel getProgressModel() {
    

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroUI.jaxx
    ... ... @@ -24,10 +24,7 @@
    24 24
         fr.ird.observe.client.util.UIHelper
    
    25 25
         fr.ird.observe.client.datasource.actions.AdminUI
    
    26 26
         fr.ird.observe.client.datasource.actions.AdminStep
    
    27
    -    fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreePane
    
    28
    -    org.nuiton.jaxx.runtime.swing.SwingUtil
    
    29
    -
    
    30
    -    javax.swing.ListSelectionModel
    
    27
    +    fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane
    
    31 28
     
    
    32 29
         static io.ultreia.java4all.i18n.I18n.t
    
    33 30
       </import>
    
    ... ... @@ -35,8 +32,7 @@
    35 32
       <DataSynchroModel id='stepModel' initializer='getModel().getDataSynchroModel()'/>
    
    36 33
     
    
    37 34
       <JPanel id='PENDING_content'>
    
    38
    -    <Table constraints='BorderLayout.CENTER' fill='both' weightx='1'
    
    39
    -           weighty='1'>
    
    35
    +    <Table constraints='BorderLayout.CENTER' fill='both' weightx='1' weighty='1'>
    
    40 36
           <row>
    
    41 37
             <cell>
    
    42 38
               <JButton id='start'/>
    
    ... ... @@ -48,22 +44,12 @@
    48 44
         <JSplitPane id="contentSplitPane" constraints='BorderLayout.CENTER'>
    
    49 45
           <Table id='contentNorth' fill="both" weighty="1">
    
    50 46
             <row>
    
    51
    -          <cell weightx="0.45">
    
    52
    -            <SelectionTreePane id="leftTreePane"/>
    
    53
    -          </cell>
    
    54
    -          <cell weightx="0.1">
    
    55
    -            <JPanel layout="{new BorderLayout()}" border='{new TitledBorder("     ")}'>
    
    56
    -              <JPanel id="middleActions" layout="{new GridLayout(0, 2)}" constraints='BorderLayout.CENTER'>
    
    57
    -                <JButton id="copyFromLeft" styleClass="disabled"/>
    
    58
    -                <JButton id="copyFromRight" styleClass="disabled"/>
    
    59
    -                <JButton id="deleteFromLeft" styleClass="disabled"/>
    
    60
    -                <JButton id="deleteFromRight" styleClass="disabled"/>
    
    61
    -              </JPanel>
    
    47
    +          <cell weightx="1">
    
    48
    +            <JPanel layout="{new GridLayout(1, 0)}">
    
    49
    +              <DataSelectionTreePane id="leftTreePane" constructorParams="UIHelper.initialContext(this, false)"/>
    
    50
    +              <DataSelectionTreePane id="rightTreePane" constructorParams="UIHelper.initialContext(this, true)"/>
    
    62 51
                 </JPanel>
    
    63 52
               </cell>
    
    64
    -          <cell weightx="0.45">
    
    65
    -            <SelectionTreePane id="rightTreePane" constructorParams="true"/>
    
    66
    -          </cell>
    
    67 53
             </row>
    
    68 54
           </Table>
    
    69 55
           <Table id='contentSouth' fill="both">
    

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroUI.jcss
    ... ... @@ -33,29 +33,17 @@
    33 33
       resizeWeight: 0.8;
    
    34 34
     }
    
    35 35
     
    
    36
    -#copyToLeft {
    
    37
    -  enabled:false;
    
    38
    -}
    
    39
    -
    
    40
    -#copyToRight {
    
    41
    -  enabled:false;
    
    42
    -}
    
    43
    -
    
    44
    -#deleteFromLeft {
    
    45
    -  enabled:false;
    
    46
    -}
    
    47
    -
    
    48
    -#deleteFromRight {
    
    49
    -  enabled:false;
    
    50
    -}
    
    51
    -
    
    52 36
     #actionsToConsumePane {
    
    53 37
       border:{new TitledBorder(t("observe.actions.synchro.data.actionsToPerform"))};
    
    54 38
       verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED};
    
    55 39
     }
    
    56 40
     
    
    57 41
     #actionsToConsume {
    
    58
    -  selectionMode:{ListSelectionModel.SINGLE_SELECTION};
    
    42
    +  selectionMode:{javax.swing.ListSelectionModel.SINGLE_SELECTION};
    
    59 43
       cellRenderer:{new DataSynchronizeTaskListCellRenderer()};
    
    60
    -  model:{getStepModel().getTasks()};
    
    44
    +  model:{stepModel.getTasks()};
    
    45
    +}
    
    46
    +
    
    47
    +#apply {
    
    48
    +  enabled:{!stepModel.isTasksEmpty()};
    
    61 49
     }

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroUIHandler.java
    ... ... @@ -24,12 +24,18 @@ package fr.ird.observe.client.datasource.actions.synchronize.data;
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.actions.AdminStep;
    
    26 26
     import fr.ird.observe.client.datasource.actions.AdminTabUIHandler;
    
    27
    +import fr.ird.observe.client.datasource.actions.config.ConfigModel;
    
    27 28
     import fr.ird.observe.client.datasource.actions.config.ConfigUI;
    
    28
    -import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTree;
    
    29
    -import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreeModel;
    
    29
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane;
    
    30
    +import fr.ird.observe.client.datasource.editor.tree.selection.actions.SelectUnselectWithOpposite;
    
    30 31
     import fr.ird.observe.client.datasource.editor.wizard.StorageUIModel;
    
    32
    +import fr.ird.observe.client.datasource.editor.wizard.connexion.DataSourceSelector;
    
    33
    +import fr.ird.observe.client.datasource.editor.wizard.connexion.DataSourceSelectorModel;
    
    31 34
     import org.nuiton.jaxx.runtime.spi.UIHandler;
    
    32 35
     
    
    36
    +import javax.swing.border.TitledBorder;
    
    37
    +import java.awt.Color;
    
    38
    +
    
    33 39
     /**
    
    34 40
      * Created on 02/08/16.
    
    35 41
      *
    
    ... ... @@ -37,48 +43,62 @@ import org.nuiton.jaxx.runtime.spi.UIHandler;
    37 43
      * @since 5.0
    
    38 44
      */
    
    39 45
     public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> implements UIHandler<DataSynchroUI> {
    
    46
    +    public static final String SYNCHRO_PARENT = "synchroParent";
    
    47
    +
    
    48
    +    @Override
    
    49
    +    public void beforeInit(DataSynchroUI ui) {
    
    50
    +        super.beforeInit(ui);
    
    51
    +        ui.setContextValue(ui, SYNCHRO_PARENT);
    
    52
    +    }
    
    40 53
     
    
    41 54
         @Override
    
    42 55
         public void afterInit(DataSynchroUI ui) {
    
    43 56
             super.afterInit(ui);
    
    44 57
             ConfigUI configUI = (ConfigUI) parentUI.getStepUI(AdminStep.CONFIG);
    
    45
    -        configUI.getStepModel().addPropertyChangeListener(StorageUIModel.VALID_PROPERTY_NAME, evt -> updateFromConfig());
    
    46
    -        DataSynchroModel stepModel = getStepModel();
    
    47
    -
    
    48
    -        SelectionTree leftTree = ui.getLeftTreePane().getTree();
    
    49
    -        SelectionTreeModel leftSelectionDataModel = leftTree.getTreeModel();
    
    50
    -        stepModel.setLeftSelectionDataModel(leftSelectionDataModel);
    
    51
    -        leftSelectionDataModel.setLoadLongline(true);
    
    52
    -        leftSelectionDataModel.setLoadSeine(true);
    
    53
    -        leftSelectionDataModel.setLoadReferential(false);
    
    54
    -        leftSelectionDataModel.setShowEmptyTrips(false);
    
    55
    -
    
    56
    -        SelectionTree rightTree = ui.getRightTreePane().getTree();
    
    57
    -        SelectionTreeModel rightSelectionDataModel = rightTree.getTreeModel();
    
    58
    -        stepModel.setRightSelectionDataModel(rightSelectionDataModel);
    
    59
    -        rightSelectionDataModel.setLoadLongline(true);
    
    60
    -        rightSelectionDataModel.setLoadSeine(true);
    
    61
    -        rightSelectionDataModel.setLoadReferential(false);
    
    62
    -        rightSelectionDataModel.setShowEmptyTrips(false);
    
    63
    -
    
    64
    -        // on n'installe qu'une seule fois l'ui
    
    65
    -        leftTree.installUI2(ui.getLeftTreePane(), ui.getRightTreePane());
    
    66
    -
    
    67
    -        stepModel.getLeftSelectionDataModel().addPropertyChangeListener(evt -> {
    
    68
    -            SelectionTreeModel model = (SelectionTreeModel) evt.getSource();
    
    69
    -            boolean withDataSelected = !model.isSelectionEmpty();
    
    70
    -            ui.getCopyFromLeft().setEnabled(withDataSelected);
    
    71
    -            ui.getDeleteFromLeft().setEnabled(withDataSelected);
    
    72
    -
    
    73
    -        });
    
    74
    -        stepModel.getRightSelectionDataModel().addPropertyChangeListener(evt -> {
    
    75
    -            SelectionTreeModel model = (SelectionTreeModel) evt.getSource();
    
    76
    -            boolean withDataSelected = !model.isSelectionEmpty();
    
    77
    -            ui.getCopyFromRight().setEnabled(withDataSelected);
    
    78
    -            ui.getDeleteFromRight().setEnabled(withDataSelected);
    
    79
    -        });
    
    80
    -
    
    81
    -        stepModel.getProgressModel().installUI(ui.getProgressBar());
    
    58
    +        DataSourceSelector leftSourceConfig = configUI.getLocalSourceConfig();
    
    59
    +        DataSourceSelector rightSourceConfig = configUI.getCentralSourceConfig();
    
    60
    +        ConfigModel stepModel = configUI.getStepModel();
    
    61
    +        stepModel.addPropertyChangeListener(StorageUIModel.VALID_PROPERTY_NAME, evt -> updateFromConfig());
    
    62
    +
    
    63
    +        initSource(configUI, ui.getLeftTreePane(), stepModel.getLocalSourceModel(), leftSourceConfig, rightSourceConfig);
    
    64
    +        initSource(configUI, ui.getRightTreePane(), stepModel.getCentralSourceModel(), leftSourceConfig, rightSourceConfig);
    
    65
    +
    
    66
    +        SelectUnselectWithOpposite.init(ui.getLeftTreePane().getTree(), null, new SelectUnselectWithOpposite(ui.getRightTreePane().getTree()));
    
    67
    +
    
    68
    +        getStepModel().getProgressModel().installUI(ui.getProgressBar());
    
    69
    +    }
    
    70
    +
    
    71
    +    private void initSource(ConfigUI configUI, DataSelectionTreePane treePane, DataSourceSelectorModel sourceModel, DataSourceSelector leftSourceConfig, DataSourceSelector rightSourceConfig) {
    
    72
    +        treePane.init();
    
    73
    +        sourceModel.addPropertyChangeListener(DataSourceSelectorModel.VALID_PROPERTY_NAME, evt -> onSourceValidChanged(configUI, leftSourceConfig, rightSourceConfig));
    
    74
    +    }
    
    75
    +
    
    76
    +    private void onSourceValidChanged(ConfigUI configUI, DataSourceSelector leftSourceConfig, DataSourceSelector rightSourceConfig) {
    
    77
    +        DataSourceSelectorModel leftSourceModel = configUI.getStepModel().getLocalSourceModel();
    
    78
    +        DataSourceSelectorModel rightSourceModel = configUI.getStepModel().getCentralSourceModel();
    
    79
    +        boolean leftSourceValid = leftSourceModel.isValid() && leftSourceModel.getDataSourceInformation() != null && leftSourceModel.getDataSourceInformation().canReadData();
    
    80
    +        boolean rightSourceValid = rightSourceModel.isValid() && rightSourceModel.getDataSourceInformation() != null && rightSourceModel.getDataSourceInformation().canReadData();
    
    81
    +        boolean atLeastOneWithWriteData = false;
    
    82
    +        if (leftSourceValid) {
    
    83
    +            atLeastOneWithWriteData = leftSourceModel.getDataSourceInformation().canWriteData();
    
    84
    +        }
    
    85
    +        if (!atLeastOneWithWriteData && rightSourceValid) {
    
    86
    +            atLeastOneWithWriteData = rightSourceModel.getDataSourceInformation().canWriteData();
    
    87
    +        }
    
    88
    +        if (!atLeastOneWithWriteData) {
    
    89
    +            leftSourceValid = rightSourceValid = false;
    
    90
    +        }
    
    91
    +
    
    92
    +        setBorderColor(leftSourceConfig, leftSourceValid);
    
    93
    +        setBorderColor(rightSourceConfig, rightSourceValid);
    
    94
    +
    
    95
    +    }
    
    96
    +
    
    97
    +    private void setBorderColor(DataSourceSelector sourceConfig, boolean valid) {
    
    98
    +        TitledBorder border = (TitledBorder) sourceConfig.getBorder();
    
    99
    +        Color color = valid ? Color.BLACK : Color.RED;
    
    100
    +        border.setTitleColor(color);
    
    101
    +        sourceConfig.setBorder(border);
    
    82 102
         }
    
    83 103
     
    
    84 104
         private void updateFromConfig() {
    

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Start.java
    ... ... @@ -27,17 +27,28 @@ import fr.ird.observe.client.datasource.actions.config.ConfigModel;
    27 27
     import fr.ird.observe.client.datasource.actions.config.ConfigUI;
    
    28 28
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroModel;
    
    29 29
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUI;
    
    30
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane;
    
    30 31
     import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    32
    +import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTree;
    
    33
    +import fr.ird.observe.client.datasource.editor.tree.selection.nodes.SelectionTreeNodeSupport;
    
    34
    +import fr.ird.observe.client.datasource.editor.wizard.connexion.DataSourceSelectorModel;
    
    35
    +import org.apache.logging.log4j.LogManager;
    
    36
    +import org.apache.logging.log4j.Logger;
    
    31 37
     import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
    
    32 38
     
    
    33 39
     import javax.swing.border.TitledBorder;
    
    40
    +import javax.swing.tree.TreePath;
    
    34 41
     import java.awt.Color;
    
    35 42
     import java.awt.event.ActionEvent;
    
    43
    +import java.awt.event.MouseAdapter;
    
    44
    +import java.awt.event.MouseEvent;
    
    36 45
     
    
    37 46
     import static io.ultreia.java4all.i18n.I18n.t;
    
    38 47
     
    
    39 48
     public class Start extends DataSynchroUIActionSupport {
    
    40 49
     
    
    50
    +    private static final Logger log = LogManager.getLogger(Start.class);
    
    51
    +
    
    41 52
         public Start() {
    
    42 53
             super(t("observe.actions.synchro.data.launch.operation"), t("observe.actions.synchro.data.launch.operation"), "wizard-start", 'D');
    
    43 54
         }
    
    ... ... @@ -65,33 +76,50 @@ public class Start extends DataSynchroUIActionSupport {
    65 76
             stepModel.setRightSource(rightSource);
    
    66 77
     
    
    67 78
             stepModel.populateLeftSelectionModel();
    
    68
    -        sendMessage(t("observe.actions.synchro.data.message.data.loaded", leftSourceLabel));
    
    69
    -
    
    70
    -        TitledBorder leftBorder = new TitledBorder(leftSourceLabel);
    
    71
    -        boolean leftCanWriteData = configModel.getLocalSourceModel().getDataSourceInformation().canWriteData();
    
    72
    -        leftBorder.setTitleColor(leftCanWriteData ? Color.GREEN : Color.RED);
    
    73
    -        tabUI.getLeftTreePane().setBorder(leftBorder);
    
    74
    -        if (!leftCanWriteData) {
    
    75
    -            tabUI.getCopyFromRight().setVisible(false);
    
    76
    -            tabUI.getDeleteFromRight().setVisible(false);
    
    77
    -        }
    
    78
    -        configUI.getLocalSourceConfig().setBorder(leftBorder);
    
    79
    -
    
    79
    +        initPanel(leftSourceLabel, configModel.getLocalSourceModel(), rightSource.getInformation().canWriteData(), tabUI.getLeftTreePane());
    
    80 80
             stepModel.populateRightSelectionModel();
    
    81
    -        sendMessage(t("observe.actions.synchro.data.message.data.loaded", rightSourceLabel));
    
    82
    -
    
    83
    -        TitledBorder rightBorder = new TitledBorder(rightSourceLabel);
    
    84
    -        boolean rightCanWriteData = configModel.getCentralSourceModel().getDataSourceInformation().canWriteData();
    
    85
    -        rightBorder.setTitleColor(rightCanWriteData ? Color.GREEN : Color.RED);
    
    86
    -        tabUI.getRightTreePane().setBorder(rightBorder);
    
    87
    -        if (!rightCanWriteData) {
    
    88
    -            tabUI.getCopyFromLeft().setVisible(false);
    
    89
    -            tabUI.getDeleteFromLeft().setVisible(false);
    
    90
    -        }
    
    91
    -        configUI.getCentralSourceConfig().setBorder(rightBorder);
    
    81
    +        initPanel(rightSourceLabel, configModel.getCentralSourceModel(), leftSource.getInformation().canWriteData(), tabUI.getRightTreePane());
    
    92 82
     
    
    93 83
             return WizardState.NEED_FIX;
    
    94 84
     
    
    95 85
         }
    
    96 86
     
    
    87
    +    private void initPanel(String sourceLabel, DataSourceSelectorModel sourceModel,boolean oppositeCanWriteData, DataSelectionTreePane pane) {
    
    88
    +
    
    89
    +        pane.setContextValue(sourceModel);
    
    90
    +        pane.setBorder(new TitledBorder(""));
    
    91
    +
    
    92
    +        sendMessage(t("observe.actions.synchro.data.message.data.loaded", sourceLabel));
    
    93
    +
    
    94
    +        boolean canWriteData = sourceModel.getDataSourceInformation().canWriteData();
    
    95
    +        Color color = canWriteData ? Color.BLACK : Color.RED;
    
    96
    +
    
    97
    +        pane.getDelete().setVisible(canWriteData);
    
    98
    +        pane.getCopy().setVisible(oppositeCanWriteData);
    
    99
    +
    
    100
    +        String label = sourceModel.getLabel();
    
    101
    +        String labelWithUrl = sourceModel.getLabelWithUrl().substring(label.length() + 1);
    
    102
    +        pane.getDataSourceLabel().setIcon(sourceModel.getSource().getIcon());
    
    103
    +        pane.getDataSourceLabel().setText(sourceModel.getSource().getLabel() + " " + labelWithUrl);
    
    104
    +        pane.getDataSourceLabel().setForeground(color);
    
    105
    +
    
    106
    +        SelectionTree tree = pane.getTree().getTree();
    
    107
    +        tree.addMouseListener(new MouseAdapter() {
    
    108
    +            @Override
    
    109
    +            public void mouseReleased(MouseEvent e) {
    
    110
    +                if (e.getClickCount() == 2) {
    
    111
    +                    TreePath path = tree.getClosestPathForLocation(e.getX(), e.getY());
    
    112
    +                    Object lastPathComponent = path.getLastPathComponent();
    
    113
    +                    if (lastPathComponent instanceof SelectionTreeNodeSupport) {
    
    114
    +                        SelectionTreeNodeSupport<?> node = (SelectionTreeNodeSupport<?>) lastPathComponent;
    
    115
    +                        boolean newValue = !node.isSelected();
    
    116
    +                        log.info(String.format("Node: %s - new selected value: %s", node, newValue));
    
    117
    +                        tree.getTreeModel().setValueAt(node, newValue);
    
    118
    +                    }
    
    119
    +                }
    
    120
    +            }
    
    121
    +        });
    
    122
    +
    
    123
    +    }
    
    124
    +
    
    97 125
     }

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePane.jaxx
    1
    +<!--
    
    2
    +  #%L
    
    3
    +  ObServe :: Client DataSource actions
    
    4
    +  %%
    
    5
    +  Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
    
    6
    +  %%
    
    7
    +  This program is free software: you can redistribute it and/or modify
    
    8
    +  it under the terms of the GNU General Public License as
    
    9
    +  published by the Free Software Foundation, either version 3 of the
    
    10
    +  License, or (at your option) any later version.
    
    11
    +
    
    12
    +  This program is distributed in the hope that it will be useful,
    
    13
    +  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    14
    +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    15
    +  GNU General Public License for more details.
    
    16
    +
    
    17
    +  You should have received a copy of the GNU General Public
    
    18
    +  License along with this program.  If not, see
    
    19
    +  <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    20
    +  #L%
    
    21
    +  -->
    
    22
    +<JPanel id='topPanel' layout="{new BorderLayout()}" decorator='boxed'>
    
    23
    +
    
    24
    +  <import>
    
    25
    +    fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreePane
    
    26
    +    fr.ird.observe.client.util.UIHelper
    
    27
    +  </import>
    
    28
    +  <script><![CDATA[
    
    29
    +
    
    30
    +public void init() { handler.init(this); }
    
    31
    +
    
    32
    +public boolean isLeft() {
    
    33
    +    return !isRight();
    
    34
    +}
    
    35
    +
    
    36
    +public boolean isRight() {
    
    37
    +    return Boolean.TRUE.equals(getOpposite());
    
    38
    +}
    
    39
    +]]>
    
    40
    +  </script>
    
    41
    +  <Boolean id='opposite' initializer='getContextValue(Boolean.class)'/>
    
    42
    +  <JPanel id='dataSourcePanel' constraints='BorderLayout.NORTH' layout='{new BorderLayout()}'>
    
    43
    +    <JLabel id='dataSourceLabel' constraints='BorderLayout.WEST'/>
    
    44
    +    <JToolBar id='dataSourceToolbar' constraints='BorderLayout.EAST'>
    
    45
    +      <JButton id='dataSourceInformation'/>
    
    46
    +    </JToolBar>
    
    47
    +  </JPanel>
    
    48
    +
    
    49
    +  <SelectionTreePane id='tree' constructorParams="isRight()" constraints='BorderLayout.CENTER'/>
    
    50
    +  <JToolBar id="middleActions" layout="{new GridLayout(0, 1)}" constraints='BorderLayout.EAST'>
    
    51
    +    <JButton id="copy" enabled="false"/>
    
    52
    +    <JButton id="delete" enabled="false"/>
    
    53
    +  </JToolBar>
    
    54
    +
    
    55
    +</JPanel>

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePane.jcss
    1
    +/*-
    
    2
    + * #%L
    
    3
    + * ObServe :: Client DataSource actions
    
    4
    + * %%
    
    5
    + * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
    
    6
    + * %%
    
    7
    + * This program is free software: you can redistribute it and/or modify
    
    8
    + * it under the terms of the GNU General Public License as
    
    9
    + * published by the Free Software Foundation, either version 3 of the
    
    10
    + * License, or (at your option) any later version.
    
    11
    + *
    
    12
    + * This program is distributed in the hope that it will be useful,
    
    13
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    14
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    15
    + * GNU General Public License for more details.
    
    16
    + *
    
    17
    + * You should have received a copy of the GNU General Public
    
    18
    + * License along with this program.  If not, see
    
    19
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    20
    + * #L%
    
    21
    + */

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/CopyFromRight.javaclient-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
    1
    -package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    
    1
    +package fr.ird.observe.client.datasource.actions.synchronize.data.tree;
    
    2 2
     
    
    3 3
     /*-
    
    4 4
      * #%L
    
    ... ... @@ -24,40 +24,48 @@ package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroModel;
    
    26 26
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUI;
    
    27
    -import fr.ird.observe.client.datasource.actions.synchronize.data.task.CopyToLeftDataSynchronizeTask;
    
    27
    +import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUIHandler;
    
    28
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.actions.RegisterCopy;
    
    29
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.actions.RegisterDelete;
    
    28 30
     import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreeModel;
    
    29
    -import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
    
    30
    -import fr.ird.observe.dto.data.TripAware;
    
    31
    -import fr.ird.observe.dto.referential.common.ProgramReference;
    
    31
    +import org.nuiton.jaxx.runtime.spi.UIHandler;
    
    32 32
     
    
    33
    -import java.awt.event.ActionEvent;
    
    34
    -import java.util.List;
    
    35
    -import java.util.Map;
    
    33
    +import java.awt.BorderLayout;
    
    36 34
     
    
    37
    -import static io.ultreia.java4all.i18n.I18n.t;
    
    35
    +/**
    
    36
    + * @author Tony Chemit - dev@tchemit.fr
    
    37
    + * @since 8.0
    
    38
    + */
    
    39
    +public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTreePane> {
    
    38 40
     
    
    39
    -public class CopyFromRight extends DataSynchroUIActionSupport {
    
    41
    +    void init(DataSelectionTreePane ui) {
    
    42
    +        boolean isLeft = ui.isLeft();
    
    43
    +        RegisterCopy.init(ui, ui.getCopy(), new RegisterCopy(isLeft));
    
    44
    +        RegisterDelete.init(ui, ui.getDelete(), new RegisterDelete(isLeft));
    
    45
    +        DataSynchroUI parent = ui.getContextValue(DataSynchroUI.class, DataSynchroUIHandler.SYNCHRO_PARENT);
    
    46
    +        DataSynchroModel stepModel = parent.getStepModel();
    
    40 47
     
    
    41
    -    public CopyFromRight() {
    
    42
    -        super("", t("observe.actions.synchro.data.copyToLeft.tip"), "copyToLeft", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_RIGHT);
    
    43
    -    }
    
    48
    +        SelectionTreeModel treeModel = ui.getTree().getTree().getTreeModel();
    
    49
    +        treeModel.setLoadLongline(true);
    
    50
    +        treeModel.setLoadSeine(true);
    
    51
    +        treeModel.setLoadReferential(false);
    
    52
    +        treeModel.setShowEmptyTrips(false);
    
    44 53
     
    
    45
    -    @Override
    
    46
    -    protected void doActionPerformed(ActionEvent e, DataSynchroUI ui) {
    
    47
    -        DataSynchroModel stepModel = ui.getStepModel();
    
    48
    -        SelectionTreeModel rightSelectionDataModel = stepModel.getRightSelectionDataModel();
    
    49
    -        SelectionTreeModel leftSelectionDataModel = stepModel.getLeftSelectionDataModel();
    
    50
    -        Map<ProgramReference, List<? extends TripAware>> selectedDataByProgram = rightSelectionDataModel.getSelectedDataByProgram();
    
    51
    -        rightSelectionDataModel.removeAllSelectedData();
    
    52
    -        for (Map.Entry<ProgramReference, List<? extends TripAware>> entry : selectedDataByProgram.entrySet()) {
    
    53
    -            ProgramReference program = entry.getKey();
    
    54
    -            for (TripAware trip : entry.getValue()) {
    
    55
    -                boolean tripExistOnLeft = leftSelectionDataModel.containsData(program, trip);
    
    56
    -                stepModel.addTask(new CopyToLeftDataSynchronizeTask(program, trip, tripExistOnLeft));
    
    57
    -                if (tripExistOnLeft) {
    
    58
    -                    leftSelectionDataModel.removeTrip(program, trip);
    
    59
    -                }
    
    60
    -            }
    
    54
    +        if (isLeft) {
    
    55
    +            stepModel.setLeftSelectionDataModel(treeModel);
    
    56
    +        } else {
    
    57
    +            stepModel.setRightSelectionDataModel(treeModel);
    
    58
    +            ui.remove(ui.getMiddleActions());
    
    59
    +            ui.add(ui.getMiddleActions(), BorderLayout.WEST);
    
    61 60
             }
    
    61
    +
    
    62
    +        treeModel.addPropertyChangeListener(evt -> {
    
    63
    +            SelectionTreeModel model = (SelectionTreeModel) evt.getSource();
    
    64
    +            boolean withDataSelected = !model.isSelectionEmpty();
    
    65
    +            ui.getCopy().setEnabled(withDataSelected);
    
    66
    +            ui.getDelete().setEnabled(withDataSelected);
    
    67
    +        });
    
    68
    +
    
    62 69
         }
    
    63
    -}
    70
    +
    
    71
    +}
    \ No newline at end of file

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/DeleteFromRight.javaclient-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/actions/DataSelectionTreePaneActionSupport.java
    1
    -package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    
    1
    +package fr.ird.observe.client.datasource.actions.synchronize.data.tree.actions;
    
    2 2
     
    
    3 3
     /*-
    
    4 4
      * #%L
    
    ... ... @@ -24,35 +24,44 @@ package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroModel;
    
    26 26
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUI;
    
    27
    -import fr.ird.observe.client.datasource.actions.synchronize.data.task.DeleteFromRightDataSynchronizeTask;
    
    27
    +import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUIHandler;
    
    28
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane;
    
    28 29
     import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreeModel;
    
    29
    -import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
    
    30
    -import fr.ird.observe.dto.data.TripAware;
    
    31
    -import fr.ird.observe.dto.referential.common.ProgramReference;
    
    30
    +import org.nuiton.jaxx.runtime.swing.action.JComponentActionSupport;
    
    32 31
     
    
    33
    -import java.awt.event.ActionEvent;
    
    34
    -import java.util.List;
    
    35
    -import java.util.Map;
    
    32
    +import javax.swing.KeyStroke;
    
    33
    +import java.awt.event.KeyEvent;
    
    36 34
     
    
    37
    -import static io.ultreia.java4all.i18n.I18n.t;
    
    38
    -
    
    39
    -public class DeleteFromRight extends DataSynchroUIActionSupport {
    
    35
    +/**
    
    36
    + * @author Tony Chemit - dev@tchemit.fr
    
    37
    + * @since 8.0
    
    38
    + */
    
    39
    +public abstract class DataSelectionTreePaneActionSupport extends JComponentActionSupport<DataSelectionTreePane> {
    
    40 40
     
    
    41
    -    public DeleteFromRight() {
    
    42
    -        super("", t("observe.actions.synchro.data.deleteFromRight.tip"), "deleteFromRight", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_RIGHT);
    
    41
    +    DataSelectionTreePaneActionSupport(String label, String shortDescription, String actionIcon, KeyStroke acceleratorKey) {
    
    42
    +        super(label, shortDescription, actionIcon, acceleratorKey);
    
    43 43
         }
    
    44 44
     
    
    45 45
         @Override
    
    46
    -    protected void doActionPerformed(ActionEvent e, DataSynchroUI ui) {
    
    47
    -        DataSynchroModel stepModel = ui.getStepModel();
    
    48
    -        SelectionTreeModel selectionDataModel = stepModel.getRightSelectionDataModel();
    
    49
    -        Map<ProgramReference, List<? extends TripAware>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
    
    50
    -        selectionDataModel.removeAllSelectedData();
    
    51
    -        for (Map.Entry<ProgramReference, List<? extends TripAware>> entry : selectedDataByProgram.entrySet()) {
    
    52
    -            ProgramReference program = entry.getKey();
    
    53
    -            for (TripAware trip : entry.getValue()) {
    
    54
    -                stepModel.addTask(new DeleteFromRightDataSynchronizeTask(program, trip));
    
    55
    -            }
    
    46
    +    public void init() {
    
    47
    +        if (ui.isRight()) {
    
    48
    +            KeyStroke acceleratorKey = getAcceleratorKey();
    
    49
    +            setKeyStroke(KeyStroke.getKeyStroke(acceleratorKey.getKeyCode(), acceleratorKey.getModifiers() | KeyEvent.SHIFT_MASK));
    
    56 50
             }
    
    51
    +        super.init();
    
    52
    +    }
    
    53
    +
    
    54
    +    protected DataSynchroModel getDataSynchroModel() {
    
    55
    +        DataSynchroUI parent = ui.getContextValue(DataSynchroUI.class, DataSynchroUIHandler.SYNCHRO_PARENT);
    
    56
    +        return parent.getStepModel();
    
    57
    +    }
    
    58
    +
    
    59
    +    protected SelectionTreeModel getSelectionTreeModel() {
    
    60
    +        return ui.getTree().getTree().getTreeModel();
    
    61
    +    }
    
    62
    +
    
    63
    +    protected SelectionTreeModel getOppositeSelectionTreeModel() {
    
    64
    +        DataSynchroModel dataSynchroModel = getDataSynchroModel();
    
    65
    +        return ui.isLeft()?dataSynchroModel.getRightSelectionDataModel():dataSynchroModel.getLeftSelectionDataModel();
    
    57 66
         }
    
    58 67
     }

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/actions/DataSourceInformation.java
    1
    +package fr.ird.observe.client.datasource.actions.synchronize.data.tree.actions;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Client DataSource actions
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane;
    
    26
    +import fr.ird.observe.client.datasource.api.ObserveSwingDataSourceTemplate;
    
    27
    +import fr.ird.observe.client.datasource.editor.wizard.connexion.DataSourceSelectorModel;
    
    28
    +import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
    
    29
    +
    
    30
    +import javax.swing.JLabel;
    
    31
    +import javax.swing.JOptionPane;
    
    32
    +import java.awt.event.ActionEvent;
    
    33
    +
    
    34
    +import static io.ultreia.java4all.i18n.I18n.t;
    
    35
    +
    
    36
    +/**
    
    37
    + * @author Tony Chemit - dev@tchemit.fr
    
    38
    + * @since 8.0
    
    39
    + */
    
    40
    +public class DataSourceInformation extends DataSelectionTreePaneActionSupport {
    
    41
    +
    
    42
    +    public DataSourceInformation() {
    
    43
    +        super("", t("observe.action.info.storage.tip"), "information", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SOURCE_INFORMATION);
    
    44
    +    }
    
    45
    +
    
    46
    +    @Override
    
    47
    +    protected void doActionPerformed(ActionEvent e, DataSelectionTreePane ui) {
    
    48
    +        DataSourceSelectorModel dataSourceSelectorModel = ui.getContextValue(DataSourceSelectorModel.class);
    
    49
    +
    
    50
    +        String text = ObserveSwingDataSourceTemplate.generate(dataSourceSelectorModel.getSource());
    
    51
    +        JOptionPane.showMessageDialog(
    
    52
    +                ui,
    
    53
    +                new JLabel(text),
    
    54
    +                t("observe.title.storage.info"),
    
    55
    +                JOptionPane.INFORMATION_MESSAGE);
    
    56
    +
    
    57
    +    }
    
    58
    +}

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/CopyFromLeft.javaclient-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/actions/RegisterCopy.java
    1
    -package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    
    1
    +package fr.ird.observe.client.datasource.actions.synchronize.data.tree.actions;
    
    2 2
     
    
    3 3
     /*-
    
    4 4
      * #%L
    
    ... ... @@ -23,8 +23,10 @@ package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    23 23
      */
    
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroModel;
    
    26
    -import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUI;
    
    26
    +import fr.ird.observe.client.datasource.actions.synchronize.data.task.CopyToLeftDataSynchronizeTask;
    
    27 27
     import fr.ird.observe.client.datasource.actions.synchronize.data.task.CopyToRightDataSynchronizeTask;
    
    28
    +import fr.ird.observe.client.datasource.actions.synchronize.data.task.DataSynchronizeTaskSupport;
    
    29
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane;
    
    28 30
     import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreeModel;
    
    29 31
     import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
    
    30 32
     import fr.ird.observe.dto.data.TripAware;
    
    ... ... @@ -36,28 +38,37 @@ import java.util.Map;
    36 38
     
    
    37 39
     import static io.ultreia.java4all.i18n.I18n.t;
    
    38 40
     
    
    39
    -public class CopyFromLeft extends DataSynchroUIActionSupport {
    
    41
    +/**
    
    42
    + * @author Tony Chemit - dev@tchemit.fr
    
    43
    + * @since 8.0
    
    44
    + */
    
    45
    +public class RegisterCopy extends DataSelectionTreePaneActionSupport {
    
    40 46
     
    
    41
    -    public CopyFromLeft() {
    
    42
    -        super("", t("observe.actions.synchro.data.copyToRight.tip"), "copyToRight", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_LEFT);
    
    47
    +    public RegisterCopy(boolean left) {
    
    48
    +        super("", left ? t("observe.actions.synchro.data.copyToRight.tip") : t("observe.actions.synchro.data.copyToLeft.tip"), left ? "copyToRight" : "copyToLeft", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY);
    
    43 49
         }
    
    44 50
     
    
    45 51
         @Override
    
    46
    -    protected void doActionPerformed(ActionEvent e, DataSynchroUI ui) {
    
    47
    -        DataSynchroModel stepModel = ui.getStepModel();
    
    48
    -        SelectionTreeModel leftSelectionDataModel = stepModel.getLeftSelectionDataModel();
    
    49
    -        SelectionTreeModel rightSelectionDataModel = stepModel.getRightSelectionDataModel();
    
    50
    -        Map<ProgramReference, List<? extends TripAware>> selectedDataByProgram = leftSelectionDataModel.getSelectedDataByProgram();
    
    51
    -        leftSelectionDataModel.removeAllSelectedData();
    
    52
    +    protected void doActionPerformed(ActionEvent e, DataSelectionTreePane ui) {
    
    53
    +        DataSynchroModel stepModel = getDataSynchroModel();
    
    54
    +        SelectionTreeModel treeModel = getSelectionTreeModel();
    
    55
    +        SelectionTreeModel oppositeTreeModel = getOppositeSelectionTreeModel();
    
    56
    +        Map<ProgramReference, List<? extends TripAware>> selectedDataByProgram = treeModel.getSelectedDataByProgram();
    
    57
    +        treeModel.removeAllSelectedData();
    
    58
    +        boolean left = ui.isLeft();
    
    52 59
             for (Map.Entry<ProgramReference, List<? extends TripAware>> entry : selectedDataByProgram.entrySet()) {
    
    53 60
                 ProgramReference program = entry.getKey();
    
    54 61
                 for (TripAware trip : entry.getValue()) {
    
    55
    -                boolean tripExistOnRight = rightSelectionDataModel.containsData(program, trip);
    
    56
    -                stepModel.addTask(new CopyToRightDataSynchronizeTask(program, trip, tripExistOnRight));
    
    57
    -                if (tripExistOnRight) {
    
    58
    -                    rightSelectionDataModel.removeTrip(program, trip);
    
    62
    +                boolean tripExistOnOpposite = oppositeTreeModel.containsData(program, trip);
    
    63
    +                stepModel.addTask(createTask(left, program, trip, tripExistOnOpposite));
    
    64
    +                if (tripExistOnOpposite) {
    
    65
    +                    oppositeTreeModel.removeTrip(program, trip);
    
    59 66
                     }
    
    60 67
                 }
    
    61 68
             }
    
    62 69
         }
    
    70
    +
    
    71
    +    private DataSynchronizeTaskSupport createTask(boolean left, ProgramReference program, TripAware trip, boolean tripExistOnOpposite) {
    
    72
    +        return left ? new CopyToRightDataSynchronizeTask(program, trip, tripExistOnOpposite) : new CopyToLeftDataSynchronizeTask(program, trip, tripExistOnOpposite);
    
    73
    +    }
    
    63 74
     }

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/DeleteFromLeft.javaclient-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/actions/RegisterDelete.java
    1
    -package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    
    1
    +package fr.ird.observe.client.datasource.actions.synchronize.data.tree.actions;
    
    2 2
     
    
    3 3
     /*-
    
    4 4
      * #%L
    
    ... ... @@ -23,8 +23,10 @@ package fr.ird.observe.client.datasource.actions.synchronize.data.actions;
    23 23
      */
    
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroModel;
    
    26
    -import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroUI;
    
    26
    +import fr.ird.observe.client.datasource.actions.synchronize.data.task.DataSynchronizeTaskSupport;
    
    27 27
     import fr.ird.observe.client.datasource.actions.synchronize.data.task.DeleteFromLeftDataSynchronizeTask;
    
    28
    +import fr.ird.observe.client.datasource.actions.synchronize.data.task.DeleteFromRightDataSynchronizeTask;
    
    29
    +import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePane;
    
    28 30
     import fr.ird.observe.client.datasource.editor.tree.selection.SelectionTreeModel;
    
    29 31
     import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
    
    30 32
     import fr.ird.observe.dto.data.TripAware;
    
    ... ... @@ -36,23 +38,32 @@ import java.util.Map;
    36 38
     
    
    37 39
     import static io.ultreia.java4all.i18n.I18n.t;
    
    38 40
     
    
    39
    -public class DeleteFromLeft extends DataSynchroUIActionSupport {
    
    41
    +/**
    
    42
    + * @author Tony Chemit - dev@tchemit.fr
    
    43
    + * @since 8.0
    
    44
    + */
    
    45
    +public class RegisterDelete extends DataSelectionTreePaneActionSupport {
    
    40 46
     
    
    41
    -    public DeleteFromLeft() {
    
    42
    -        super("", t("observe.actions.synchro.data.deleteFromLeft.tip"), "deleteFromLeft", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_LEFT);
    
    47
    +    public RegisterDelete(boolean left) {
    
    48
    +        super("", left ? t("observe.actions.synchro.data.deleteFromLeft.tip") : t("observe.actions.synchro.data.deleteFromRight.tip"), left ? "deleteFromLeft" : "deleteFromRight", ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE);
    
    43 49
         }
    
    44 50
     
    
    45 51
         @Override
    
    46
    -    protected void doActionPerformed(ActionEvent e, DataSynchroUI ui) {
    
    47
    -        DataSynchroModel stepModel = ui.getStepModel();
    
    48
    -        SelectionTreeModel selectionDataModel = stepModel.getLeftSelectionDataModel();
    
    52
    +    protected void doActionPerformed(ActionEvent e, DataSelectionTreePane ui) {
    
    53
    +        DataSynchroModel stepModel = getDataSynchroModel();
    
    54
    +        SelectionTreeModel selectionDataModel = getSelectionTreeModel();
    
    49 55
             Map<ProgramReference, List<? extends TripAware>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
    
    50 56
             selectionDataModel.removeAllSelectedData();
    
    57
    +        boolean left = ui.isLeft();
    
    51 58
             for (Map.Entry<ProgramReference, List<? extends TripAware>> entry : selectedDataByProgram.entrySet()) {
    
    52 59
                 ProgramReference program = entry.getKey();
    
    53 60
                 for (TripAware trip : entry.getValue()) {
    
    54
    -                stepModel.addTask(new DeleteFromLeftDataSynchronizeTask(program, trip));
    
    61
    +                stepModel.addTask(createTask(left, program, trip));
    
    55 62
                 }
    
    56 63
             }
    
    57 64
         }
    
    65
    +
    
    66
    +    private DataSynchronizeTaskSupport createTask(boolean left, ProgramReference program, TripAware trip) {
    
    67
    +        return left ? new DeleteFromLeftDataSynchronizeTask(program, trip) : new DeleteFromRightDataSynchronizeTask(program, trip);
    
    68
    +    }
    
    58 69
     }

  • client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/actions/SelectUnselect.java
    ... ... @@ -68,10 +68,11 @@ public class SelectUnselect extends ReferentialSelectionTreePaneActionSupport {
    68 68
     
    
    69 69
         protected void defaultInit(ReferentialSelectionTreePane pane) {
    
    70 70
             pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_SPACE, "none");
    
    71
    -        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_LEFT, "none");
    
    72
    -        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_LEFT, "none");
    
    73
    -        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_RIGHT, "none");
    
    74
    -        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_RIGHT, "none");
    
    71
    +        //FIXME Remove any keystroke used in ui actions...
    
    72
    +//        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_LEFT, "none");
    
    73
    +//        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_LEFT, "none");
    
    74
    +//        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_RIGHT, "none");
    
    75
    +//        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_RIGHT, "none");
    
    75 76
             defaultInit(getInputMap(pane, getInputMapCondition()), getActionMap(pane));
    
    76 77
         }
    
    77 78
     
    

  • client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/selection/SelectionTree.java
    ... ... @@ -23,7 +23,6 @@ package fr.ird.observe.client.datasource.editor.tree.selection;
    23 23
      */
    
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.editor.tree.selection.actions.SelectUnselect;
    
    26
    -import fr.ird.observe.client.datasource.editor.tree.selection.actions.SelectUnselectWithOpposite;
    
    27 26
     import fr.ird.observe.client.util.UIHelper;
    
    28 27
     import org.jdesktop.swingx.JXTree;
    
    29 28
     
    
    ... ... @@ -52,48 +51,6 @@ public class SelectionTree extends JXTree {
    52 51
             SelectUnselect.init(parent, null, SelectUnselect.class);
    
    53 52
         }
    
    54 53
     
    
    55
    -    public void installUI2(SelectionTreePane parent, SelectionTreePane oppositeTree) {
    
    56
    -
    
    57
    -        SelectUnselectWithOpposite.init(parent, null, new SelectUnselectWithOpposite(oppositeTree));
    
    58
    -
    
    59
    -//        InputMap inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW);
    
    60
    -//        ActionMap actionMap = getActionMap();
    
    61
    -//        getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_SPACE, "none");
    
    62
    -//        oppositeTree.getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_SPACE, "none");
    
    63
    -
    
    64
    -//        getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_SELECT_ALL_TREE, "none");
    
    65
    -//        getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_UNSELECT_ALL_TREE, "none");
    
    66
    -
    
    67
    -//        oppositeTree.getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_SELECT_ALL_TREE, "none");
    
    68
    -//        oppositeTree.getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_UNSELECT_ALL_TREE, "none");
    
    69
    -
    
    70
    -//        inputMap.put(ObserveKeyStrokesSupport.KEY_STROKE_ENTER, "select/unselect");
    
    71
    -//        inputMap.put(ObserveKeyStrokesSupport.KEY_STROKE_SPACE, "select/unselect");
    
    72
    -//        actionMap.put("select/unselect", new AbstractAction() {
    
    73
    -//
    
    74
    -//            @Override
    
    75
    -//            public void actionPerformed(ActionEvent e) {
    
    76
    -//                selectUnSelectWithOpposite(oppositeTree);
    
    77
    -//            }
    
    78
    -//        });
    
    79
    -//        addMouseListener(new MouseAdapter() {
    
    80
    -//            @Override
    
    81
    -//            public void mouseClicked(MouseEvent e) {
    
    82
    -//                if (e.getClickCount() == 2) {
    
    83
    -//                    selectUnSelectWithOpposite(oppositeTree);
    
    84
    -//                }
    
    85
    -//            }
    
    86
    -//        });
    
    87
    -//        oppositeTree.addMouseListener(new MouseAdapter() {
    
    88
    -//            @Override
    
    89
    -//            public void mouseClicked(MouseEvent e) {
    
    90
    -//                if (e.getClickCount() == 2) {
    
    91
    -//                    oppositeTree.selectUnSelectWithOpposite(SelectionTree.this);
    
    92
    -//                }
    
    93
    -//            }
    
    94
    -//        });
    
    95
    -    }
    
    96
    -
    
    97 54
         public SelectionTreeModel getTreeModel() {
    
    98 55
             return (SelectionTreeModel) getModel();
    
    99 56
         }
    

  • client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/selection/actions/SelectUnselect.java
    ... ... @@ -59,8 +59,9 @@ public class SelectUnselect extends SelectionTreePaneActionSupport {
    59 59
     
    
    60 60
         protected void defaultInit(SelectionTreePane pane) {
    
    61 61
             pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_SPACE, "none");
    
    62
    -        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_LEFT, "none");
    
    63
    -        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_LEFT, "none");
    
    62
    +        //FIXME Remove any keystroke used in ui actions...
    
    63
    +        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY, "none");
    
    64
    +        pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE, "none");
    
    64 65
             pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_COPY_FROM_RIGHT, "none");
    
    65 66
             pane.getTree().getInputMap().put(ObserveKeyStrokesSupport.KEY_STROKE_DATA_SYNCHRO_DELETE_FROM_RIGHT, "none");
    
    66 67
             defaultInit(getInputMap(pane, getInputMapCondition()), getActionMap(pane));
    

  • pom.xml
    ... ... @@ -24,7 +24,7 @@
    24 24
       <parent>
    
    25 25
         <groupId>io.ultreia.maven</groupId>
    
    26 26
         <artifactId>pom</artifactId>
    
    27
    -    <version>2020.17</version>
    
    27
    +    <version>2020.18</version>
    
    28 28
       </parent>
    
    29 29
     
    
    30 30
       <groupId>fr.ird.observe</groupId>
    
    ... ... @@ -162,7 +162,7 @@
    162 162
         <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
    
    163 163
         <buildDate>${maven.build.timestamp}</buildDate>
    
    164 164
     
    
    165
    -    <lib.version.toolkit>4.28</lib.version.toolkit>
    
    165
    +    <lib.version.toolkit>4.29</lib.version.toolkit>
    
    166 166
         <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation>
    
    167 167
         <!--can't use 1.4.197 (date has changed + blob also)-->
    
    168 168
         <lib.version.h2>1.4.196</lib.version.h2>
    

  • server-core/src/main/java/fr/ird/observe/server/injector/ObserveDtoInjector.java
    ... ... @@ -86,18 +86,12 @@ public class ObserveDtoInjector extends AbstractConverter implements ExecutorPar
    86 86
                         throw new JsonParseException("Class not found: " + parameterizedTypeClassName, cnfe);
    
    87 87
                     }
    
    88 88
     
    
    89
    -                if (log.isInfoEnabled()) {
    
    90
    -                    log.info("find parameterized type " + typeVariable.getName() + " as " + parameterizedTypeClassName);
    
    91
    -                }
    
    92
    -
    
    89
    +                log.debug("find parameterized type " + typeVariable.getName() + " as " + parameterizedTypeClassName);
    
    93 90
                 }
    
    94 91
     
    
    95 92
                 observeDto = gson.fromJson(gsonContent, generic);
    
    96 93
     
    
    97
    -            if (log.isInfoEnabled()) {
    
    98
    -                log.info("Inject observeDto: " + observeDto);
    
    99
    -            }
    
    100
    -
    
    94
    +            log.debug("Inject observeDto: " + observeDto);
    
    101 95
             }
    
    102 96
     
    
    103 97
             return observeDto;
    
    ... ... @@ -114,9 +108,7 @@ public class ObserveDtoInjector extends AbstractConverter implements ExecutorPar
    114 108
     
    
    115 109
                 observeDto = gson.fromJson(gsonContent, type);
    
    116 110
     
    
    117
    -            if (log.isInfoEnabled()) {
    
    118
    -                log.info("convert observeDto: " + observeDto);
    
    119
    -            }
    
    111
    +            log.debug("convert observeDto: " + observeDto);
    
    120 112
     
    
    121 113
             } else {
    
    122 114
                 throw conversionException(type, value);