1   package net.sumaris.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  
28  import net.sumaris.core.config.SumarisConfiguration;
29  import net.sumaris.core.dao.schema.DatabaseSchemaDao;
30  import net.sumaris.core.dao.schema.DatabaseSchemaDaoImpl;
31  import net.sumaris.core.dao.technical.Daos;
32  import net.sumaris.core.exception.DatabaseSchemaUpdateException;
33  import net.sumaris.core.exception.SumarisTechnicalException;
34  import net.sumaris.core.exception.VersionNotFoundException;
35  import net.sumaris.core.service.ServiceLocator;
36  import net.sumaris.core.service.schema.DatabaseSchemaService;
37  import org.nuiton.version.Version;
38  import org.slf4j.Logger;
39  import org.slf4j.LoggerFactory;
40  
41  
42  
43  
44  public class DatabaseUpdateSchemaAction {
45  	
46  	private static final Logger log = LoggerFactory.getLogger(DatabaseUpdateSchemaAction.class);
47  
48  	
49  
50  
51  	public void run() {
52  		DatabaseSchemaService service = ServiceLocator.instance().getDatabaseSchemaService();
53  
54  		log.info("Starting schema update...");
55  		ActionUtils.logConnectionProperties();
56  
57  		
58  		if (!service.isDbLoaded()) {
59  			log.warn("Could not update the schema: database seems to be empty!");
60  			return;
61  		}
62  
63  		
64  		try {
65  			Version actualDbVersion = service.getDbVersion();
66  			
67  			if (actualDbVersion == null) {
68  				log.warn("Could not get database schema version");
69  			}
70  			else {
71  				log.info(String.format("Database schema version is [%s]", actualDbVersion));
72  			}
73  
74  		} catch (SumarisTechnicalException e) {
75  			log.error("Error while getting database version.", e);
76  		}
77  
78  		
79  		try {
80  			Version expectedDbVersion = service.getApplicationVersion();
81  			if (expectedDbVersion == null) {
82  				log.warn("Unable to get the database schema version AFTER the update. Nothing to update !");
83  				return;
84  			}
85  			log.info(String.format("Database schema version AFTER the update should be [%s]", expectedDbVersion));
86  		} catch (SumarisTechnicalException e) {
87  			log.error("Error while getting database version AFTER the update.", e);
88  		}
89  
90  		
91  		try {
92  			log.info("Launching update...");
93  			service.updateSchema();
94  			log.info("Database schema successfully updated.");
95  		} catch (SumarisTechnicalException e) {
96  			log.error("Error while updating the database schema.", e);
97  		}
98  	}
99  }