1 package fr.ifremer.quadrige3.core.action;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import fr.ifremer.quadrige3.core.config.QuadrigeConfiguration;
28 import fr.ifremer.quadrige3.core.dao.technical.Daos;
29 import fr.ifremer.quadrige3.core.exception.QuadrigeTechnicalException;
30 import fr.ifremer.quadrige3.core.service.DatabaseSchemaService;
31 import fr.ifremer.quadrige3.core.service.ServiceLocator;
32 import org.apache.commons.logging.Log;
33 import org.apache.commons.logging.LogFactory;
34 import org.nuiton.version.Version;
35
36 import java.io.File;
37
38
39
40
41 public class DatabaseDiffAction {
42
43 private static final Log log = LogFactory.getLog(DatabaseDiffAction.class);
44
45
46
47
48 public void run() {
49 QuadrigeConfiguration config = QuadrigeConfiguration.getInstance();
50
51 if (log.isInfoEnabled()) {
52 log.info("Starting database schema diff (compare to model)...");
53 }
54 ActionUtils.logConnectionProperties();
55
56 boolean isValidConnection = Daos.isValidConnectionProperties(config.getJdbcDriver(),
57 config.getJdbcURL(),
58 config.getJdbcUsername(),
59 config.getJdbcPassword());
60
61 if (!isValidConnection) {
62 log.warn("Connection error: could not report schema diff.");
63 return;
64 }
65 DatabaseSchemaService databaseSchemaService = ServiceLocator.instance().getService("databaseSchemaService", DatabaseSchemaService.class);
66
67
68 if (!databaseSchemaService.isDbLoaded()) {
69 log.warn("Database not start ! Could not report schema diff.");
70 return;
71 }
72
73 try {
74 Version actualDbVersion = databaseSchemaService.getDbVersion();
75 if (actualDbVersion != null) {
76 log.info("Database schema version is: " + actualDbVersion.toString());
77 }
78
79 Version modelVersion = config.getVersion();
80 log.info("Model version is: " + modelVersion.toString());
81 } catch (QuadrigeTechnicalException e) {
82 log.error("Error while getting versions.", e);
83 }
84
85 File outputFile = ActionUtils.checkAndGetOutputFile(false, this.getClass());
86
87 try {
88 log.info("Launching diff report generation...");
89 databaseSchemaService.generateDiffReport(outputFile);
90 if (outputFile != null) {
91 log.info(String.format("Database diff successfully generated at %s", outputFile));
92 }
93 else {
94 log.info("Database diff successfully generated.");
95 }
96
97 } catch (QuadrigeTechnicalException e) {
98 log.error("Error while generating status report file.", e);
99 }
100 }
101 }