Project

General

Profile

Revision e9ca40c5

IDe9ca40c510a1f44d2dfaaee5848de6e10b4f3319
Parent 53f6e21d
Child e15e805c

Added by Andreas Kohlbecker over 2 years ago

ref #7648 TaxonGraphService complete with full set of tests

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImpl.java
889 889
    }
890 890

  
891 891
    @Override
892
    public List<TaxonBase> findTaxaByName(Class<? extends TaxonBase> clazz, String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, String authorship, Rank rank, Integer pageSize,	Integer pageNumber) {
893
        checkNotInPriorView("TaxonDaoHibernateImpl.findTaxaByName(Boolean accepted, String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, String authorship, Rank rank, Integer pageSize,	Integer pageNumber)");
892
    public List<TaxonBase> findTaxaByName(Class<? extends TaxonBase> clazz, String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, String authorship, Rank rank, Integer pageSize,Integer pageNumber) {
893
        checkNotInPriorView("TaxonDaoHibernateImpl.findTaxaByName(Boolean accepted, String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, String authorship, Rank rank, Integer pageSize,Integer pageNumber)");
894 894
        Criteria criteria = getCriteria(clazz);
895 895

  
896 896
        criteria.setFetchMode( "name", FetchMode.JOIN );
......
1975 1975
     * {@inheritDoc}
1976 1976
     */
1977 1977
    @Override
1978
    public List<TaxonGraphEdgeDTO> getTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
1979
            boolean includeUnpublished) {
1978
    public List<TaxonGraphEdgeDTO> listTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
1979
            boolean includeUnpublished, Integer pageSize, Integer pageIndex) {
1980 1980

  
1981
        Session session = getSession();
1982
        String hql = "select new eu.etaxonomy.cdm.persistence.dto.TaxonGraphEdgeDTO(fromT.uuid, fromT.titleCache, toT.uuid, toT.titleCache, c.uuid, c.titleCache) "
1983
                + "FROM TaxonRelationship as tr "
1984
                + "JOIN tr.relatedTo as toT "
1985
                + "JOIN tr.relatedFrom as fromT "
1986
                + "JOIN tr.citation as c "
1987
                + "WHERE tr.type = :reltype AND toT.uuid = :toTaxonUuid AND fromT.uuid = :fromTaxonUuid";
1981
        Query query = prepareTaxonGraphEdgeDTOs(fromTaxonUuid, toTaxonUuid, type, includeUnpublished, false);
1988 1982

  
1989
        if(!includeUnpublished){
1990
            hql += " AND toT.publish is true AND fromT.publish is true";
1983
        if(pageSize != null) {
1984
            query.setMaxResults(pageSize);
1985
            if(pageIndex != null) {
1986
                query.setFirstResult(pageIndex * pageSize);
1987
            } else {
1988
                query.setFirstResult(0);
1989
            }
1991 1990
        }
1992 1991

  
1993
        Query query = session.createQuery(hql);
1994
        query.setParameter("reltype", type);
1995
        query.setParameter("fromTaxonUuid", fromTaxonUuid);
1996
        query.setParameter("toTaxonUuid", toTaxonUuid);
1997

  
1992
        @SuppressWarnings("unchecked")
1998 1993
        List<TaxonGraphEdgeDTO> result = query.list();
1999 1994

  
2000 1995
        return result;
2001 1996
    }
2002 1997

  
1998
    @Override
1999
    public long countTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
2000
            boolean includeUnpublished) {
2001

  
2002
        Query query = prepareTaxonGraphEdgeDTOs(fromTaxonUuid, toTaxonUuid, type, includeUnpublished, true);
2003
        Long count = (Long) query.uniqueResult();
2004
        return count;
2005
    }
2006

  
2007
    /**
2008
     * @param fromTaxonUuid
2009
     * @param toTaxonUuid
2010
     * @param type
2011
     * @param includeUnpublished
2012
     * @return
2013
     */
2014
    protected Query prepareTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
2015
            boolean includeUnpublished, boolean doCount) {
2016
        Session session = getSession();
2017
        String hql = "";
2018
        if(doCount){
2019
            hql = "COUNT(tr.id)";
2020
        } else {
2021
            hql += "SELECT new eu.etaxonomy.cdm.persistence.dto.TaxonGraphEdgeDTO(fromT.uuid, fromT.titleCache, toT.uuid, toT.titleCache, c.uuid, c.titleCache)";
2022
        }
2023
        hql += " FROM TaxonRelationship as tr "
2024
                + " JOIN tr.citation as c"
2025
                + " JOIN tr.relatedFrom as fromT"
2026
                + " JOIN tr.relatedTo as toT"
2027
                + " WHERE tr.type = :reltype";
2028

  
2029
        if(fromTaxonUuid != null){
2030
            hql += " AND fromT.uuid = :fromTaxonUuid";
2031
            if(!includeUnpublished){
2032
                hql += " AND fromT.publish is true";
2033
            }
2034
        }
2035
        if(toTaxonUuid != null){
2036
            hql += " AND toT.uuid = :toTaxonUuid";
2037
            if(!includeUnpublished){
2038
                hql += " AND toT.publish is true";
2039
            }
2040
        }
2041

  
2042
        Query query = session.createQuery(hql);
2043
        query.setParameter("reltype", type);
2044
        if(fromTaxonUuid != null){
2045
            query.setParameter("fromTaxonUuid", fromTaxonUuid);
2046
        }
2047
        if(toTaxonUuid != null){
2048
            query.setParameter("toTaxonUuid", toTaxonUuid);
2049
        }
2050
        return query;
2051
    }
2052

  
2003 2053

  
2004 2054
}
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonDao.java
445 445
            Integer pageSize, Integer pageNumber,
446 446
            List<OrderHint> orderHints, List<String> propertyPaths);
447 447

  
448
    List<TaxonGraphEdgeDTO> getTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
448
    /**
449
     *
450
     * @param fromTaxonUuid
451
     *  Can be <code>null</code> to retrieve all edges having the toName as target.
452
     * @param toTaxonUuid
453
     *  Can be <code>null</code> to retrieve all edges originating from the fromName as target.
454
     * @param type
455
     * @param includeUnpublished
456
     * @return
457
     */
458
    List<TaxonGraphEdgeDTO> listTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
459
            boolean includeUnpublished, Integer pageSize, Integer pageIndex);
460

  
461
    /**
462
     * @param fromTaxonUuid
463
     *  Can be <code>null</code> to retrieve all edges having the toName as target.
464
     * @param toTaxonUuid
465
     *  Can be <code>null</code> to retrieve all edges originating from the fromName as target.
466
     * @param type
467
     * @param includeUnpublished
468
     * @return
469
     */
470
    long countTaxonGraphEdgeDTOs(UUID fromTaxonUuid, UUID toTaxonUuid, TaxonRelationshipType type,
449 471
            boolean includeUnpublished);
450 472

  
451 473

  
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/taxonGraph/TaxonGraphService.java
50 50
@Transactional(readOnly = true)
51 51
public class TaxonGraphService implements ITaxonGraphService {
52 52

  
53
    protected static final TaxonRelationshipType RELTYPE = TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN();
53
    private TaxonRelationshipType relType = TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN();
54 54

  
55 55
    private EnumSet<ReferenceType> referenceSectionTypes = EnumSet.of(ReferenceType.Section, ReferenceType.BookSection);
56 56

  
......
75 75
        secReferenceUUID = uuid;
76 76
    }
77 77

  
78
    protected TaxonRelationshipType relType() {
79
        if(relType == null){
80
            relType = TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN();
81
        }
82
        return relType;
83
    }
84

  
78 85
    @Override
86
    @Transactional(readOnly = false)
79 87
    public void onNewTaxonName(TaxonName taxonName) throws TaxonGraphException {
80 88
        onNameOrRankChange(taxonName);
81 89
    }
......
84 92
     * {@inheritDoc}
85 93
     */
86 94
    @Override
95
    @Transactional(readOnly = false)
87 96
    public void onNameOrRankChange(TaxonName taxonName) throws TaxonGraphException {
88 97
        Taxon taxon = assureSingleTaxon(taxonName);
89 98
        boolean isNotDeleted = taxonService.getSession().contains(taxonName) && taxonName.isPersited();
......
94 103
    }
95 104

  
96 105
    @Override
106
    @Transactional(readOnly = false)
97 107
    public void onNomReferenceChange(TaxonName taxonName, Reference oldNomReference) throws TaxonGraphException {
98 108
        if(oldNomReference == null){
99 109
            onNewTaxonName(taxonName);
......
111 121
     */
112 122
    private void updateEdges(Taxon taxon) throws TaxonGraphException {
113 123

  
114
        Session session = taxonService.getSession();
115 124
        List<TaxonName> relatedHigherNames = relatedHigherNames(taxon.getName());
116 125
        Reference conceptReference = conceptReference(taxon.getName().getNomenclaturalReference());
117 126
        if(conceptReference != null){
......
128 137

  
129 138
            for(TaxonName name : relatedHigherNamesWithoutRels){
130 139
                Taxon toTaxon = assureSingleTaxon(name);
131
                session.merge(taxon.addTaxonRelation(toTaxon, RELTYPE, conceptReference, null));
140
                taxon.addTaxonRelation(toTaxon, relType(), conceptReference, null);
132 141
            }
133 142
        }
134 143
    }
......
236 245
     */
237 246
    protected Taxon assureSingleTaxon(TaxonName taxonName) throws TaxonGraphException {
238 247

  
239
        // TODO check algo regarding deleted names
240
        TaxonName taxonNamePersisted = taxonService.getSession().load(TaxonName.class, taxonName.getId());
248
        Session session = taxonService.getSession();
249
        TaxonName taxonNamePersisted = session.load(TaxonName.class, taxonName.getId());
241 250
        Taxon taxon;
242 251
        if(taxonName.getTaxa().size() == 0){
252
            if(taxonNamePersisted != null){
243 253
            Reference secRef = referenceService.load(secReferenceUUID);
244
            taxon = Taxon.NewInstance(taxonNamePersisted, secRef);
245
            taxonService.saveOrUpdate(taxon);
254
                taxon = Taxon.NewInstance(taxonNamePersisted, secRef);
255
                session.saveOrUpdate(taxon);
256
            } else {
257
                throw new TaxonGraphException("Can't create taxon for deleted name: " + taxonName);
258
            }
246 259
        } else if(taxonName.getTaxa().size() == 1){
247 260
            taxon = taxonName.getTaxa().iterator().next();
248 261
            if(!secReferenceUUID.equals(taxon.getSec().getUuid())){
......
275 288

  
276 289
    @Override
277 290
    public List<TaxonGraphEdgeDTO> edges(TaxonName fromName, TaxonName toName, boolean includeUnpublished) throws TaxonGraphException{
278
        Taxon fromTaxon = assureSingleTaxon(fromName);
279
        Taxon toTaxon = assureSingleTaxon(toName);
280
        return taxonDao.getTaxonGraphEdgeDTOs(fromTaxon.getUuid(), toTaxon.getUuid(), RELTYPE, includeUnpublished);
291
        UUID fromTaxonUUID = null;
292
        UUID toTaxonUUID = null;
293
        if(fromName != null){
294
            fromTaxonUUID = assureSingleTaxon(fromName).getUuid();
295
        }
296
        if(toName != null){
297
            toTaxonUUID = assureSingleTaxon(toName).getUuid();
298
        }
299
        return taxonDao.listTaxonGraphEdgeDTOs(fromTaxonUUID, toTaxonUUID, relType(), includeUnpublished, null, null);
281 300
    }
282 301

  
283 302
    @Override
284 303
    public List<TaxonGraphEdgeDTO> edges(UUID fromtaxonUuid, UUID toTaxonUuid, boolean includeUnpublished) throws TaxonGraphException{
285
        return taxonDao.getTaxonGraphEdgeDTOs(fromtaxonUuid, toTaxonUuid, RELTYPE, includeUnpublished);
304
        return taxonDao.listTaxonGraphEdgeDTOs(fromtaxonUuid, toTaxonUuid, relType(), includeUnpublished, null, null);
286 305
    }
287 306

  
288 307
    /**
......
290 309
     */
291 310
    protected List<TaxonRelationship> taxonGraphRelationsFrom(Taxon taxon, Reference citation) {
292 311
        // TODO optimize by creating filterable listToTaxonRelationships method
293
        List<TaxonRelationship> relations = taxonService.listToTaxonRelationships(taxon, RELTYPE, true, null, null, null, null);
312
        List<TaxonRelationship> relations = taxonService.listFromTaxonRelationships(taxon, relType(), true, null, null, null, null);
294 313
        List<TaxonRelationship> includedInRelations = new ArrayList<>();
295 314
        for(TaxonRelationship taxonRel : relations){
296 315
            if(citation.equals(taxonRel.getCitation())){
......
305 324
     */
306 325
    protected List<TaxonRelationship> taxonGraphRelationsTo(Taxon taxon, Reference citation) {
307 326
        // TODO optimize by creating filterable listToTaxonRelationships method
308
        List<TaxonRelationship> relations = taxonService.listFromTaxonRelationships(taxon, RELTYPE, true, null, null, null, null);
327
        List<TaxonRelationship> relations = taxonService.listToTaxonRelationships(taxon, relType(), true, null, null, null, null);
309 328
        List<TaxonRelationship> includedInRelations = new ArrayList<>();
310 329
        for(TaxonRelationship taxonRel : relations){
311 330
            if(citation.equals(taxonRel.getCitation())){
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/taxonGraph/TaxonGraphTest.java
14 14
import java.util.List;
15 15
import java.util.UUID;
16 16

  
17
import org.apache.log4j.Level;
18
import org.apache.log4j.Logger;
17 19
import org.junit.Assert;
20
import org.junit.Before;
18 21
import org.junit.Test;
19 22
import org.unitils.dbunit.annotation.DataSet;
20 23
import org.unitils.spring.annotation.SpringBeanByType;
......
30 33
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
31 34
import eu.etaxonomy.cdm.model.taxon.Taxon;
32 35
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
36
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
33 37
import eu.etaxonomy.cdm.persistence.dto.TaxonGraphEdgeDTO;
34 38
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
39
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
35 40

  
36 41
/**
37 42
 * @author a.kohlbecker
......
61 66
    UUID uuid_secRef = UUID.fromString("34e1ff99-63c4-4296-81b6-b20afb98902e");
62 67

  
63 68
    UUID uuid_n_euglenophyceae = UUID.fromString("9928147d-4499-4ce9-bcf3-e4eaa13e509e");
69
    UUID uuid_n_euglena = UUID.fromString("ab59d853-dd4f-4f80-bd7b-cf53bfd42d39");
64 70
    UUID uuid_n_trachelomonas = UUID.fromString("5e3d015c-0a5c-4975-a3b0-334b4b47ff79");
65 71
    UUID uuid_n_trachelomonas_a  = UUID.fromString("a798721a-e305-420d-aec1-e915ad1971e4");
72
    UUID uuid_n_trachelomonas_o  = UUID.fromString("a2e7eeff-b844-4b3d-ab75-2a113b44573e");
66 73
    UUID uuid_n_trachelomonas_o_var_d  = UUID.fromString("d8a0e3ad-2a4d-45ed-b874-f96616015f91");
67 74
    UUID uuid_n_trachelomonas_s  = UUID.fromString("5b90bd58-7f76-45c4-9966-7f65e7bf0bb0");
68 75
    UUID uuid_n_trachelomonas_s_var_a = UUID.fromString("192ad8a1-55ca-4379-87a1-3bbd04e8b880");
69 76

  
70 77
    UUID uuid_t_euglenophyceae = UUID.fromString("4ea17d7a-17a3-41f0-8de6-e924494ecbae");
78
    UUID uuid_t_euglena = UUID.fromString("1c69afd4-ae58-4913-8706-5c89729d38f4");
71 79
    UUID uuid_t_trachelomonas = UUID.fromString("52b9a8e0-9133-4ee0-ba9f-84ca6e28d033");
72 80
    UUID uuid_t_trachelomonas_a  = UUID.fromString("04443b64-f2e5-48c5-9069-9354f43ded9f");
81
    UUID uuid_t_trachelomonas_o  = UUID.fromString("bdf75350-8361-4e33-a614-a4214cc3e90a");
73 82
    UUID uuid_t_trachelomonas_o_var_d  = UUID.fromString("f54ad8cf-fe87-499d-826a-2c5a71551fcf");
74 83
    UUID uuid_t_trachelomonas_s  = UUID.fromString("5dce8a09-c809-4027-a9ce-b70901e7b820");
75 84
    UUID uuid_t_trachelomonas_s_var_a = UUID.fromString("3f14c528-e191-4a6f-b2a9-36c9a3fc7eee");
......
84 93
//        }
85 94
//    }
86 95

  
96
    @Before
97
    public void setSecRef(){
98
        taxonGraphService.setSecReferenceUUID(uuid_secRef);
99
    }
100

  
101

  
87 102
    @Test
88
    @DataSet
103
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
89 104
    public void testnewTaxonName() throws TaxonGraphException{
90 105

  
91
        taxonGraphService.setSecReferenceUUID(uuid_secRef);
92 106
        Reference refX = ReferenceFactory.newBook();
93 107
        refX.setTitleCache("Ref-X", true);
94 108

  
95 109
        TaxonName n_t_argentinensis = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Trachelomonas", null, "argentinensis", null, null, refX, null, null);
96 110
        n_t_argentinensis = nameService.save(n_t_argentinensis);
97 111
        taxonGraphService.onNewTaxonName(n_t_argentinensis);
98
        taxonService.getSession().flush();
112
        commitAndStartNewTransaction();
99 113

  
114
         // printDataSet(System.err,"TaxonRelationship");
100 115
        Assert.assertTrue("a taxon should have been created", n_t_argentinensis.getTaxa().size() > 0);
101 116

  
102 117
        List<TaxonGraphEdgeDTO> edges = taxonGraphService.edges(n_t_argentinensis, nameService.load(uuid_n_trachelomonas), true);
......
104 119
        Assert.assertEquals(refX.getUuid(), edges.get(0).getCitationUuid());
105 120
    }
106 121

  
122
    @Test
123
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
124
    public void testChangeNomRef() throws TaxonGraphException{
125

  
126
        Reference refX = ReferenceFactory.newBook();
127
        refX.setTitleCache("Ref-X", true);
128

  
129
        TaxonName n_trachelomonas_a = nameService.load(uuid_n_trachelomonas_a);
130
        Reference oldNomReference = n_trachelomonas_a.getNomenclaturalReference();
131
        n_trachelomonas_a.setNomenclaturalReference(refX);
132
        n_trachelomonas_a = nameService.save(n_trachelomonas_a);
133
        taxonGraphService.onNomReferenceChange(n_trachelomonas_a, oldNomReference);
134

  
135
        Logger.getLogger("org.hibernate.SQL").setLevel(Level.TRACE);
136
        commitAndStartNewTransaction();
137

  
138
        // printDataSet(System.err,"TaxonRelationship");
139
        List<TaxonGraphEdgeDTO> edges = taxonGraphService.edges(n_trachelomonas_a, nameService.load(uuid_n_trachelomonas), true);
140
        Assert.assertEquals(1, edges.size());
141
        Assert.assertEquals(refX.getUuid(), edges.get(0).getCitationUuid());
142
    }
143

  
144
    @Test
145
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
146
    public void testChangeRank() throws TaxonGraphException{
147

  
148
        TaxonName n_trachelomonas_o_var_d = nameService.load(uuid_n_trachelomonas_o_var_d);
149

  
150
        List<TaxonGraphEdgeDTO> edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas), true);
151
        Assert.assertEquals("One edge from 'Trachelomonas oviformis var. duplex' to 'Trachelomonas' expected", 1, edges.size());
152

  
153
        n_trachelomonas_o_var_d.setRank(Rank.SPECIES());
154
        nameService.saveOrUpdate(n_trachelomonas_o_var_d);
155
        taxonGraphService.onNameOrRankChange(nameService.load(uuid_n_trachelomonas_o_var_d)); // TODO reloading needed?
156
        commitAndStartNewTransaction();
157

  
158
        // printDataSet(System.err,"TaxonRelationship");
159
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas), true);
160
        Assert.assertEquals("The edge to Trachelomonas should still exist", 1, edges.size());
161
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas_o), true);
162
        Assert.assertEquals("The edge to Trachelomonas oviformis should have been deleted", 0, edges.size());
163
    }
164

  
165
    @Test
166
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
167
    public void testChangeGenus() throws TaxonGraphException{
168

  
169
        TaxonName n_trachelomonas_o_var_d = nameService.load(uuid_n_trachelomonas_o_var_d);
170

  
171
        List<TaxonGraphEdgeDTO> edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas), true);
172
        Assert.assertEquals("One edge from 'Trachelomonas oviformis var. duplex' to 'Trachelomonas' expected", 1, edges.size());
173
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas_o), true);
174
        Assert.assertEquals("One edge from 'Trachelomonas oviformis var. duplex' to 'Trachelomonas oviformis' expected", 1, edges.size());
175
        edges = taxonGraphService.edges(null, nameService.load(uuid_n_euglena), true);
176
        Assert.assertEquals("No edges to 'Euglena' expected", 0, edges.size());
177

  
178
        n_trachelomonas_o_var_d.setGenusOrUninomial("Euglena");
179
        nameService.saveOrUpdate(n_trachelomonas_o_var_d);
180
        taxonGraphService.onNameOrRankChange(nameService.load(uuid_n_trachelomonas_o_var_d)); // TODO reloading needed?
181
        commitAndStartNewTransaction();
182

  
183
        // printDataSet(System.err,"TaxonRelationship");
184
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas), true);
185
        Assert.assertEquals("The edge to Trachelomonas should have been deleted", 0, edges.size());
186
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas_o), true);
187
        Assert.assertEquals("The edge to 'Trachelomonas oviformis' should have been deleted", 0, edges.size());
188
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_euglena), true);
189
        Assert.assertEquals("The edge to 'Euglena' should have been created", 1, edges.size());
190
    }
107 191

  
108
    @Override
109 192
    @Test
193
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
194
    public void testChangeSepcificEpithet() throws TaxonGraphException{
195

  
196
        TaxonName n_trachelomonas_o_var_d = nameService.load(uuid_n_trachelomonas_o_var_d);
197

  
198
        List<TaxonGraphEdgeDTO> edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas), true);
199
        Assert.assertEquals("One edge from 'Trachelomonas oviformis var. duplex' to 'Trachelomonas' expected", 1, edges.size());
200
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas_o), true);
201
        Assert.assertEquals("One edge from 'Trachelomonas oviformis var. duplex' to 'Trachelomonas oviformis' expected", 1, edges.size());
202

  
203
        n_trachelomonas_o_var_d.setSpecificEpithet("alabamensis");
204
        nameService.saveOrUpdate(n_trachelomonas_o_var_d);
205
        taxonGraphService.onNameOrRankChange(nameService.load(uuid_n_trachelomonas_o_var_d)); // TODO reloading needed?
206
        commitAndStartNewTransaction();
207

  
208
        // printDataSet(System.err,"TaxonRelationship");
209
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas), true);
210
        Assert.assertEquals("The edge to Trachelomonas should still exist", 1, edges.size());
211
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas_o), true);
212
        Assert.assertEquals("The edge to Trachelomonas oviformis should have been deleted", 0, edges.size());
213
        edges = taxonGraphService.edges(n_trachelomonas_o_var_d, nameService.load(uuid_n_trachelomonas_a), true);
214
        Assert.assertEquals("The edge to Trachelomonas alabamensis should have been created", 1, edges.size());
215
    }
216

  
217

  
218
    @Override
219
    // @Test
110 220
    public void createTestDataSet() throws FileNotFoundException {
111 221

  
222
        TaxonRelationshipType relType = TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN();
223

  
112 224
        // graph:
113 225
        //
114
        // - Euglenophyceae
115
        //   +-- Trachelomonas
116
        //       +-- Trachelomonas alabamensis
117
        //       +-- Trachelomonas oviformis var. duplex
118

  
119
        // Further names not in the graph:
120
         // Trachelomonas sydneyensis
121
        //  Trachelomonas sydneyensis var. acuminata
226
        // - Euglenophyceae Ref-A
227
        //   +-- Trachelomonas Ref-B
228
        //       +-- Trachelomonas alabamensis Ref-C
229
        //       +-- Trachelomonas oviformis Ref-D in Ref-C
230
        //       +-- +-- Trachelomonas oviformis var. duplex Ref-D in Ref-C
231
        //       +-- Trachelomonas sydneyensis Ref-E
232
        //       +-- +-- Trachelomonas sydneyensis var. acuminata Ref-F
122 233

  
123 234
        Reference secRef = ReferenceFactory.newDatabase();
124 235
        secRef.setTitleCache("secRef", true);
......
127 238
        Reference refA = ReferenceFactory.newBook();
128 239
        refA.setTitleCache("Ref-A", true);
129 240
        Reference refB = ReferenceFactory.newBook();
130
        refA.setTitleCache("Ref-B", true);
131
        Reference refC = ReferenceFactory.newBook();
132
        refA.setTitleCache("Ref-C", true);
133
        Reference refD = ReferenceFactory.newBookSection(refC, null, "Ref-D", null);
241
        refB.setTitleCache("Ref-B", true);
242
        Reference refC = ReferenceFactory.newArticle();
243
        refC.setTitleCache("Ref-C", true);
244
        Reference refD = ReferenceFactory.newSection();
245
        refD.setTitleCache("Ref-D in Ref-C", true);
246
        refD.setInReference(refC);
134 247
        Reference refE = ReferenceFactory.newBook();
135
        refA.setTitleCache("Ref-E", true);
248
        refE.setTitleCache("Ref-E", true);
136 249
        Reference refF = ReferenceFactory.newBook();
137
        refA.setTitleCache("Ref-F", true);
250
        refF.setTitleCache("Ref-F", true);
251
        Reference refG = ReferenceFactory.newBook();
252
        refG.setTitleCache("Ref-G", true);
138 253

  
139 254
        TaxonName n_euglenophyceae = TaxonNameFactory.NewBotanicalInstance(Rank.FAMILY(), "Euglenophyceae", null, null, null, null, refA, null, null);
140 255
        n_euglenophyceae.setUuid(uuid_n_euglenophyceae);
256
        TaxonName n_euglena = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS(), "Euglena", null, null, null, null, refA, null, null);
257
        n_euglena.setUuid(uuid_n_euglena);
141 258
        TaxonName n_trachelomonas = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS(), "Trachelomonas", null, null, null, null, refB, null, null);
142 259
        n_trachelomonas.setUuid(uuid_n_trachelomonas);
143 260
        TaxonName n_trachelomonas_a = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Trachelomonas", null, "alabamensis",  null, null, refC, null, null);
144 261
        n_trachelomonas_a.setUuid(uuid_n_trachelomonas_a);
262
        TaxonName n_trachelomonas_o = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Trachelomonas", null, "oviformis", null, null, refD, null, null);
263
        n_trachelomonas_o.setUuid(uuid_n_trachelomonas_o);
145 264
        TaxonName n_trachelomonas_o_var_d = TaxonNameFactory.NewBotanicalInstance(Rank.VARIETY(), "Trachelomonas", null, "oviformis", "duplex", null, refD, null, null);
146 265
        n_trachelomonas_o_var_d.setUuid(uuid_n_trachelomonas_o_var_d);
147 266
        TaxonName n_trachelomonas_s = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Trachelomonas", null, "alabamensis",  null, null, refE, null, null);
148 267
        n_trachelomonas_s.setUuid(uuid_n_trachelomonas_s);
149
        TaxonName n_trachelomonas_s_var_a = TaxonNameFactory.NewBotanicalInstance(Rank.VARIETY(), "Trachelomonas", null, "alabamensis",  "acuminata", null, refF, null, null);
268
        TaxonName n_trachelomonas_s_var_a = TaxonNameFactory.NewBotanicalInstance(Rank.VARIETY(), "Trachelomonas", null, "alabamensis",  "acuminata", null, refG, null, null);
150 269
        n_trachelomonas_s_var_a.setUuid(uuid_n_trachelomonas_s_var_a);
151 270

  
152 271
        Taxon t_euglenophyceae = Taxon.NewInstance(n_euglenophyceae, secRef);
153 272
        t_euglenophyceae.setUuid(uuid_t_euglenophyceae);
273
        Taxon t_euglena = Taxon.NewInstance(n_euglena, secRef);
274
        t_euglena.setUuid(uuid_t_euglena);
154 275
        Taxon t_trachelomonas = Taxon.NewInstance(n_trachelomonas, secRef);
155 276
        t_trachelomonas.setUuid(uuid_t_trachelomonas);
156 277
        Taxon t_trachelomonas_a = Taxon.NewInstance(n_trachelomonas_a, secRef);
157 278
        t_trachelomonas_a.setUuid(uuid_t_trachelomonas_a);
279
        Taxon t_trachelomonas_o = Taxon.NewInstance(n_trachelomonas_o, secRef);
280
        t_trachelomonas_o.setUuid(uuid_t_trachelomonas_o);
158 281
        Taxon t_trachelomonas_o_var_d = Taxon.NewInstance(n_trachelomonas_o_var_d, secRef);
159 282
        t_trachelomonas_o_var_d.setUuid(uuid_t_trachelomonas_o_var_d);
160 283
        Taxon t_trachelomonas_s = Taxon.NewInstance(n_trachelomonas_s, secRef);
......
163 286
        t_trachelomonas_s_var_a.setUuid(uuid_t_trachelomonas_s_var_a);
164 287

  
165 288
        referenceService.save(Arrays.asList(secRef, refA, refB, refC, refD, refE, refF));
166
        taxonService.save(Arrays.asList(t_euglenophyceae, t_trachelomonas, t_trachelomonas_a, t_trachelomonas_o_var_d, t_trachelomonas_s, t_trachelomonas_s_var_a));
289
        taxonService.save(Arrays.asList(t_euglenophyceae, t_euglena, t_trachelomonas, t_trachelomonas_a, t_trachelomonas_o, t_trachelomonas_o_var_d, t_trachelomonas_s, t_trachelomonas_s_var_a));
167 290

  
168 291
        List<TaxonRelationship> taxonRels = new ArrayList<>();
169
        taxonRels.add(t_trachelomonas_o_var_d.addTaxonRelation(t_trachelomonas, TaxonGraphService.RELTYPE, n_trachelomonas_o_var_d.getNomenclaturalReference(), null));
170
        taxonRels.add(t_trachelomonas_a.addTaxonRelation(t_trachelomonas, TaxonGraphService.RELTYPE, n_trachelomonas_a.getNomenclaturalReference(), null));
171
        taxonRels.add(t_trachelomonas.addTaxonRelation(t_euglenophyceae, TaxonGraphService.RELTYPE, n_trachelomonas.getNomenclaturalReference(), null));
172
        for(TaxonRelationship trel : taxonRels){
173
            taxonService.getSession().merge(trel);
174
        }
175
        taxonService.getSession().flush();
176 292

  
177
        setComplete();
178
        endTransaction();
293
        taxonRels.add(t_trachelomonas_o_var_d.addTaxonRelation(t_trachelomonas, relType, refC, null));
294
        taxonRels.add(t_trachelomonas_o_var_d.addTaxonRelation(t_trachelomonas_o, relType, refC, null));
295

  
296
        taxonRels.add(t_trachelomonas_o.addTaxonRelation(t_trachelomonas, relType, refC, null));
297

  
298
        taxonRels.add(t_trachelomonas_s_var_a.addTaxonRelation(t_trachelomonas, relType, n_trachelomonas_s_var_a.getNomenclaturalReference(), null));
299
        taxonRels.add(t_trachelomonas_s_var_a.addTaxonRelation(t_trachelomonas_s, relType, n_trachelomonas_s_var_a.getNomenclaturalReference(), null));
300

  
301
        taxonRels.add(t_trachelomonas_s.addTaxonRelation(t_trachelomonas, relType, n_trachelomonas_s.getNomenclaturalReference(), null));
302

  
303
        taxonRels.add(t_trachelomonas_a.addTaxonRelation(t_trachelomonas, relType, n_trachelomonas_a.getNomenclaturalReference(), null));
304

  
305
        taxonRels.add(t_trachelomonas.addTaxonRelation(t_euglenophyceae, relType, n_trachelomonas.getNomenclaturalReference(), null));
306
        taxonRels.add(t_euglena.addTaxonRelation(t_euglenophyceae, relType, n_euglena.getNomenclaturalReference(), null));
307

  
308
        commitAndStartNewTransaction();
179 309

  
180 310
        String fileNameAppendix = null;
181 311
        writeDbUnitDataSetFile(new String[] {
182 312
            "TAXONBASE", "TAXONNAME", "HomotypicalGroup", "Reference",
183 313
            "TaxonRelationship",
184 314
            "LANGUAGESTRING",
185
            "HIBERNATE_SEQUENCES" // IMPORTANT!!!
315
            "HIBERNATE_SEQUENCES", // IMPORTANT!!!
186 316
            },
187 317
            fileNameAppendix, false );
188 318

  
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/taxonGraph/TaxonGraphTest.xml
1 1
<?xml version='1.0' encoding='UTF-8'?>
2 2
<dataset>
3
  <TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2018-09-28 11:03:29.0" UUID="4ea17d7a-17a3-41f0-8de6-e924494ecbae" PROTECTEDTITLECACHE="false" TITLECACHE="Euglenophyceae sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5000" SEC_ID="5000"/>
4
  <TAXONBASE DTYPE="Taxon" ID="5001" CREATED="2018-09-28 11:03:29.0" UUID="52b9a8e0-9133-4ee0-ba9f-84ca6e28d033" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5001" SEC_ID="5000"/>
5
  <TAXONBASE DTYPE="Taxon" ID="5002" CREATED="2018-09-28 11:03:29.0" UUID="04443b64-f2e5-48c5-9069-9354f43ded9f" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5002" SEC_ID="5000"/>
6
  <TAXONBASE DTYPE="Taxon" ID="5003" CREATED="2018-09-28 11:03:29.0" UUID="f54ad8cf-fe87-499d-826a-2c5a71551fcf" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas oviformis var. duplex sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5003" SEC_ID="5000"/>
7
  <TAXONBASE DTYPE="Taxon" ID="5004" CREATED="2018-09-28 11:03:29.0" UUID="5dce8a09-c809-4027-a9ce-b70901e7b820" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5004" SEC_ID="5000"/>
8
  <TAXONBASE DTYPE="Taxon" ID="5005" CREATED="2018-09-28 11:03:29.0" UUID="3f14c528-e191-4a6f-b2a9-36c9a3fc7eee" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis var. acuminata sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5005" SEC_ID="5000"/>
9
  <TAXONNAME ID="5000" CREATED="2018-09-28 11:03:29.0" UUID="9928147d-4499-4ce9-bcf3-e4eaa13e509e" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Euglenophyceae" FULLTITLECACHE="Euglenophyceae, Ref-F" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Euglenophyceae" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Euglenophyceae" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="5001" RANK_ID="782"/>
10
  <TAXONNAME ID="5001" CREATED="2018-09-28 11:03:29.0" UUID="5e3d015c-0a5c-4975-a3b0-334b4b47ff79" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas" FULLTITLECACHE="Trachelomonas" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="5002" RANK_ID="774"/>
11
  <TAXONNAME ID="5002" CREATED="2018-09-28 11:03:29.0" UUID="a798721a-e305-420d-aec1-e915ad1971e4" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis" FULLTITLECACHE="Trachelomonas alabamensis" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas alabamensis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alabamensis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5002" NOMENCLATURALREFERENCE_ID="5003" RANK_ID="765"/>
12
  <TAXONNAME ID="5003" CREATED="2018-09-28 11:03:29.0" UUID="d8a0e3ad-2a4d-45ed-b874-f96616015f91" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas oviformis var. duplex" FULLTITLECACHE="Trachelomonas oviformis var. duplex, in" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" INFRASPECIFICEPITHET="duplex" MONOMHYBRID="false" NAMECACHE="Trachelomonas oviformis var. duplex" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="oviformis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5003" NOMENCLATURALREFERENCE_ID="5004" RANK_ID="761"/>
13
  <TAXONNAME ID="5004" CREATED="2018-09-28 11:03:29.0" UUID="5b90bd58-7f76-45c4-9966-7f65e7bf0bb0" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis" FULLTITLECACHE="Trachelomonas alabamensis" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas alabamensis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alabamensis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5004" NOMENCLATURALREFERENCE_ID="5005" RANK_ID="765"/>
14
  <TAXONNAME ID="5005" CREATED="2018-09-28 11:03:29.0" UUID="192ad8a1-55ca-4379-87a1-3bbd04e8b880" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis var. acuminata" FULLTITLECACHE="Trachelomonas alabamensis var. acuminata" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" INFRASPECIFICEPITHET="acuminata" MONOMHYBRID="false" NAMECACHE="Trachelomonas alabamensis var. acuminata" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alabamensis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5005" NOMENCLATURALREFERENCE_ID="5006" RANK_ID="761"/>
15
  <HOMOTYPICALGROUP ID="5000" CREATED="2018-09-28 11:03:29.0" UUID="c9530734-d89e-4620-9efe-3bc4cc177553"/>
16
  <HOMOTYPICALGROUP ID="5001" CREATED="2018-09-28 11:03:29.0" UUID="3a75e7ea-5946-4fca-93e6-74a716196544"/>
17
  <HOMOTYPICALGROUP ID="5002" CREATED="2018-09-28 11:03:29.0" UUID="8d0be12e-d653-44db-b4a0-e015c3c33322"/>
18
  <HOMOTYPICALGROUP ID="5003" CREATED="2018-09-28 11:03:29.0" UUID="2ec12c47-7f00-4a92-a891-8a7d99a53f4e"/>
19
  <HOMOTYPICALGROUP ID="5004" CREATED="2018-09-28 11:03:29.0" UUID="52a313b8-7a2d-4b13-8b69-d532bf4347ed"/>
20
  <HOMOTYPICALGROUP ID="5005" CREATED="2018-09-28 11:03:29.0" UUID="3fd0936d-ad81-4d2a-b61e-decdea243d98"/>
21
  <REFERENCE ID="5000" CREATED="2018-09-28 11:03:29.0" UUID="34e1ff99-63c4-4296-81b6-b20afb98902e" PROTECTEDTITLECACHE="true" TITLECACHE="secRef" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="secRef" PROTECTEDABBREVTITLECACHE="false" REFTYPE="DB"/>
22
  <REFERENCE ID="5001" CREATED="2018-09-28 11:03:29.0" UUID="10398c33-d8fa-4336-ae63-a33dccce8e20" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-F" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Ref-F" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
23
  <REFERENCE ID="5002" CREATED="2018-09-28 11:03:29.0" UUID="c28ae009-f654-4e1c-82db-fadd4e9597ae" UPDATED="2018-09-28 11:03:29.461" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 5002, uuid=c28ae009-f654-4e1c-82db-fadd4e9597ae]" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Reference [type=Book, id= 5002, uuid=c28ae009-f654-4e1c-82db-fadd4e9597ae]" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
24
  <REFERENCE ID="5003" CREATED="2018-09-28 11:03:29.0" UUID="f2d65e43-ceda-441b-a36d-f52e05584d84" UPDATED="2018-09-28 11:03:29.462" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 5003, uuid=f2d65e43-ceda-441b-a36d-f52e05584d84]" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Reference [type=Book, id= 5003, uuid=f2d65e43-ceda-441b-a36d-f52e05584d84]" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
25
  <REFERENCE ID="5004" CREATED="2018-09-28 11:03:29.0" UUID="4562c0e8-addd-45a2-9388-c5dbafaf3183" PROTECTEDTITLECACHE="false" TITLECACHE="Ref-D in Reference [type=Book, id= 0, uuid=f2d65e43-ceda-441b-a36d-f52e05584d84]" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" TITLE="Ref-D" ABBREVTITLECACHE="Ref-D in Reference [type=Book, id= 0, uuid=f2d65e43-ceda-441b-a36d-f52e05584d84]" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BS" INREFERENCE_ID="5003"/>
26
  <REFERENCE ID="5005" CREATED="2018-09-28 11:03:29.0" UUID="87e8467d-a03a-40ff-b117-646339e8c8ad" UPDATED="2018-09-28 11:03:29.463" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 5005, uuid=87e8467d-a03a-40ff-b117-646339e8c8ad]" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Reference [type=Book, id= 5005, uuid=87e8467d-a03a-40ff-b117-646339e8c8ad]" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
27
  <REFERENCE ID="5006" CREATED="2018-09-28 11:03:29.0" UUID="15b38d94-3252-4f3f-9bb5-629cfd7533f4" UPDATED="2018-09-28 11:03:29.464" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 5006, uuid=15b38d94-3252-4f3f-9bb5-629cfd7533f4]" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Reference [type=Book, id= 5006, uuid=15b38d94-3252-4f3f-9bb5-629cfd7533f4]" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
28
  <TAXONRELATIONSHIP ID="5000" CREATED="2018-09-28 11:03:29.0" UUID="46c80bed-0655-4287-a5bd-f7b3691edb16" DOUBTFUL="false" CITATION_ID="5004" RELATEDFROM_ID="5003" RELATEDTO_ID="5001"/>
29
  <TAXONRELATIONSHIP ID="5001" CREATED="2018-09-28 11:03:29.0" UUID="f3227c81-61c1-483a-b25b-b68ead06fc94" DOUBTFUL="false" CITATION_ID="5003" RELATEDFROM_ID="5002" RELATEDTO_ID="5001"/>
30
  <TAXONRELATIONSHIP ID="5002" CREATED="2018-09-28 11:03:29.0" UUID="8fc34258-74c7-4283-8788-b93b08d24c08" DOUBTFUL="false" CITATION_ID="5002" RELATEDFROM_ID="5001" RELATEDTO_ID="5000"/>
3
  <TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2018-10-01 05:56:45.0" UUID="4ea17d7a-17a3-41f0-8de6-e924494ecbae" PROTECTEDTITLECACHE="false" TITLECACHE="Euglenophyceae sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5000" SEC_ID="5000"/>
4
  <TAXONBASE DTYPE="Taxon" ID="5001" CREATED="2018-10-01 05:56:45.0" UUID="1c69afd4-ae58-4913-8706-5c89729d38f4" PROTECTEDTITLECACHE="false" TITLECACHE="Euglena sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5001" SEC_ID="5000"/>
5
  <TAXONBASE DTYPE="Taxon" ID="5002" CREATED="2018-10-01 05:56:45.0" UUID="52b9a8e0-9133-4ee0-ba9f-84ca6e28d033" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5002" SEC_ID="5000"/>
6
  <TAXONBASE DTYPE="Taxon" ID="5003" CREATED="2018-10-01 05:56:45.0" UUID="04443b64-f2e5-48c5-9069-9354f43ded9f" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5003" SEC_ID="5000"/>
7
  <TAXONBASE DTYPE="Taxon" ID="5004" CREATED="2018-10-01 05:56:45.0" UUID="bdf75350-8361-4e33-a614-a4214cc3e90a" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas oviformis sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5004" SEC_ID="5000"/>
8
  <TAXONBASE DTYPE="Taxon" ID="5005" CREATED="2018-10-01 05:56:45.0" UUID="f54ad8cf-fe87-499d-826a-2c5a71551fcf" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas oviformis var. duplex sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5005" SEC_ID="5000"/>
9
  <TAXONBASE DTYPE="Taxon" ID="5006" CREATED="2018-10-01 05:56:45.0" UUID="5dce8a09-c809-4027-a9ce-b70901e7b820" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5006" SEC_ID="5000"/>
10
  <TAXONBASE DTYPE="Taxon" ID="5007" CREATED="2018-10-01 05:56:45.0" UUID="3f14c528-e191-4a6f-b2a9-36c9a3fc7eee" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis var. acuminata sec. secRef" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5007" SEC_ID="5000"/>
11
  <TAXONNAME ID="5000" CREATED="2018-10-01 05:56:45.0" UUID="9928147d-4499-4ce9-bcf3-e4eaa13e509e" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Euglenophyceae" FULLTITLECACHE="Euglenophyceae, Ref-A" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Euglenophyceae" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Euglenophyceae" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="5001" RANK_ID="782"/>
12
  <TAXONNAME ID="5001" CREATED="2018-10-01 05:56:45.0" UUID="ab59d853-dd4f-4f80-bd7b-cf53bfd42d39" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Euglena" FULLTITLECACHE="Euglena, Ref-A" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Euglena" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Euglena" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="5001" RANK_ID="774"/>
13
  <TAXONNAME ID="5002" CREATED="2018-10-01 05:56:45.0" UUID="5e3d015c-0a5c-4975-a3b0-334b4b47ff79" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas" FULLTITLECACHE="Trachelomonas, Ref-B" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5002" NOMENCLATURALREFERENCE_ID="5002" RANK_ID="774"/>
14
  <TAXONNAME ID="5003" CREATED="2018-10-01 05:56:45.0" UUID="a798721a-e305-420d-aec1-e915ad1971e4" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis" FULLTITLECACHE="Trachelomonas alabamensis in - undefined journal -" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas alabamensis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alabamensis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5003" NOMENCLATURALREFERENCE_ID="5003" RANK_ID="765"/>
15
  <TAXONNAME ID="5004" CREATED="2018-10-01 05:56:45.0" UUID="a2e7eeff-b844-4b3d-ab75-2a113b44573e" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas oviformis" FULLTITLECACHE="Trachelomonas oviformis in in - undefined journal -" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas oviformis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="oviformis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5004" NOMENCLATURALREFERENCE_ID="5004" RANK_ID="765"/>
16
  <TAXONNAME ID="5005" CREATED="2018-10-01 05:56:45.0" UUID="d8a0e3ad-2a4d-45ed-b874-f96616015f91" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas oviformis var. duplex" FULLTITLECACHE="Trachelomonas oviformis var. duplex in in - undefined journal -" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" INFRASPECIFICEPITHET="duplex" MONOMHYBRID="false" NAMECACHE="Trachelomonas oviformis var. duplex" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="oviformis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5005" NOMENCLATURALREFERENCE_ID="5004" RANK_ID="761"/>
17
  <TAXONNAME ID="5006" CREATED="2018-10-01 05:56:45.0" UUID="5b90bd58-7f76-45c4-9966-7f65e7bf0bb0" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis" FULLTITLECACHE="Trachelomonas alabamensis, Ref-E" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="Trachelomonas alabamensis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alabamensis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5006" NOMENCLATURALREFERENCE_ID="5005" RANK_ID="765"/>
18
  <TAXONNAME ID="5007" CREATED="2018-10-01 05:56:45.0" UUID="192ad8a1-55ca-4379-87a1-3bbd04e8b880" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="false" TITLECACHE="Trachelomonas alabamensis var. acuminata" FULLTITLECACHE="Trachelomonas alabamensis var. acuminata, Ref-G" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Trachelomonas" HYBRIDFORMULA="false" INFRASPECIFICEPITHET="acuminata" MONOMHYBRID="false" NAMECACHE="Trachelomonas alabamensis var. acuminata" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alabamensis" TRINOMHYBRID="false" ANAMORPHIC="false" HOMOTYPICALGROUP_ID="5007" NOMENCLATURALREFERENCE_ID="5007" RANK_ID="761"/>
19
  <HOMOTYPICALGROUP ID="5000" CREATED="2018-10-01 05:56:45.0" UUID="2684a9d4-ea98-4b89-95b4-ded752799cb6"/>
20
  <HOMOTYPICALGROUP ID="5001" CREATED="2018-10-01 05:56:45.0" UUID="b8c3f53e-5284-460f-bcb8-a23e491d1c31"/>
21
  <HOMOTYPICALGROUP ID="5002" CREATED="2018-10-01 05:56:45.0" UUID="cace2878-7324-4980-9403-3991b815079d"/>
22
  <HOMOTYPICALGROUP ID="5003" CREATED="2018-10-01 05:56:45.0" UUID="e6f12ac8-428e-4754-bc7d-aef9df3cae77"/>
23
  <HOMOTYPICALGROUP ID="5004" CREATED="2018-10-01 05:56:45.0" UUID="e4c56bff-b96d-4a53-8c11-badc6c9b6f18"/>
24
  <HOMOTYPICALGROUP ID="5005" CREATED="2018-10-01 05:56:45.0" UUID="276df65b-219f-4dec-b0df-004549b1b0af"/>
25
  <HOMOTYPICALGROUP ID="5006" CREATED="2018-10-01 05:56:45.0" UUID="87dc944e-bca9-41ad-9fef-49ead2b920f7"/>
26
  <HOMOTYPICALGROUP ID="5007" CREATED="2018-10-01 05:56:45.0" UUID="e2781fc2-ef9f-4e0d-93a0-b304bc62bdc5"/>
27
  <REFERENCE ID="5000" CREATED="2018-10-01 05:56:44.0" UUID="34e1ff99-63c4-4296-81b6-b20afb98902e" PROTECTEDTITLECACHE="true" TITLECACHE="secRef" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="secRef" PROTECTEDABBREVTITLECACHE="false" REFTYPE="DB"/>
28
  <REFERENCE ID="5001" CREATED="2018-10-01 05:56:44.0" UUID="c18e930c-c3bb-4907-b2aa-3e9fe0ac2656" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-A" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Ref-A" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
29
  <REFERENCE ID="5002" CREATED="2018-10-01 05:56:44.0" UUID="7b22fb90-e5a5-4691-80ba-da2924386526" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-B" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Ref-B" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
30
  <REFERENCE ID="5003" CREATED="2018-10-01 05:56:44.0" UUID="e77bd558-8006-4620-bb75-8a818a3b9685" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-C" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="in - undefined journal -" PROTECTEDABBREVTITLECACHE="false" REFTYPE="ART"/>
31
  <REFERENCE ID="5004" CREATED="2018-10-01 05:56:44.0" UUID="eecf728d-be36-4ebe-9daa-7897865abc59" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-D in Ref-C" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="in in - undefined journal -" PROTECTEDABBREVTITLECACHE="false" REFTYPE="SEC" INREFERENCE_ID="5003"/>
32
  <REFERENCE ID="5005" CREATED="2018-10-01 05:56:44.0" UUID="9e59ce84-940f-4d25-8112-d830f1eecac5" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-E" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Ref-E" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
33
  <REFERENCE ID="5006" CREATED="2018-10-01 05:56:44.0" UUID="320a5a36-df9e-431c-a213-5c50629e5cf2" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-F" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Ref-F" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
34
  <REFERENCE ID="5007" CREATED="2018-10-01 05:56:44.0" UUID="f6896cd6-f996-48b2-a152-8523daf3672d" PROTECTEDTITLECACHE="true" TITLECACHE="Ref-G" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Ref-G" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
35
  <TAXONRELATIONSHIP ID="5000" CREATED="2018-10-01 05:56:45.0" UUID="12ae82ef-a8d3-4687-a396-1c58e146c761" DOUBTFUL="false" CITATION_ID="5002" RELATEDFROM_ID="5002" RELATEDTO_ID="5000" TYPE_ID="889"/>
36
  <TAXONRELATIONSHIP ID="5001" CREATED="2018-10-01 05:56:45.0" UUID="92e40423-60be-4c80-a1bd-1088353f842a" DOUBTFUL="false" CITATION_ID="5001" RELATEDFROM_ID="5001" RELATEDTO_ID="5000" TYPE_ID="889"/>
37
  <TAXONRELATIONSHIP ID="5002" CREATED="2018-10-01 05:56:45.0" UUID="630c8140-da62-4c05-b584-d0997e04de3e" DOUBTFUL="false" CITATION_ID="5003" RELATEDFROM_ID="5005" RELATEDTO_ID="5002" TYPE_ID="889"/>
38
  <TAXONRELATIONSHIP ID="5003" CREATED="2018-10-01 05:56:45.0" UUID="ac617a23-7aff-4543-8277-04cb4036583b" DOUBTFUL="false" CITATION_ID="5005" RELATEDFROM_ID="5006" RELATEDTO_ID="5002" TYPE_ID="889"/>
39
  <TAXONRELATIONSHIP ID="5004" CREATED="2018-10-01 05:56:45.0" UUID="bff7c790-72ea-43a1-97d7-9e7468de5a2d" DOUBTFUL="false" CITATION_ID="5003" RELATEDFROM_ID="5004" RELATEDTO_ID="5002" TYPE_ID="889"/>
40
  <TAXONRELATIONSHIP ID="5005" CREATED="2018-10-01 05:56:45.0" UUID="f257895f-a6f1-4651-9539-f74fb139c730" DOUBTFUL="false" CITATION_ID="5003" RELATEDFROM_ID="5003" RELATEDTO_ID="5002" TYPE_ID="889"/>
41
  <TAXONRELATIONSHIP ID="5006" CREATED="2018-10-01 05:56:45.0" UUID="381e12a5-a218-4c9e-bc92-54b777ce5426" DOUBTFUL="false" CITATION_ID="5007" RELATEDFROM_ID="5007" RELATEDTO_ID="5002" TYPE_ID="889"/>
42
  <TAXONRELATIONSHIP ID="5007" CREATED="2018-10-01 05:56:45.0" UUID="f2519a14-617a-4003-b47d-2c90aaffb054" DOUBTFUL="false" CITATION_ID="5003" RELATEDFROM_ID="5005" RELATEDTO_ID="5004" TYPE_ID="889"/>
43
  <TAXONRELATIONSHIP ID="5008" CREATED="2018-10-01 05:56:45.0" UUID="c23b8751-4152-41cc-961b-f172af343bf0" DOUBTFUL="false" CITATION_ID="5007" RELATEDFROM_ID="5007" RELATEDTO_ID="5006" TYPE_ID="889"/>
31 44
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="AuditEvent" NEXT_VAL="5003"/>
32 45
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="CdmMetaData" NEXT_VAL="5004"/>
33 46
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="GrantedAuthorityImpl" NEXT_VAL="5019"/>
34
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="HomotypicalGroup" NEXT_VAL="5006"/>
47
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="HomotypicalGroup" NEXT_VAL="5008"/>
35 48
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="PermissionGroup" NEXT_VAL="5004"/>
36
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="Reference" NEXT_VAL="5007"/>
37
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonBase" NEXT_VAL="5006"/>
38
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonName" NEXT_VAL="5006"/>
39
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonRelationship" NEXT_VAL="5003"/>
49
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="Reference" NEXT_VAL="5008"/>
50
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonBase" NEXT_VAL="5008"/>
51
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonName" NEXT_VAL="5008"/>
52
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonRelationship" NEXT_VAL="5009"/>
40 53
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="UserAccount" NEXT_VAL="5001"/>
54
  <AUDITEVENT />
41 55
</dataset>
cdmlib-test/src/main/java/eu/etaxonomy/cdm/test/integration/CdmIntegrationTest.java
288 288
     * @param includeTableNames
289 289
     * 		the names of tables to print (should be in upper case letters)
290 290
     */
291
    public void printDataSet(OutputStream out, String[] includeTableNames) {
291
    public void printDataSet(OutputStream out, String ... includeTableNames) {
292 292
        dbTablePrinter.printDataSet(out, includeTableNames);
293 293

  
294 294
    }

Also available in: Unified diff

Add picture from clipboard (Maximum size: 40 MB)