Project

General

Profile

« Previous | Next » 

Revision 5e97e1b2

Added by Andreas Müller over 11 years ago

bugfix for #2558 (concurrent modification in TaxonNodeServiceImpl.makeTaxonNodeASynonymOfAnotherTaxonNode(...) )

View differences:

.gitattributes
1879 1879
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/MediaDaoImplTest.xml -text
1880 1880
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OregonScientificDS6639-DSC_0307-small.jpg -text
1881 1881
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OregonScientificDS6639-DSC_0307-small.tif -text
1882
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImplTest -text
1882
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImplTest.xml -text
1883 1883
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.xml -text
1884 1884
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonServiceSearchTest.xml -text
1885 1885
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/UserServiceImplTest.xml -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java
46 46
@Service
47 47
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
48 48
public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITaxonNodeDao> implements ITaxonNodeService{
49
	private static final Logger logger = Logger
50
			.getLogger(TaxonNodeServiceImpl.class);
49
	private static final Logger logger = Logger.getLogger(TaxonNodeServiceImpl.class);
51 50

  
52 51
	@Autowired
53 52
	private BeanInitializer defaultBeanInitializer;
......
146 145
		}
147 146
		
148 147
		//Move descriptions to new taxon
149
		for(TaxonDescription description : oldTaxon.getDescriptions()){
150
			description.setTitleCache("Description copied from former accepted taxon: " + oldTaxon.getTitleCache() + "(Old title: " + description.getTitleCache()  + ")");
148
		List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>( oldTaxon.getDescriptions()); //to avoid concurrent modification errors (newAcceptedTaxon.addDescription() modifies also oldtaxon.descritpions()) 
149
		for(TaxonDescription description : descriptions){
150
			String message = "Description copied from former accepted taxon: %s (Old title: %s)"; 
151
			message = String.format(message, oldTaxon.getTitleCache(), description.getTitleCache());
152
			description.setTitleCache(message, true);
151 153
			newAcceptedTaxon.addDescription(description);
152 154
		}
153 155
				
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImplTest.java
16 16
import org.junit.Before;
17 17
import org.junit.Ignore;
18 18
import org.junit.Test;
19
import org.unitils.dbunit.annotation.DataSet;
19 20
import org.unitils.spring.annotation.SpringBeanByType;
20 21

  
21 22
import eu.etaxonomy.cdm.model.reference.Reference;
......
31 32
 * @created Dec 16, 2010
32 33
 * @version 1.0
33 34
 */
35

  
34 36
public class TaxonNodeServiceImplTest extends CdmIntegrationTest{
35 37

  
36 38
	@SpringBeanByType
......
53 55
	private Taxon t2;
54 56
	private Synonym s1;
55 57
	private SynonymRelationshipType synonymRelationshipType;
56
	private Reference reference;
58
	private Reference<?> reference;
57 59
	private String referenceDetail;
58 60
	private Classification classification;
59 61
	private TaxonNode node2;
......
64 66
	 */
65 67
	@Before
66 68
	public void setUp() throws Exception {
67
		
68
		classification = classificationService.load(classificationUuid);
69
		
70
		node1 = taxonNodeService.load(node1Uuid);
71
		
72
		node2 = taxonNodeService.load(node2Uuid);
73
		
74
		reference = referenceService.load(referenceUuid);
75
		
76
		// referencing
77
		synonymRelationshipType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();
78
		referenceDetail = "test"; 
79 69
	}
80 70
	
81 71
	/**
82 72
	 * Test method for {@link eu.etaxonomy.cdm.api.service.TaxonNodeServiceImpl#makeTaxonNodeASynonymOfAnotherTaxonNode(eu.etaxonomy.cdm.model.taxon.TaxonNode, eu.etaxonomy.cdm.model.taxon.TaxonNode, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)}.
83 73
	 */
84 74
	@Test
85
	@Ignore
75
	@DataSet
86 76
	public final void testMakeTaxonNodeASynonymOfAnotherTaxonNode() {
77
		classification = classificationService.load(classificationUuid);
78
		node1 = taxonNodeService.load(node1Uuid);
79
		node2 = taxonNodeService.load(node2Uuid);
80
		reference = referenceService.load(referenceUuid);
81
		synonymRelationshipType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();
82
		referenceDetail = "test"; 
83

  
84
		//
85
		//TODO
86
		
87

  
87 88
		// descriptions
89
		t1 = node1.getTaxon();
90
		t2 = node2.getTaxon();
91
		Assert.assertEquals(2, t1.getDescriptions().size());
92
		Assert.assertTrue(t2.getSynonyms().isEmpty());
93
		Assert.assertTrue(t2.getDescriptions().size() == 0);
88 94
		
89 95
		taxonNodeService.makeTaxonNodeASynonymOfAnotherTaxonNode(node1, node2, synonymRelationshipType, reference, referenceDetail);
90 96
		
91 97
		Assert.assertFalse(t2.getSynonyms().isEmpty());
92
		Assert.assertTrue(t2.getDescriptions().size() == 2);
98
		Assert.assertEquals(2, t2.getDescriptions().size());
93 99
		
94 100
	}
95 101

  
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImplTest
1
<?xml version='1.0' encoding='UTF-8'?>
2
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dataset.xsd">
3
    <REFERENCE ID="1" UUID="de7d1205-291f-45d9-9059-ca83fc7ade14"/>
4
    <CLASSIFICATION ID="1" UUID="6c2bc8d9-ee62-4222-be89-4a8e31770878"/>
5
    <TAXONNODE ID="1" CLASSIFICATION_ID="1"/>
6
    <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="1" ROOTNODES_ID="1" />
7
    <TAXONNODE ID="2" TAXON_ID="1" PARENT_ID="1" CLASSIFICATION_ID="1" UUID="484a1a77-689c-44be-8e65-347d835f47e8"/>
8
    <TAXONNODE ID="3" TAXON_ID="2" PARENT_ID="1" CLASSIFICATION_ID="1" UUID="2d41f0c2-b785-4f73-a436-cc2d5e93cc5b"/>
9
    <TAXONBASE DTYPE="Taxon" ID="1" NAME_ID="1" UUID="55c3e41a-c629-40e6-aa6a-ff274ac6ddb1"/>
10
    <TAXONBASE DTYPE="Taxon" ID="2"  NAME_ID="2" UUID="2659a7e0-ff35-4ee4-8493-b453756ab955"/>
11
    <TAXONBASE DTYPE="Synonym" ID="3" NAME_ID="3" UUID="3034249e-9491-4439-bcb6-9c7d68e29bce"/>
12
    <TAXONBASE DTYPE="Synonym" ID="4" NAME_ID="4" UUID="ac6c5bb1-d36d-4068-af7c-4f0bb009880d"/>
13
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="1" UUID="54a1d7f9-79ab-4fb3-bff5-152e1046cf75"/>
14
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="2" UUID="e7f50b04-9648-479b-bc8a-ffebf295dce9"/>
15
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="3" UUID="c0439dd6-8d2b-4428-86f4-37f4a90d4583"/>
16
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="4" UUID="6a5774bd-c8aa-42dc-91dd-d62d27e7ea2a"/>
17
    <SYNONYMRELATIONSHIP ID="1" UUID="cc769418-3ba4-4c1f-a4cb-b18bf42ec8e9" CITATION_ID="1" RELATEDFROM_ID="3" RELATEDTO_ID="1"/>
18
    <DESCRIPTIONBASE ID="1" UUID="56cf0c8c-18e3-4bea-9525-b9804cf57c5d" DTYPE="TaxonDescription"/>
19
</dataset>
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImplTest.xml
1
<?xml version='1.0' encoding='UTF-8'?>
2
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dataset.xsd">
3
    <REFERENCE ID="1" UUID="de7d1205-291f-45d9-9059-ca83fc7ade14" protectedTitleCache="false" refType="5" nomenclaturallyRelevant="false" parsingProblem="0" problemEnds="-1" problemStarts="-1" />
4
    <CLASSIFICATION ID="1" UUID="6c2bc8d9-ee62-4222-be89-4a8e31770878"  protectedTitleCache="true"/>
5
    <TAXONNODE ID="1" CLASSIFICATION_ID="1" countChildren="2"/>
6
    <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="1" ROOTNODES_ID="1"/>
7
    <TAXONNODE ID="2" TAXON_ID="1" PARENT_ID="1" CLASSIFICATION_ID="1" UUID="484a1a77-689c-44be-8e65-347d835f47e8"  countChildren="0"/>
8
    <TAXONNODE ID="3" TAXON_ID="2" PARENT_ID="1" CLASSIFICATION_ID="1" UUID="2d41f0c2-b785-4f73-a436-cc2d5e93cc5b"  countChildren="0"/>
9
    <TAXONBASE DTYPE="Taxon" ID="1" NAME_ID="1" UUID="55c3e41a-c629-40e6-aa6a-ff274ac6ddb1" protectedTitleCache="false" doubtful="false" useNameCache="false" excluded="false" taxonStatusUnknown="false" unplaced="false" taxonomicChildrenCount="0"/>
10
    <TAXONBASE DTYPE="Taxon" ID="2"  NAME_ID="2" UUID="2659a7e0-ff35-4ee4-8493-b453756ab955" protectedTitleCache="false" doubtful="false" useNameCache="false" excluded="false" taxonStatusUnknown="false" unplaced="false" taxonomicChildrenCount="0"/>
11
    <TAXONBASE DTYPE="Synonym" ID="3" NAME_ID="3" UUID="3034249e-9491-4439-bcb6-9c7d68e29bce" protectedTitleCache="false" doubtful="false" useNameCache="false"/>
12
    <TAXONBASE DTYPE="Synonym" ID="4" NAME_ID="4" UUID="ac6c5bb1-d36d-4068-af7c-4f0bb009880d" protectedTitleCache="false" doubtful="false" useNameCache="false"/>
13
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="1" UUID="54a1d7f9-79ab-4fb3-bff5-152e1046cf75" protectedTitleCache="false" parsingProblem="0" problemEnds="-1" problemStarts="-1" protectedFullTitleCache="false" protectedAuthorshipCache="false" protectedNameCache="false" hybridFormula="false" monomHybrid="false" binomHybrid="false" trinomHybrid="false" anamorphic="false"/>
14
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="2" UUID="e7f50b04-9648-479b-bc8a-ffebf295dce9" protectedTitleCache="false" parsingProblem="0" problemEnds="-1" problemStarts="-1" protectedFullTitleCache="false" protectedAuthorshipCache="false" protectedNameCache="false" hybridFormula="false" monomHybrid="false" binomHybrid="false" trinomHybrid="false" anamorphic="false"/>
15
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="3" UUID="c0439dd6-8d2b-4428-86f4-37f4a90d4583" protectedTitleCache="false" parsingProblem="0" problemEnds="-1" problemStarts="-1" protectedFullTitleCache="false" protectedAuthorshipCache="false" protectedNameCache="false" hybridFormula="false" monomHybrid="false" binomHybrid="false" trinomHybrid="false" anamorphic="false"/>
16
    <TAXONNAMEBASE DTYPE="BotanicalName" ID="4" UUID="6a5774bd-c8aa-42dc-91dd-d62d27e7ea2a" protectedTitleCache="false" parsingProblem="0" problemEnds="-1" problemStarts="-1" protectedFullTitleCache="false" protectedAuthorshipCache="false" protectedNameCache="false" hybridFormula="false" monomHybrid="false" binomHybrid="false" trinomHybrid="false" anamorphic="false"/>
17
    <SYNONYMRELATIONSHIP ID="1" UUID="cc769418-3ba4-4c1f-a4cb-b18bf42ec8e9" CITATION_ID="1" RELATEDFROM_ID="3" RELATEDTO_ID="1" DOUBTFUL="false" PARTIAL="false" PROPARTE="false"/>
18
    <DESCRIPTIONBASE ID="1" UUID="56cf0c8c-18e3-4bea-9525-b9804cf57c5d" DTYPE="TaxonDescription" TAXON_ID="1" protectedTitleCache="false" imageGallery="false" />
19
    <DESCRIPTIONBASE ID="2" UUID="36af5c7c-18e3-4bec-6535-a9804cf57c6e" DTYPE="TaxonDescription" TAXON_ID="1" protectedTitleCache="false" imageGallery="false" />
20
    <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="1" indescription_id="1" orderRelevant="false"/>
21
    <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="2" indescription_id="2" orderRelevant="false"/>
22
    <DESCRIPTIONELEMENTBASE_LANGUAGESTRING descriptionElementBase_id="1" multilanguagetext_id="1" multilanguagetext_mapkey_id="124" />
23
    <DESCRIPTIONELEMENTBASE_LANGUAGESTRING descriptionElementBase_id="2" multilanguagetext_id="2" multilanguagetext_mapkey_id="124" />
24
    <LANGUAGESTRING ID="1" TEXT="Any text"/>
25
    <LANGUAGESTRING ID="2" TEXT="Second text"/>
26
    
27
</dataset>

Also available in: Unified diff