View Javadoc
1   package fr.ifremer.quadrige3.synchro.service.data;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: Quadrige3 Synchro Core
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  import fr.ifremer.common.synchro.service.RejectedRow;
27  import fr.ifremer.common.synchro.service.SynchroResult;
28  import fr.ifremer.quadrige3.synchro.service.SynchroDirection;
29  import org.springframework.transaction.annotation.Propagation;
30  import org.springframework.transaction.annotation.Transactional;
31  
32  import java.io.File;
33  import java.sql.Timestamp;
34  import java.util.Map;
35  import java.util.Properties;
36  
37  /**
38   * <p>
39   * DataSynchroService interface.
40   * </p>
41   * 
42   */
43  @Transactional(propagation = Propagation.SUPPORTS)
44  public interface DataSynchroService {
45  
46  	/**
47  	 * Create a synchro context, from a source database directory (HSQLDB only).
48  	 * This use local connection properties as source properties, but change JDBC URL to use the given directory
49  	 * 
50  	 * @param sourceDbDirectory
51  	 *            a directory with a HSQLDB directory.
52  	 * @param userId
53  	 *            Id of the Quadrige3 user
54  	 * @return a new context for synchronization
55  	 * @deprecated use method with enableDelete and enableInsertUpdate args
56  	 * @param direction
57  	 *            a {@link fr.ifremer.quadrige3.synchro.service.SynchroDirection} object.
58  	 */
59  	@Deprecated
60  	DataSynchroContext createSynchroContext(File sourceDbDirectory, SynchroDirection direction, int userId);
61  
62  	/**
63  	 * Same as createSynchroContext, but with a last synchronization date
64  	 * 
65  	 * @param sourceDbDirectory
66  	 *            a directory with a HSQLDB directory.
67  	 * @param userId
68  	 *            Id of the Quadrige3 user
69  	 * @param lastSynchronizationDate
70  	 *            the date of the last synchronization
71  	 * @return a new context for synchronization
72  	 * @deprecated use method with enableDelete and enableInsertUpdate args
73  	 * @param direction
74  	 *            a {@link fr.ifremer.quadrige3.synchro.service.SynchroDirection} object.
75  	 */
76  	@Deprecated
77  	DataSynchroContext createSynchroContext(File sourceDbDirectory, SynchroDirection direction, int userId, Timestamp lastSynchronizationDate);
78  
79  	/**
80  	 * Same as createSynchroContext, but with a last synchronization date
81  	 * 
82  	 * @param sourceDbDirectory
83  	 *            a directory with a HSQLDB directory.
84  	 * @param userId
85  	 *            Id of the Quadrige3 user
86  	 * @param lastSynchronizationDate
87  	 *            the date of the last synchronization
88  	 * @param enableDelete
89  	 *            need to synchronize deletion ?
90  	 * @param enableInsertUpdate
91  	 *            need to synchronize insert/update ?
92  	 * @return a new context for synchronization
93  	 * @param direction
94  	 *            a {@link fr.ifremer.quadrige3.synchro.service.SynchroDirection} object.
95  	 */
96  	DataSynchroContext createSynchroContext(File sourceDbDirectory, SynchroDirection direction, int userId, Timestamp lastSynchronizationDate,
97  			boolean enableDelete, boolean enableInsertUpdate);
98  
99  	/**
100 	 * Create a synchro context, using configuration properties for target and source properties.
101 	 * 
102 	 * @param sourceConnectionProperties
103 	 *            Properties to use as source connection (could be Oracle, HSQLDB...)
104 	 * @param userId
105 	 *            Id of the Quadrige3 user
106 	 * @return a new context for synchronization
107 	 * @deprecated use method with lastSynchronizationDate,enableDelete and enableInsertUpdate args
108 	 * @param direction
109 	 *            a {@link fr.ifremer.quadrige3.synchro.service.SynchroDirection} object.
110 	 */
111 	@Deprecated
112 	DataSynchroContext createSynchroContext(Properties sourceConnectionProperties, SynchroDirection direction, int userId);
113 
114 	/**
115 	 * Same as createSynchroContext, but with a last synchronization date
116 	 * 
117 	 * @param sourceConnectionProperties
118 	 *            Properties to use as source connection (could be Oracle, HSQLDB...)
119 	 * @param userId
120 	 *            Id of the Quadrige3 user
121 	 * @param lastSynchronizationDate
122 	 *            the date of the last synchronization
123 	 * @return a new context for synchronization
124 	 * @deprecated use method with lastSynchronizationDate,enableDelete and enableInsertUpdate args
125 	 * @param direction
126 	 *            a {@link fr.ifremer.quadrige3.synchro.service.SynchroDirection} object.
127 	 */
128 	@Deprecated
129 	DataSynchroContext createSynchroContext(Properties sourceConnectionProperties, SynchroDirection direction, int userId,
130 			Timestamp lastSynchronizationDate);
131 
132 	/**
133 	 * Same as createSynchroContext, but with a last synchronization date
134 	 * 
135 	 * @param sourceConnectionProperties
136 	 *            Properties to use as source connection (could be Oracle, HSQLDB...)
137 	 * @param userId
138 	 *            Id of the Quadrige3 user
139 	 * @param lastSynchronizationDate
140 	 *            the date of the last synchronization
141 	 * @param enableDelete
142 	 *            need to synchronize deletion ?
143 	 * @param enableInsertUpdate
144 	 *            need to synchronize insert/update ?
145 	 * @return a new context for synchronization
146 	 * @param direction
147 	 *            a {@link fr.ifremer.quadrige3.synchro.service.SynchroDirection} object.
148 	 */
149 	DataSynchroContext createSynchroContext(Properties sourceConnectionProperties, SynchroDirection direction, int userId,
150 			Timestamp lastSynchronizationDate, boolean enableDelete, boolean enableInsertUpdate);
151 
152 	/**
153 	 * Prepare the synchronize operation from the target data database supported
154 	 * by this service, says just compute nb rows to update for each root table and
155 	 * update the result model.
156 	 * 
157 	 * @param context
158 	 *            Context of synchronization
159 	 */
160 	@Transactional(propagation = Propagation.REQUIRED)
161 	void prepare(DataSynchroContext context);
162 
163 	/**
164 	 * Launch the synchronize operation from the target data database supported
165 	 * by this service.
166 	 * 
167 	 * @param context
168 	 *            Context of synchronization
169 	 */
170 	@Transactional(propagation = Propagation.REQUIRED)
171 	void synchronize(DataSynchroContext context);
172 
173 	/**
174 	 * <p>
175 	 * finish.
176 	 * </p>
177 	 * 
178 	 * @param synchroContext
179 	 *            a {@link fr.ifremer.common.synchro.service.SynchroContext} object.
180 	 * @param resultWithPendingOperation
181 	 *            a {@link fr.ifremer.common.synchro.service.SynchroResult} object.
182 	 * @param rejectStrategies
183 	 *            a {@link java.util.Map} object.
184 	 */
185 	@Transactional(propagation = Propagation.REQUIRED)
186 	void finish(DataSynchroContext synchroContext, SynchroResult resultWithPendingOperation,
187 			Map<RejectedRow.Cause, RejectedRow.ResolveStrategy> rejectStrategies);
188 }