Project

General

Profile

« Previous | Next » 

Revision 6ab31377

Added by Andreas Müller over 13 years ago

Added new rank "unranked" (#2141) and updated language labels and titleCaches with full language name (#2144)

View differences:

.gitattributes
961 961
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/SchemaUpdater_25_30.java -text
962 962
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/SequenceTableCreator.java -text
963 963
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/TermUpdater_25_30.java -text
964
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v30_31/LanguageLabelUpdater.java -text
965
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v30_31/TermUpdater_30_31.java -text
964 966
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/AbstractBeanInitializer.java -text
965 967
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/AutoPropertyInitializer.java -text
966 968
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/BeanInitializer.java -text
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmMetaData.java
78 78
	 * 
79 79
	 * The last number represents the date of change.
80 80
	 */
81
	private static final String termsVersion = "3.0.0.0.201011170000";
81
	private static final String termsVersion = "3.0.1.0.201012150000";
82 82
	
83 83
	
84 84
	public enum MetaDataPropertyName{
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java
33 33
import javax.xml.bind.annotation.XmlSchemaType;
34 34
import javax.xml.bind.annotation.XmlType;
35 35

  
36
import org.apache.commons.lang.StringUtils;
36 37
import org.apache.log4j.Logger;
37 38
import org.hibernate.annotations.Cascade;
38 39
import org.hibernate.annotations.CascadeType;
......
1147 1148
	 * @deprecated to be used by RelationshipBase only
1148 1149
	 */
1149 1150
	@Override
1150
	@Deprecated
1151
	@Deprecated //to be used by RelationshipBase only
1151 1152
	public void addRelationship(RelationshipBase relation) {
1152 1153
		if (relation instanceof HybridRelationship){
1153 1154
			addHybridRelationship((HybridRelationship)relation);
......
1259 1260
	/**
1260 1261
	  * Needs to be implemented by those classes that handle autonyms (e.g. botanical names).
1261 1262
	  **/
1263
	@Transient
1262 1264
	public boolean isAutonym(){
1263 1265
		return false;
1264 1266
	}
1267
	
1268
	
1269
	/**
1270
	 * Returns the boolean value indicating whether <i>this</i> names rank is Rank "unranked"
1271
	 * (uuid = 'a965befb-70a9-4747-a18f-624456c65223') but most likely it is an infrageneric rank
1272
	 * due to existing atomized data for the genus epithet and the infrageneric epithet but missing
1273
	 * specific epithet.
1274
	 * Returns false if <i>this</i> names rank is null.
1275
	 *
1276
	 * @see  #isSupraGeneric()
1277
	 * @see  #isGenus()
1278
	 * @see  #isSpeciesAggregate()
1279
	 * @see  #isSpecies()
1280
	 * @see  #isInfraSpecific()
1281
	 */
1282
	@Transient
1283
	public boolean isInfragenericUnranked() {
1284
		Rank rank = this.getRank();
1285
		if (rank == null || ! rank.equals(Rank.UNRANKED())){
1286
			return false;
1287
		}
1288
		if (StringUtils.isBlank(this.getSpecificEpithet()) && StringUtils.isBlank(this.getInfraSpecificEpithet()) ){
1289
			return true;
1290
		}else{
1291
			return false;
1292
		}
1293
	}
1265 1294
}
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/Rank.java
20 20
import javax.xml.bind.annotation.XmlAccessorType;
21 21
import javax.xml.bind.annotation.XmlType;
22 22

  
23
import org.apache.commons.lang.StringUtils;
23 24
import org.apache.log4j.Logger;
24 25
import org.hibernate.envers.Audited;
25 26
import org.hibernate.search.annotations.Indexed;
......
126 127
	private static final UUID uuidCultivarGroup = UUID.fromString("d763e7d3-e7de-4bb1-9d75-225ca6948659");
127 128
	private static final UUID uuidCultivar = UUID.fromString("5e98415b-dc6e-440b-95d6-ea33dbb39ad0");
128 129
	private static final UUID uuidUnknownRank = UUID.fromString("5c4d6755-2cf6-44ca-9220-cccf8881700b");
129

  
130
	private static final UUID uuidUnranked = UUID.fromString("a965befb-70a9-4747-a18f-624456c65223");
130 131
	
131 132
	private static Map<String, UUID> abbrevMap = null;
132 133
	private static Map<String, UUID> labelMap = null;
......
399 400
	public static final Rank NATIO(){
400 401
		return getTermByUuid(uuidNatio);
401 402
	}
403
	public static final Rank UNRANKED(){
404
		return getTermByUuid(uuidUnranked);
405
	}
402 406
	
403 407
	
404 408
	/**
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategy.java
307 307
			result = nonViralName.getNameCache();
308 308
		}else if (rank == null){
309 309
			result = getRanklessNameCache(nonViralName);
310
		}else if (nonViralName.isInfragenericUnranked()){
311
			result = getUnrankedInfragenericNameCache(nonViralName);
310 312
		}else if (rank.isInfraSpecific()){
311 313
			result = getInfraSpeciesNameCache(nonViralName);
312 314
		}else if (rank.isSpecies()){
......
323 325
		}
324 326
		return result;
325 327
	}
326
	
328
//	
329
//
330
//	/**
331
//	 * @param nonViralName
332
//	 * @return
333
//	 */
334
//	private boolean isInfragenericUnranked(T nonViralName) {
335
//		Rank rank = nonViralName.getRank();
336
//		if (rank == null || ! rank.equals(Rank.UNRANKED())){
337
//			return false;
338
//		}
339
//		if (StringUtils.isBlank(nonViralName.getSpecificEpithet()) && StringUtils.isBlank(nonViralName.getInfraSpecificEpithet()) ){
340
//			return true;
341
//		}else{
342
//			return false;
343
//		}
344
//	}
345

  
346

  
347
	private String getUnrankedInfragenericNameCache(T nonViralName) {
348
		String result;
349
		Rank rank = nonViralName.getRank();
350
		if (rank.isSpeciesAggregate()){
351
			return getSpeciesAggregateCache(nonViralName);
352
		}
353
		String infraGenericMarker = rank.getAbbreviation();
354
		result = CdmUtils.Nz(nonViralName.getGenusOrUninomial()).trim();
355
		result += " " + infraGenericMarker + " " + (CdmUtils.Nz(nonViralName.getInfraGenericEpithet())).trim().replace("null", "");
356
		result = addAppendedPhrase(result, nonViralName).trim();
357
		return result; 
358
	}
359

  
327 360

  
328 361
	/* (non-Javadoc)
329 362
	 * @see eu.etaxonomy.cdm.strategy.cache.INonViralNameCacheStrategy#getAuthorCache(eu.etaxonomy.cdm.model.name.NonViralName)
cdmlib-model/src/main/resources/terms/Rank.csv
64 64
"6b4063bc-f934-4796-9bf3-0ef3aea5c1cb",,"Graft Chimaera","Graft Chimaera",
65 65
"d763e7d3-e7de-4bb1-9d75-225ca6948659",,"Cultivar Group","Cultivar Group",
66 66
"5e98415b-dc6e-440b-95d6-ea33dbb39ad0",,"Cultivar","Cultivar",
67
"5c4d6755-2cf6-44ca-9220-cccf8881700b",,"Unknown Rank","Unknown Rank",
67
"5c4d6755-2cf6-44ca-9220-cccf8881700b",,"Unknown Rank","Unknown Rank","unknown"
68
"a965befb-70a9-4747-a18f-624456c65223",,"Unranked Rank: The name on purpose has no rank","Unranked","[unranked]"
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategyTest.java
62 62
	private INomenclaturalAuthor basAuthor;
63 63
	private INomenclaturalAuthor exBasAuthor;
64 64
	private Reference citationRef;
65
	private ReferenceFactory refFactory;
66 65
	
67 66
	@BeforeClass
68 67
	public static void setUpBeforeClass() {
......
75 74
	 */
76 75
	@Before
77 76
	public void setUp() throws Exception {
78
		refFactory = ReferenceFactory.newInstance();
79 77
		strategy = NonViralNameDefaultCacheStrategy.NewInstance();
80 78
		familyName = BotanicalName.PARSED_NAME(familyNameString, Rank.FAMILY());
81 79
		genusName = BotanicalName.PARSED_NAME(genusNameString, Rank.GENUS());
......
136 134
		specName.setGenusOrUninomial("Genus");
137 135
		specName.setSpecificEpithet("");
138 136
		assertEquals("Empty species string must not result in trailing whitespace", "Genus", specName.getNameCache());
137

  
138
		//unranked taxa
139
		String unrankedCache;
140
		BotanicalName unrankedName = BotanicalName.NewInstance(Rank.UNRANKED());
141
		unrankedName.setGenusOrUninomial("Genus");
142
		NonViralNameDefaultCacheStrategy<BotanicalName> strategy = NonViralNameDefaultCacheStrategy.NewInstance();
143
			//infraspecific
144
		unrankedName.setInfraSpecificEpithet("infraspecific");
145
		unrankedName.setSpecificEpithet("species");
146
		unrankedCache = strategy.getNameCache(unrankedName);
147
		
148
		Assert.assertEquals("Correct unranked cache expected", "Genus species [unranked] infraspecific", unrankedCache);
149
		
150
			//infrageneric
151
		unrankedName.setInfraSpecificEpithet(null);
152
		unrankedName.setSpecificEpithet(null);
153
		unrankedName.setInfraGenericEpithet("Infrageneric");
154
		unrankedCache = strategy.getNameCache(unrankedName);
155
		Assert.assertEquals("Correct unranked cache expected", "Genus [unranked] Infrageneric", unrankedCache);
156
		
139 157
		
140 158
	}
141 159
	
......
185 203
	
186 204
	@Test
187 205
	public void testCacheListener() {
188
		Reference ref = refFactory.newGeneric();
206
		Reference ref = ReferenceFactory.newGeneric();
189 207
		ref.setTitleCache("GenericRef",true);
190 208
		this.subSpeciesName.setNomenclaturalReference(ref);
191 209
		Assert.assertEquals("Expected full title cache has error", "Abies alba subsp. beta, GenericRef", subSpeciesName.getFullTitleCache());
......
283 301
		
284 302
		
285 303
		//ref + nomRef
286
		Reference book = refFactory.newBook();
304
		Reference book = ReferenceFactory.newBook();
287 305
		book.setTitle("Booktitle");
288 306
		Assert.assertNotNull("TitleCache should not be null", subSpeciesName.getTitleCache());
289 307
		subSpeciesName.setNomenclaturalReference(book);
......
384 402
	}
385 403
	
386 404
	@Test
387
	public void testGetInfraGericNames(){
405
	public void testGetInfraGenericNames(){
388 406
		String author = "Anyauthor";
389 407
		NonViralName nonViralName = NonViralName.NewInstance(Rank.SUBGENUS());
390 408
		nonViralName.setGenusOrUninomial("Genus");
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/CdmUpdater.java
16 16
import eu.etaxonomy.cdm.database.CdmDataSource;
17 17
import eu.etaxonomy.cdm.database.ICdmDataSource;
18 18
import eu.etaxonomy.cdm.database.update.v25_30.SchemaUpdater_25_30;
19
import eu.etaxonomy.cdm.database.update.v25_30.TermUpdater_25_30;
19
import eu.etaxonomy.cdm.database.update.v30_31.TermUpdater_30_31;
20 20

  
21 21
/**
22 22
 * @author a.mueller
......
70 70
	}
71 71
	
72 72
	private ITermUpdater getCurrentTermUpdater() {
73
		return TermUpdater_25_30.NewInstance();
73
		return TermUpdater_30_31.NewInstance();
74 74
	}
75 75

  
76 76
	/**
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/SingleTermUpdater.java
137 137
		}
138 138
		
139 139
		UUID uuidRepresentation = UUID.randomUUID();
140
		String sqlInsertRepresentation = " INSERT INTO Representation (id, created, uuid, text, abbreviatedlabel, label, language_id) " +
140
		String sqlInsertRepresentation = " INSERT INTO Representation (id, created, uuid, text, label, abbreviatedlabel, language_id) " +
141 141
				"VALUES (" + repId + ", '" + created + "', '" + uuidRepresentation + "', '" + description +  "', '" + label +  "',  '" + abbrev +  "', " + langId + ")"; 
142 142
		
143 143
		datasource.executeUpdate(sqlInsertRepresentation);
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v25_30/TermUpdater_25_30.java
21 21
import eu.etaxonomy.cdm.database.update.TermUpdaterBase;
22 22
import eu.etaxonomy.cdm.database.update.VocabularyCreator;
23 23
import eu.etaxonomy.cdm.database.update.v24_25.TermUpdater_24_25;
24
import eu.etaxonomy.cdm.database.update.v30_31.TermUpdater_30_31;
24 25
import eu.etaxonomy.cdm.model.common.Language;
25 26
import eu.etaxonomy.cdm.model.occurrence.DeterminationModifier;
26 27

  
......
123 124
	 */
124 125
	@Override
125 126
	public ITermUpdater getNextUpdater() {
126
		return null;
127
		return TermUpdater_30_31.NewInstance();
127 128
	}
128 129

  
129 130
	/* (non-Javadoc)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v30_31/LanguageLabelUpdater.java
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.v30_31;
11

  
12
import java.sql.SQLException;
13

  
14
import org.apache.log4j.Logger;
15

  
16
import eu.etaxonomy.cdm.common.IProgressMonitor;
17
import eu.etaxonomy.cdm.database.ICdmDataSource;
18
import eu.etaxonomy.cdm.database.update.ITermUpdaterStep;
19
import eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase;
20

  
21
/**
22
 * @author a.mueller
23
 * @date 15.12.2010
24
 */
25
public class LanguageLabelUpdater extends SchemaUpdaterStepBase implements ITermUpdaterStep{
26
	@SuppressWarnings("unused")
27
	private static final Logger logger = Logger.getLogger(LanguageLabelUpdater.class);
28

  
29
	private static final String stepName = "Update language labels by full language name";
30
	
31
// **************************** STATIC METHODS ********************************/
32

  
33
	public static final LanguageLabelUpdater NewInstance(){
34
		return new LanguageLabelUpdater(stepName);	
35
	}
36

  
37
	protected LanguageLabelUpdater(String stepName) {
38
		super(stepName);
39
	}
40

  
41
	@Override
42
	public Integer invoke(ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException {
43
		
44
		//update representation label
45
		String sql;
46
		sql = " UPDATE Representation " + 
47
			" SET label = text " +
48
			" WHERE id IN ( SELECT MN.representations_id " +
49
				" FROM DefinedTermBase lang " +
50
				" INNER JOIN DefinedTermBase_Representation MN ON lang.id = MN.DefinedTermBase_id " +
51
				" WHERE lang.DTYPE = 'Language' " +
52
				" )";
53
		datasource.executeUpdate(sql);
54
		
55
		//update term titleCache
56
		//FIXME only for English representations
57
		sql = " UPDATE DefinedTermBase dtb " + 
58
			  " SET titleCache = " +  
59
					" ( " +
60
					" SELECT rep.label  " +
61
					" FROM DefinedTermBase_Representation MN " + 
62
					" INNER JOIN Representation rep ON MN.representations_id = rep.id " +
63
					" WHERE dtb.id = MN.DefinedTermBase_id) " + 
64
				" WHERE dtb.DTYPE = 'Language'";
65
		datasource.executeUpdate(sql);
66
		
67
		return 0;
68
	}
69

  
70
	
71
}
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v30_31/TermUpdater_30_31.java
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.v30_31;
11

  
12
import java.util.ArrayList;
13
import java.util.List;
14
import java.util.UUID;
15

  
16
import org.apache.log4j.Logger;
17

  
18
import eu.etaxonomy.cdm.database.update.ITermUpdater;
19
import eu.etaxonomy.cdm.database.update.ITermUpdaterStep;
20
import eu.etaxonomy.cdm.database.update.SingleTermUpdater;
21
import eu.etaxonomy.cdm.database.update.TermUpdaterBase;
22
import eu.etaxonomy.cdm.database.update.v25_30.TermUpdater_25_30;
23
import eu.etaxonomy.cdm.model.common.Language;
24
import eu.etaxonomy.cdm.model.name.Rank;
25

  
26
/**
27
 * @author a.mueller
28
 * @date 10.09.2010
29
 *
30
 */
31
public class TermUpdater_30_31 extends TermUpdaterBase implements ITermUpdater {
32
	@SuppressWarnings("unused")
33
	private static final Logger logger = Logger.getLogger(TermUpdater_30_31.class);
34
	
35
	public static final String startTermVersion = "3.0.0.0.201011170000";
36
	private static final String endTermVersion = "3.0.1.0.201012150000";
37
	
38
// *************************** FACTORY **************************************/
39
	
40
	public static TermUpdater_30_31 NewInstance(){
41
		return new TermUpdater_30_31(startTermVersion, endTermVersion);
42
	}
43
	
44
// *************************** CONSTRUCTOR ***********************************/	
45

  
46
	protected TermUpdater_30_31(String startTermVersion, String endTermVersion) {
47
		super(startTermVersion, endTermVersion);
48
	}
49
	
50
// 
51
	
52
	/* (non-Javadoc)
53
	 * @see eu.etaxonomy.cdm.database.update.ICdmUpdater#invoke()
54
	 */
55
	@Override
56
	protected List<ITermUpdaterStep> getUpdaterList() {
57
		List<ITermUpdaterStep> list = new ArrayList<ITermUpdaterStep>();
58

  
59
	
60
		// [unranked]
61
		UUID uuidTerm = UUID.fromString("a965befb-70a9-4747-a18f-624456c65223");
62
		String description = "Unranked Rank: The name on purpose has no rank";
63
		String label = "Unranked";
64
		String abbrev = "[unranked]";
65
		String dtype = Rank.class.getSimpleName();
66
		boolean isOrdered = true;
67
		UUID uuidVocabulary = UUID.fromString("ef0d1ce1-26e3-4e83-b47b-ca74eed40b1b");
68
		UUID uuidAfterTerm = UUID.fromString("5c4d6755-2cf6-44ca-9220-cccf8881700b");
69
		UUID uuidLang = Language.uuidEnglish;
70
		list.add( SingleTermUpdater.NewInstance("Add 'unranked' rank to ranks", uuidTerm, description, label, abbrev, dtype, uuidVocabulary, uuidLang, isOrdered, uuidAfterTerm));
71

  
72
		//language labels
73
		LanguageLabelUpdater langLabelUpdater = LanguageLabelUpdater.NewInstance();
74
		list.add(langLabelUpdater);
75
		
76
		return list;
77
	}
78
	
79
	
80
	/* (non-Javadoc)
81
	 * @see eu.etaxonomy.cdm.database.update.ICdmUpdater#getNextUpdater()
82
	 */
83
	@Override
84
	public ITermUpdater getNextUpdater() {
85
		return null;
86
	}
87

  
88
	/* (non-Javadoc)
89
	 * @see eu.etaxonomy.cdm.database.update.ICdmUpdater#getPreviousUpdater()
90
	 */
91
	@Override
92
	public ITermUpdater getPreviousUpdater() {
93
		return TermUpdater_25_30.NewInstance();
94
	}
95

  
96
}

Also available in: Unified diff