View Javadoc
1   package net.sumaris.core.action;
2   
3   /*-
4    * #%L
5    * Sumaris3 Core :: Sumaris3 Core Shared
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 General Public License as
13   * published by the Free Software Foundation, either version 3 of the
14   * License, or (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 General Public
22   * License along with this program.  If not, see
23   * <http://www.gnu.org/licenses/gpl-3.0.html>.
24   * #L%
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   * <p>Update database schema class.</p>
43   */
44  public class DatabaseUpdateSchemaAction {
45  	/* Logger */
46  	private static final Logger log = LoggerFactory.getLogger(DatabaseUpdateSchemaAction.class);
47  
48  	/**
49  	 * <p>run.</p>
50  	 */
51  	public void run() {
52  		DatabaseSchemaService service = ServiceLocator.instance().getDatabaseSchemaService();
53  
54  		log.info("Starting schema update...");
55  		ActionUtils.logConnectionProperties();
56  
57  		// Check if database is well loaded
58  		if (!service.isDbLoaded()) {
59  			log.warn("Could not update the schema: database seems to be empty!");
60  			return;
61  		}
62  
63  		// Getting the database version
64  		try {
65  			Version actualDbVersion = service.getDbVersion();
66  			// result could be null, is DB is empty (mantis #21013)
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  		// Getting the version after update
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  		// Run the update process
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  }