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 com.google.common.base.Preconditions;
27  import com.google.common.collect.Multimap;
28  import fr.ifremer.common.synchro.service.SynchroDatabaseConfiguration;
29  import fr.ifremer.quadrige2.synchro.meta.DatabaseColumns;
30  import fr.ifremer.quadrige2.synchro.meta.data.DataSynchroTables;
31  import fr.ifremer.quadrige2.synchro.service.AbstractSynchroDatabaseConfiguration;
32  import fr.ifremer.quadrige2.synchro.service.SynchroDirection;
33  import fr.ifremer.quadrige2.synchro.vo.SynchroDateOperatorVO;
34  
35  import java.io.File;
36  import java.util.Date;
37  import java.util.Map;
38  import java.util.Properties;
39  import java.util.Set;
40  
41  /**
42   * <p>
43   * DataSynchroDatabaseConfiguration class.
44   * </p>
45   * 
46   */
47  public class DataSynchroDatabaseConfiguration extends AbstractSynchroDatabaseConfiguration {
48  
49  	/**
50  	 * Temporary database
51  	 */
52  	public static String IS_TEMPORARY_DATABASE = "quadrige2.synchro.database.isTemporary";
53  
54  	/**
55  	 * Column remote id
56  	 */
57  	public static String COLUMN_REMOTE_ID = "synchro.database.column.remoteId";
58  
59  	/**
60  	 * Column synchronization_status
61  	 */
62  	public static String COLUMN_SYNCHRONIZATION_STATUS = "synchro.database.column.synchronizationStatus";
63  
64  	private final DataSynchroContext context;
65  
66  	private String columnRemoteId;
67  
68  	private String columnSynchronizationStatus;
69  
70  	/**
71  	 * <p>
72  	 * Constructor for DataSynchroDatabaseConfiguration.
73  	 * </p>
74  	 * 
75  	 * @param context
76  	 *            a {@link fr.ifremer.quadrige2.synchro.service.data.DataSynchroContext} object.
77  	 * @param otherBean
78  	 *            a {@link fr.ifremer.common.synchro.service.SynchroDatabaseConfiguration} object.
79  	 */
80  	public DataSynchroDatabaseConfiguration(DataSynchroContext context, SynchroDatabaseConfiguration otherBean) {
81  		copy(otherBean);
82  		Preconditions.checkNotNull(context);
83  		this.context = context;
84  	}
85  
86  	/**
87  	 * <p>
88  	 * Constructor for DataSynchroDatabaseConfiguration.
89  	 * </p>
90  	 * 
91  	 * @param context
92  	 *            a {@link fr.ifremer.quadrige2.synchro.service.data.DataSynchroContext} object.
93  	 * @param settings
94  	 *            a {@link java.util.Properties} object.
95  	 * @param isTarget
96  	 *            a boolean.
97  	 */
98  	public DataSynchroDatabaseConfiguration(DataSynchroContext context, Properties settings, boolean isTarget) {
99  		super(settings, isTarget);
100 		Preconditions.checkNotNull(context);
101 		this.context = context;
102 	}
103 
104 	/**
105 	 * <p>
106 	 * Getter for the field <code>columnRemoteId</code>.
107 	 * </p>
108 	 * 
109 	 * @return a {@link java.lang.String} object.
110 	 */
111 	public String getColumnRemoteId() {
112 		return columnRemoteId;
113 	}
114 
115 	/**
116 	 * <p>
117 	 * Setter for the field <code>columnRemoteId</code>.
118 	 * </p>
119 	 * 
120 	 * @param columnName
121 	 *            a {@link java.lang.String} object.
122 	 * @return a {@link fr.ifremer.common.synchro.service.SynchroDatabaseConfiguration} object.
123 	 */
124 	public SynchroDatabaseConfiguration setColumnRemoteId(String columnName) {
125 		this.columnRemoteId = columnName;
126 		setProperty(COLUMN_REMOTE_ID, columnName);
127 		return this;
128 	}
129 
130 	/**
131 	 * <p>
132 	 * Getter for the field <code>columnSynchronizationStatus</code>.
133 	 * </p>
134 	 * 
135 	 * @return a {@link java.lang.String} object.
136 	 */
137 	public String getColumnSynchronizationStatus() {
138 		return columnSynchronizationStatus;
139 	}
140 
141 	/**
142 	 * <p>
143 	 * Setter for the field <code>columnSynchronizationStatus</code>.
144 	 * </p>
145 	 * 
146 	 * @param columnName
147 	 *            a {@link java.lang.String} object.
148 	 * @return a {@link fr.ifremer.common.synchro.service.SynchroDatabaseConfiguration} object.
149 	 */
150 	public SynchroDatabaseConfiguration setColumnSynchronizationStatus(String columnName) {
151 		this.columnSynchronizationStatus = columnName;
152 		setProperty(COLUMN_SYNCHRONIZATION_STATUS, columnName);
153 		return this;
154 	}
155 
156 	/**
157 	 * <p>
158 	 * getUserId.
159 	 * </p>
160 	 * 
161 	 * @return a {@link java.lang.Integer} object.
162 	 */
163 	public Integer getUserId() {
164 		return context.getUserId();
165 	}
166 
167 	/**
168 	 * <p>
169 	 * getProgramCodes.
170 	 * </p>
171 	 * 
172 	 * @return a {@link java.util.Set} object.
173 	 */
174 	public Set<String> getProgramCodes() {
175 		return context.getProgramCodes();
176 	}
177 
178 	/**
179 	 * <p>
180 	 * setIsTemporary.
181 	 * </p>
182 	 * 
183 	 * @param isTemporayDatabase
184 	 *            a boolean.
185 	 */
186 	public void setIsTemporary(boolean isTemporayDatabase) {
187 		setProperty(IS_TEMPORARY_DATABASE, String.valueOf(isTemporayDatabase));
188 	}
189 
190 	/**
191 	 * <p>
192 	 * getDataStartDate.
193 	 * </p>
194 	 * 
195 	 * @return a {@link java.util.Date} object.
196 	 */
197 	public Date getDataStartDate() {
198 		return context.getDataStartDate();
199 	}
200 
201 	/**
202 	 * <p>
203 	 * getDataEndDate.
204 	 * </p>
205 	 * 
206 	 * @return a {@link java.util.Date} object.
207 	 */
208 	public Date getDataEndDate() {
209 		return context.getDataEndDate();
210 	}
211 
212 	/**
213 	 * <p>
214 	 * getDateOperator.
215 	 * </p>
216 	 * 
217 	 * @return a {@link fr.ifremer.quadrige2.synchro.vo.SynchroDateOperatorVO} object.
218 	 */
219 	public SynchroDateOperatorVO getDateOperator() {
220 		return context.getDateOperator();
221 	}
222 
223 	/**
224 	 * <p>
225 	 * isDirtyOnly.
226 	 * </p>
227 	 * 
228 	 * @return a boolean.
229 	 */
230 	public boolean isDirtyOnly() {
231 		return context.isDirtyOnly();
232 	}
233 
234 	/**
235 	 * <p>
236 	 * getPkIncludes.
237 	 * </p>
238 	 * 
239 	 * @return a {@link com.google.common.collect.Multimap} object.
240 	 */
241 	public Multimap<String, String> getPkIncludes() {
242 		return context.getPkIncludes();
243 	}
244 
245 	/**
246 	 * <p>
247 	 * getDirection.
248 	 * </p>
249 	 * 
250 	 * @return a {@link fr.ifremer.quadrige2.synchro.service.SynchroDirection} object.
251 	 */
252 	public SynchroDirection getDirection() {
253 		return context.getDirection();
254 	}
255 
256 	/**
257 	 * <p>
258 	 * isForceEditedRowOverride.
259 	 * </p>
260 	 * 
261 	 * @return a boolean.
262 	 */
263 	public boolean isForceEditedRowOverride() {
264 		return context.isForceEditedRowOverride();
265 	}
266 
267 	/**
268 	 * <p>
269 	 * getChangeLogFile.
270 	 * </p>
271 	 * 
272 	 * @return a {@link java.io.File} object.
273 	 */
274 	public File getChangeLogFile() {
275 		return context.getChangeLogFile();
276 	}
277 
278 	/**
279 	 * <p>
280 	 * getRemapValues.
281 	 * </p>
282 	 * 
283 	 * @return a {@link java.util.Map} object.
284 	 */
285 	public Map<String, Map<String, Map<String, Object>>> getRemapValues() {
286 		return context.getRemapValues();
287 	}
288 
289 	/**
290 	 * <p>
291 	 * isForceDuplication.
292 	 * </p>
293 	 * 
294 	 * @return a boolean.
295 	 */
296 	public boolean isForceDuplication() {
297 		return context.isForceDuplication();
298 	}
299 
300 	/**
301 	 * <p>
302 	 * Ignore some not used columns
303 	 * </p>
304 	 *
305 	 */
306 	public void excludeUnusedColumns() {
307 		// Ignore some not used columns
308 		addColumnExclude(getColumnSynchronizationStatus());
309 		addColumnExclude(getColumnRemoteId());
310 	}
311 
312 	/**
313 	 * <p>
314 	 * excludeMeasurementUnusedColumns.
315 	 * </p>
316 	 *
317 	 */
318 	public void excludeMeasurementUnusedColumns() {
319 		// MEASUREMENT
320 		addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.PAR_CD.name());
321 		addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.FRACTION_ID.name());
322 		addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.METHOD_ID.name());
323 		addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.MATRIX_ID.name());
324 
325 		// TAXON_MEASUREMENT
326 		addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.PAR_CD.name());
327 		addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.FRACTION_ID.name());
328 		addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.METHOD_ID.name());
329 		addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.MATRIX_ID.name());
330 
331 		// MEASUREMENT_FILE
332 		addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.PAR_CD.name());
333 		addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.FRACTION_ID.name());
334 		addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.METHOD_ID.name());
335 		addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.MATRIX_ID.name());
336 	}
337 
338 	/** {@inheritDoc} */
339 	@Override
340 	public String toString() {
341 		StringBuilder sb = new StringBuilder(super.toString());
342 
343 		sb.append("\n    direction : ").append(getDirection().name());
344 		sb.append("\n    start date: ").append(getDataStartDate());
345 		sb.append("\n    end date: ").append(getDataEndDate());
346 		sb.append("\n    programs: ").append(getProgramCodes());
347 		sb.append("\n    user: ").append(getUserId());
348 		sb.append("\n    change log file: ").append(getChangeLogFile() == null ? "disable" : getChangeLogFile());
349 		sb.append("\n    force duplication: ").append(isForceDuplication());
350 
351 		return sb.toString();
352 	}
353 }