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