Project

General

Profile

Download (3.61 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2009 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.database.update;
11

    
12
import org.apache.log4j.Logger;
13

    
14
import eu.etaxonomy.cdm.common.DefaultProgressMonitor;
15
import eu.etaxonomy.cdm.common.IProgressMonitor;
16
import eu.etaxonomy.cdm.database.CdmDataSource;
17
import eu.etaxonomy.cdm.database.ICdmDataSource;
18
import eu.etaxonomy.cdm.database.update.v25_30.SchemaUpdater_25_30;
19
import eu.etaxonomy.cdm.database.update.v25_30.TermUpdater_25_30;
20
import eu.etaxonomy.cdm.database.update.v30_31.SchemaUpdater_30_31;
21
import eu.etaxonomy.cdm.database.update.v30_31.TermUpdater_30_31;
22
import eu.etaxonomy.cdm.database.update.v30_31.TermUpdater_31_311;
23

    
24
/**
25
 * @author a.mueller
26
 * @date 10.09.2010
27
 *
28
 */
29
public class CdmUpdater {
30
	private static final Logger logger = Logger.getLogger(CdmUpdater.class);
31
	
32
	public static CdmUpdater NewInstance(){
33
		return new CdmUpdater();
34
	}
35
	
36
	/**
37
	 * @param datasource
38
	 * @param monitor may be <code>null</code>
39
	 * @return
40
	 */
41
	public boolean updateToCurrentVersion(ICdmDataSource datasource, IProgressMonitor monitor){
42
		boolean result = true;
43
		if (monitor == null){
44
			monitor = DefaultProgressMonitor.NewInstance();
45
		}
46
		
47
		ISchemaUpdater currentSchemaUpdater = getCurrentSchemaUpdater();
48
		// TODO do we really always update the terms??
49
		ITermUpdater currentTermUpdater = getCurrentTermUpdater();
50
		
51
		int steps = currentSchemaUpdater.countSteps(datasource, monitor);
52
		steps += currentTermUpdater.countSteps(datasource, monitor);
53
		
54
		String taskName = "Update to schema version " + currentSchemaUpdater.getTargetVersion() + " and to term version " + currentTermUpdater.getTargetVersion(); //+ currentSchemaUpdater.getVersion();
55
		monitor.beginTask(taskName, steps);
56
		
57
		try {
58
			result &= currentSchemaUpdater.invoke(datasource, monitor);
59
			// the above apparently did not work while testing. Did not want to set the version in CdmMetaData yet
60
//			result &= currentSchemaUpdater.invoke(currentSchemaUpdater.getTargetVersion(), datasource, monitor);
61
			result &= currentTermUpdater.invoke(datasource, monitor);
62
		} catch (Exception e) {
63
			result = false;
64
			monitor.warning("Stopped schema updater");
65
		} finally {
66
			String message = "Update finished " + (result ? "successfully" : "with ERRORS");
67
			monitor.subTask(message);
68
			monitor.done();
69
			logger.info(message);
70
		}
71
		
72
		return result;
73
	}
74
	
75
	private ITermUpdater getCurrentTermUpdater() {
76
		return TermUpdater_31_311.NewInstance();
77
	}
78

    
79
	/**
80
	 * Returns the current CDM updater
81
	 * @return
82
	 */
83
	private ISchemaUpdater getCurrentSchemaUpdater() {
84
		return SchemaUpdater_25_30.NewInstance();
85
	}
86

    
87
	/**
88
	 * @param args
89
	 */
90
	public static void main(String[] args) {
91
		logger.warn("main method not yet fully implemented (only works with mysql!!!)");
92
		if(args.length < 2){
93
			logger.error("Arguments missing: server database [username [password]]");
94
		}
95
		//TODO better implementation
96
		CdmUpdater myUpdater = new CdmUpdater();
97
		String server = args[0];
98
		String database  = args[1];
99
		String username = args.length > 2 ? args[2] : null;
100
		String password  = args.length > 3 ? args[3] : null;
101
		
102
		ICdmDataSource dataSource = CdmDataSource.NewMySqlInstance(server, database, username, password);
103
		boolean success = myUpdater.updateToCurrentVersion(dataSource, null);
104
		System.out.println("DONE " + (success ? "successfully" : "with ERRORS"));
105
	}
106

    
107
}
(1-1/23)