View Javadoc
1   package fr.ifremer.quadrige2.synchro.service.referential;
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.administration.MetaProgramSynchroTables;
31  import fr.ifremer.quadrige2.synchro.meta.administration.ProgramStrategySynchroTables;
32  import fr.ifremer.quadrige2.synchro.meta.referential.ReferentialSynchroTables;
33  import fr.ifremer.quadrige2.synchro.meta.system.RuleSynchroTables;
34  import fr.ifremer.quadrige2.synchro.service.AbstractSynchroDatabaseConfiguration;
35  import fr.ifremer.quadrige2.synchro.service.SynchroDirection;
36  
37  import java.io.File;
38  import java.util.Properties;
39  import java.util.Set;
40  
41  /**
42   * <p>
43   * ReferentialSynchroDatabaseConfiguration class.
44   * </p>
45   * 
46   */
47  public class ReferentialSynchroDatabaseConfiguration extends AbstractSynchroDatabaseConfiguration {
48  
49  	/**
50  	 * Temporary database
51  	 */
52  	public static String IS_TEMPORARY_DATABASE = "quadrige2.synchro.database.isTemporary";
53  
54  	private final ReferentialSynchroContext context;
55  
56  	/**
57  	 * <p>
58  	 * Constructor for ReferentialSynchroDatabaseConfiguration.
59  	 * </p>
60  	 * 
61  	 * @param context
62  	 *            a {@link fr.ifremer.quadrige2.synchro.service.referential.ReferentialSynchroContext} object.
63  	 * @param otherBean
64  	 *            a {@link fr.ifremer.common.synchro.service.SynchroDatabaseConfiguration} object.
65  	 */
66  	public ReferentialSynchroDatabaseConfiguration(ReferentialSynchroContext context, SynchroDatabaseConfiguration otherBean) {
67  		copy(otherBean);
68  		Preconditions.checkNotNull(context);
69  		this.context = context;
70  	}
71  
72  	/**
73  	 * <p>
74  	 * Constructor for ReferentialSynchroDatabaseConfiguration.
75  	 * </p>
76  	 * 
77  	 * @param context
78  	 *            a {@link fr.ifremer.quadrige2.synchro.service.referential.ReferentialSynchroContext} object.
79  	 * @param settings
80  	 *            a {@link java.util.Properties} object.
81  	 * @param isTarget
82  	 *            a boolean.
83  	 */
84  	public ReferentialSynchroDatabaseConfiguration(ReferentialSynchroContext context, Properties settings, boolean isTarget) {
85  		super(settings, isTarget);
86  		Preconditions.checkNotNull(context);
87  		this.context = context;
88  	}
89  
90  	/**
91  	 * <p>
92  	 * getUserId.
93  	 * </p>
94  	 * 
95  	 * @return a {@link java.lang.Integer} object.
96  	 */
97  	public Integer getUserId() {
98  		return context.getUserId();
99  	}
100 
101 	/**
102 	 * <p>
103 	 * setIsTemporary.
104 	 * </p>
105 	 * 
106 	 * @param isTemporayDatabase
107 	 *            a boolean.
108 	 */
109 	public void setIsTemporary(boolean isTemporayDatabase) {
110 		setProperty(IS_TEMPORARY_DATABASE, String.valueOf(isTemporayDatabase));
111 	}
112 
113 	/**
114 	 * <p>
115 	 * getPkIncludes.
116 	 * </p>
117 	 * 
118 	 * @return a {@link com.google.common.collect.Multimap} object.
119 	 */
120 	public Multimap<String, String> getPkIncludes() {
121 		return context.getPkIncludes();
122 	}
123 
124 	/**
125 	 * <p>
126 	 * getDirection.
127 	 * </p>
128 	 * 
129 	 * @return a {@link fr.ifremer.quadrige2.synchro.service.SynchroDirection} object.
130 	 */
131 	public SynchroDirection getDirection() {
132 		return context.getDirection();
133 	}
134 
135 	/**
136 	 * <p>
137 	 * isIntegrityConstraintEnable.
138 	 * </p>
139 	 * 
140 	 * @return a boolean.
141 	 */
142 	public boolean isIntegrityConstraintEnable() {
143 		return !isMirrorDatabase();
144 	}
145 
146 	/**
147 	 * <p>
148 	 * getStatusCodeIncludes.
149 	 * </p>
150 	 * 
151 	 * @return a {@link java.util.Set} object.
152 	 */
153 	public Set<String> getStatusCodeIncludes() {
154 		return context.getStatusCodeIncludes();
155 	}
156 
157 	/**
158 	 * <p>
159 	 * getChangeLogFile.
160 	 * </p>
161 	 * 
162 	 * @return a {@link java.io.File} object.
163 	 */
164 	public File getChangeLogFile() {
165 		return context.getChangeLogFile();
166 	}
167 
168 	/**
169 	 * <p>
170 	 * getProgramCodes.
171 	 * </p>
172 	 * 
173 	 * @return a {@link java.util.Set} object.
174 	 */
175 	public Set<String> getProgramCodes() {
176 		return context.getProgramCodes();
177 	}
178 
179 	/**
180 	 * <p>
181 	 * getTableNamesForced.
182 	 * </p>
183 	 * 
184 	 * @return a {@link java.util.Set} object.
185 	 */
186 	public Set<String> getTableNamesForced() {
187 		return context.getTableNamesForced();
188 	}
189 
190 	public void excludeUnusedColumns() {
191 		addColumnExclude(ReferentialSynchroTables.MON_LOC_ORDER_ITEM.name(), DatabaseColumns.UPDATE_DT.name());
192 		addColumnExclude(ReferentialSynchroTables.PMFM_QUAL_VALUE.name(), DatabaseColumns.UPDATE_DT.name());
193 		addColumnExclude(ProgramStrategySynchroTables.MON_LOC_PROG.name(), DatabaseColumns.UPDATE_DT.name());
194 		addColumnExclude(ReferentialSynchroTables.TAXON_INFORMATION.name(), DatabaseColumns.UPDATE_DT.name());
195 		addColumnExclude(ReferentialSynchroTables.TAXON_INFORMATION_HISTORY.name(), DatabaseColumns.UPDATE_DT.name());
196 		addColumnExclude(ReferentialSynchroTables.TAXON_GROUP_HISTORICAL_RECORD.name(), DatabaseColumns.UPDATE_DT.name());
197 		addColumnExclude(ReferentialSynchroTables.TAXON_GROUP_INFORMATION.name(), DatabaseColumns.UPDATE_DT.name());
198 		addColumnExclude(ReferentialSynchroTables.TAXON_GROUP_POSITION.name(), DatabaseColumns.UPDATE_DT.name());
199 		addColumnExclude(ReferentialSynchroTables.PRIVILEGE_TRANSFER.name(), DatabaseColumns.UPDATE_DT.name());
200 		addColumnExclude(ReferentialSynchroTables.TAXON_POSITION.name(), DatabaseColumns.UPDATE_DT.name());
201 
202 		// Metaprogramme
203 		addColumnExclude(MetaProgramSynchroTables.PMFM_MET.name(), DatabaseColumns.UPDATE_DT.name());
204 		addColumnExclude(MetaProgramSynchroTables.MON_LOC_MET.name(), DatabaseColumns.UPDATE_DT.name());
205 
206 		// Import program privileges as child of PROGRAMME table (Fix mantis #26923)
207 		addColumnExclude(ProgramStrategySynchroTables.PROG_QUSER_PROG_PRIV.name(), DatabaseColumns.UPDATE_DT.name());
208 		addColumnExclude(ProgramStrategySynchroTables.PROG_DEP_PROG_PRIV.name(), DatabaseColumns.UPDATE_DT.name());
209 
210 		// Do not override the local crypt_password
211 		// (otherwise we could not re-authenticate the user after the synchro)
212 		addColumnExclude(ReferentialSynchroTables.QUSER.name(), DatabaseColumns.QUSER_CRYPT_PASSWORD.name());
213 	}
214 
215 	public void excludeUnusedColumnsForFileImport() {
216 		// Import strategy / periods / pmfm strategy as child of PROGRAMME (Fis Mantis #29640)
217 		addColumnExclude(ProgramStrategySynchroTables.STRATEGY.name(), DatabaseColumns.UPDATE_DT.name());
218 		addColumnExclude(ProgramStrategySynchroTables.APPLIED_STRATEGY.name(), DatabaseColumns.UPDATE_DT.name());
219 		addColumnExclude(ProgramStrategySynchroTables.APPLIED_PERIOD.name(), DatabaseColumns.UPDATE_DT.name());
220 		addColumnExclude(ProgramStrategySynchroTables.PMFM_APPLIED_STRATEGY.name(), DatabaseColumns.UPDATE_DT.name());
221 		addColumnExclude(ProgramStrategySynchroTables.PMFM_STRATEGY.name(), DatabaseColumns.UPDATE_DT.name());
222 
223 		// Rule list child table (mantis #29428)
224 		addColumnExclude(RuleSynchroTables.RULE.name(), DatabaseColumns.UPDATE_DT.name());
225 		addColumnExclude(RuleSynchroTables.RULE_PARAMETER.name(), DatabaseColumns.UPDATE_DT.name());
226 		addColumnExclude(RuleSynchroTables.RULE_PMFM.name(), DatabaseColumns.UPDATE_DT.name());
227 		addColumnExclude(RuleSynchroTables.RULE_PRECONDITION.name(), DatabaseColumns.UPDATE_DT.name());
228 	}
229 
230 	/** {@inheritDoc} */
231 	@Override
232 	public String toString() {
233 		StringBuilder sb = new StringBuilder(super.toString());
234 
235 		sb.append("\n    user: ").append(getUserId());
236 		sb.append("\n    pk includes: ").append(getPkIncludes());
237 		sb.append("\n    programs: ").append(getProgramCodes());
238 
239 		return sb.toString();
240 	}
241 }