View Javadoc
1   package fr.ifremer.quadrige3.ui.swing.synchro.resolver;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: Quadrige3 UI Common
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2017 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  
27  import fr.ifremer.common.synchro.service.RejectedRow;
28  import fr.ifremer.quadrige3.synchro.service.client.SynchroRejectedRowResolver;
29  import fr.ifremer.quadrige3.ui.swing.DialogHelper;
30  
31  import javax.swing.JOptionPane;
32  import java.util.Map;
33  
34  import static org.nuiton.i18n.I18n.n;
35  import static org.nuiton.i18n.I18n.t;
36  
37  /**
38   * <p>SynchroRejectedRowUIResolver class.</p>
39   *
40   * @author Lionel Touseau <lionel.touseau@e-is.pro>
41   */
42  public class SynchroRejectedRowUIResolver implements SynchroRejectedRowResolver {
43  
44      // Make sure I18n will not delete this key
45      static {
46          // export 
47          n("quadrige3.action.synchro.export.rejection.BAD_UPDATE_DATE.message");
48          n("quadrige3.action.synchro.export.rejection.BAD_UPDATE_DATE.help");
49          n("quadrige3.action.synchro.export.rejection.DUPLICATE_KEY.message");
50          n("quadrige3.action.synchro.export.rejection.DUPLICATE_KEY.help");
51          n("quadrige3.action.synchro.export.rejection.LOCKED.message");
52          n("quadrige3.action.synchro.export.rejection.LOCKED.help");
53          n("quadrige3.action.synchro.export.rejection.DELETED.message");
54          n("quadrige3.action.synchro.export.rejection.DELETED.help");
55          n("quadrige3.action.synchro.export.failed.rejection.BAD_UPDATE_DATE.message");
56          n("quadrige3.action.synchro.export.failed.rejection.BAD_UPDATE_DATE.help");
57          n("quadrige3.action.synchro.export.failed.rejection.DUPLICATE_KEY.message");
58          n("quadrige3.action.synchro.export.failed.rejection.DUPLICATE_KEY.help");
59          n("quadrige3.action.synchro.export.failed.rejection.LOCKED.message");
60          n("quadrige3.action.synchro.export.failed.rejection.LOCKED.help");
61          n("quadrige3.action.synchro.export.failed.rejection.DELETED.message");
62          n("quadrige3.action.synchro.export.failed.rejection.DELETED.help");
63          n("quadrige3.action.synchro.export.failed.result.title");
64          n("quadrige3.action.synchro.export.result.title");
65  
66          // import 
67          n("quadrige3.action.synchro.import.rejection.BAD_UPDATE_DATE.message");
68          n("quadrige3.action.synchro.import.rejection.BAD_UPDATE_DATE.help");
69          n("quadrige3.action.synchro.import.rejection.DUPLICATE_KEY.message");
70          n("quadrige3.action.synchro.import.rejection.DUPLICATE_KEY.help");
71          n("quadrige3.action.synchro.import.rejection.LOCKED.message");
72          n("quadrige3.action.synchro.import.rejection.LOCKED.help");
73          n("quadrige3.action.synchro.import.rejection.DELETED.message");
74          n("quadrige3.action.synchro.import.rejection.DELETED.help");
75          n("quadrige3.action.synchro.import.failed.rejection.BAD_UPDATE_DATE.message");
76          n("quadrige3.action.synchro.import.failed.rejection.BAD_UPDATE_DATE.help");
77          n("quadrige3.action.synchro.import.failed.rejection.DUPLICATE_KEY.message");
78          n("quadrige3.action.synchro.import.failed.rejection.DUPLICATE_KEY.help");
79          n("quadrige3.action.synchro.import.failed.rejection.LOCKED.message");
80          n("quadrige3.action.synchro.import.failed.rejection.LOCKED.help");
81          n("quadrige3.action.synchro.import.failed.rejection.DELETED.message");
82          n("quadrige3.action.synchro.import.failed.rejection.DELETED.help");
83          n("quadrige3.action.synchro.import.failed.result.title");
84          n("quadrige3.action.synchro.import.result.title");
85      }
86  
87      private final DialogHelper dialogHelper;
88  
89      private final String i18nSideKeyPart;
90  
91      /**
92       * <p>Constructor for SynchroRejectedRowUIResolver.</p>
93       *
94       * @param dialogHelper a {@link DialogHelper} object.
95       * @param isImport a boolean.
96       */
97      public SynchroRejectedRowUIResolver(DialogHelper dialogHelper, boolean isImport) {
98          this.dialogHelper = dialogHelper;
99          this.i18nSideKeyPart = isImport ? "import" : "export";
100     }
101 
102     /** {@inheritDoc} */
103     @Override
104     public RejectedRow.ResolveStrategy resolveReject(RejectedRow.Cause cause, String rejectStr, String rejectMessage) {
105 
106         RejectedRow.ResolveStrategy rejectedRowStrategy = null;
107 
108         int result = dialogHelper.showConfirmDialog(
109                 t("quadrige3.action.synchro." + i18nSideKeyPart + ".rejection." + cause.name() + ".message"),
110                 rejectMessage,
111                 t("quadrige3.action.synchro." + i18nSideKeyPart + ".rejection." + cause.name() + ".help"),
112                 t("quadrige3.action.synchro." + i18nSideKeyPart + ".result.title"),
113                 JOptionPane.YES_NO_CANCEL_OPTION);
114 
115         switch (result) {
116             case JOptionPane.YES_OPTION:
117                 if (cause == RejectedRow.Cause.DUPLICATE_KEY) {
118                     rejectedRowStrategy = RejectedRow.ResolveStrategy.DUPLICATE;
119                 } else {
120                     rejectedRowStrategy = RejectedRow.ResolveStrategy.UPDATE;
121                 }
122                 break;
123             case JOptionPane.NO_OPTION:
124                 if (cause == RejectedRow.Cause.DUPLICATE_KEY) {
125                     rejectedRowStrategy = RejectedRow.ResolveStrategy.DO_NOTHING;
126                 } else {
127                     rejectedRowStrategy = RejectedRow.ResolveStrategy.KEEP_LOCAL;
128                 }
129                 break;
130             case JOptionPane.CANCEL_OPTION:
131                 rejectedRowStrategy = RejectedRow.ResolveStrategy.DO_NOTHING;
132                 break;
133         }
134         return rejectedRowStrategy;
135     }
136 
137     /** {@inheritDoc} */
138     @Override
139     public void showRejectMessage(Map<RejectedRow.Cause, String> rejectedRows, RejectedRow.Cause status, boolean failMessage) {
140         if (rejectedRows.isEmpty() || !rejectedRows.containsKey(status)) {
141             return;
142         }
143 
144         String topMessage = t("quadrige3.action.synchro." + i18nSideKeyPart + (failMessage ? ".failed" : "") + ".rejection." + status.name() + ".message");
145         String longMessage = rejectedRows.get(status);
146         String bottomMessage = t("quadrige3.action.synchro." + i18nSideKeyPart + (failMessage ? ".failed" : "") + ".rejection." + status.name() + ".help");
147         String title = t("quadrige3.action.synchro." + i18nSideKeyPart + (failMessage ? ".failed" : "") + ".result.title");
148 
149         dialogHelper.showWarningDialog(
150                 topMessage,
151                 longMessage,
152                 bottomMessage,
153                 title);
154     }
155 
156     /**
157      * <p>Getter for the field <code>dialogHelper</code>.</p>
158      *
159      * @return a {@link DialogHelper} object.
160      */
161     public DialogHelper getDialogHelper() {
162         return dialogHelper;
163     }
164 }