Project

General

Profile

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

    
11
import java.sql.SQLException;
12
import java.util.List;
13

    
14
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
15

    
16
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
17
import eu.etaxonomy.cdm.database.ICdmDataSource;
18
import eu.etaxonomy.cdm.database.update.CaseType;
19
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
20
import eu.etaxonomy.cdm.database.update.SchemaUpdateResult;
21
import eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase;
22

    
23
/**
24
 * @author a.mueller
25
 * @since 15.12.2010
26
 */
27
public class LanguageLabelUpdater extends SchemaUpdaterStepBase{
28

    
29
	private static final Logger logger = LogManager.getLogger(LanguageLabelUpdater.class);
30

    
31
	private static final String stepName = "Update language labels by full language name";
32

    
33
// **************************** STATIC METHODS ********************************/
34

    
35
	public static final LanguageLabelUpdater NewInstance(List<ISchemaUpdaterStep> stepList){
36
		return new LanguageLabelUpdater(stepList, stepName);
37
	}
38

    
39
	protected LanguageLabelUpdater(List<ISchemaUpdaterStep> stepList, String stepName) {
40
		super(stepList, stepName);
41
	}
42

    
43
    @Override
44
    public void invoke(ICdmDataSource datasource, IProgressMonitor monitor,
45
            CaseType caseType, SchemaUpdateResult result) throws SQLException {
46

    
47
		try {
48
			//update representation label
49
			String sql;
50
			sql = " UPDATE @@Representation@@ " +
51
				" SET label = text " +
52
				" WHERE id IN ( SELECT MN.representations_id " +
53
					" FROM @@DefinedTermBase@@ lang " +
54
					" INNER JOIN @@DefinedTermBase_Representation@@ MN ON lang.id = MN.DefinedTermBase_id " +
55
					" WHERE lang.DTYPE = 'Language' " +
56
					" )";
57
			datasource.executeUpdate(caseType.replaceTableNames(sql));
58

    
59
			//update term titleCache
60
			sql = " UPDATE @@DefinedTermBase@@ dtb " +
61
				  " SET titleCache = " +
62
						" ( " +
63
						" SELECT rep.label  " +
64
						" FROM @@DefinedTermBase_Representation@@ MN " +
65
						" INNER JOIN @@Representation@@ rep ON MN.representations_id = rep.id " +
66
						" WHERE dtb.id = MN.DefinedTermBase_id AND rep.language_id = @langId) " +
67
					" WHERE dtb.DTYPE = 'Language'";
68
			String englishId = String.valueOf(getEnglishLanguageId(datasource, monitor, caseType));
69
			if (englishId == null){
70
				throw new NullPointerException("English id could not be found");
71
			}
72
			sql = sql.replace("@langId", englishId);
73
			datasource.executeUpdate(caseType.replaceTableNames(sql));
74

    
75
			return;
76
		} catch (Exception e) {
77
			String message = e.getMessage();
78
		    monitor.warning(message, e);
79
			logger.warn(message);
80
			result.addException(e, message, this, "invoke");
81
			return;
82
		}
83
	}
84

    
85

    
86
}
(2-2/16)