Project

General

Profile

« Previous | Next » 

Revision 83efeb94

Added by Andreas Müller almost 3 years ago

minor issues for StructuredDescriptionAggregationTest

View differences:

cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/QuantitativeData.java
643 643
			//states
644 644
			result.statisticalValues = new HashSet<>();
645 645
			for (StatisticalMeasurementValue data : getStatisticalValues()){
646
				StatisticalMeasurementValue newData = (StatisticalMeasurementValue)data.clone();
646
				StatisticalMeasurementValue newData = data.clone();
647 647
				result.addStatisticalValue(newData);
648 648
			}
649 649

  
......
656 656
		}
657 657
	}
658 658

  
659
//********************** TO STRING **************************************/
660

  
659 661
	@Override
660 662
	public String toString() {
661
        return getFeature()!=null?getFeature().getLabel():""+
663
        return (getFeature()!=null ? getFeature().getLabel(): "") +
662 664
                "[" + statisticalValues +
663
                (unit!=null? ", unit=" +unit:"") +
665
                (unit!=null ? ", unit=" + unit : "") +
664 666
                (unknownData? ", unknownData=" + unknownData:"")
665 667
                + "]";
666 668
	}
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/description/DescriptionAggregationBase.java
253 253
                Set<TaxonDescription> excludedDescriptions = new HashSet<>();
254 254
//            excludedDescriptions.add(targetDescription); //not possible because aggregating from children
255 255
                aggregateToParentTaxon(taxonNode, resultHolder, excludedDescriptions);
256
            }
257
            if (mode == AggregationMode.WithinTaxon){
256
            } else if (mode == AggregationMode.WithinTaxon){
258 257
                Set<TaxonDescription> excludedDescriptions = new HashSet<>();
259 258
                excludedDescriptions.add(targetDescription);
260 259
                aggregateWithinSingleTaxon(taxon, resultHolder, excludedDescriptions);
260
            }else{
261
                throw new IllegalArgumentException("Mode " + mode + " not yet supported");
261 262
            }
262 263
        }
263 264
        addAggregationResultToDescription(targetDescription, resultHolder);
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/description/StructuredDescriptionAggregation.java
211 211
            ResultHolder resultHolder,
212 212
            Set<TaxonDescription> excludedDescriptions) {
213 213
        StructuredDescriptionResultHolder descriptiveResultHolder = (StructuredDescriptionResultHolder)resultHolder;
214
        addDescriptionElement(descriptiveResultHolder, getChildTaxonDescriptions(taxonNode, dataSet));
214
        Set<TaxonDescription> childDescriptions = getChildTaxonDescriptions(taxonNode, dataSet);
215
        addDescriptionElement(descriptiveResultHolder, childDescriptions);
215 216
    }
216 217

  
217 218
    @Override
......
225 226
    private void addDescriptionElement(StructuredDescriptionResultHolder descriptiveResultHolder,
226 227
            Set<? extends DescriptionBase<?>> descriptions) {
227 228
        boolean descriptionWasUsed = false;
228
        for (DescriptionBase<?> desc:descriptions){
229
        for (DescriptionBase<?> desc: descriptions){
229 230
            for (DescriptionElementBase deb: desc.getElements()){
230 231
                if (hasCharacterData(deb)){
231 232
                    if (deb.isInstanceOf(CategoricalData.class)){
......
306 307
        Map<Feature, CategoricalData> categoricalMap = new HashMap<>();
307 308
        Map<Feature, QuantitativeData> quantitativeMap = new HashMap<>();
308 309
        Set<DescriptionBase<?>> sourceDescriptions = new HashSet<>();
310
        @Override
311
        public String toString() {
312
            return "SDResultHolder [categoricals=" + categoricalMap.size() + ", quantitatives="
313
                    + quantitativeMap.size() + ", sourceDescriptions=" + sourceDescriptions.size() + "]";
314
        }
309 315
    }
310 316

  
311
    /*
312
     * Static utility methods
313
     */
314
    private static Set<TaxonDescription> getChildTaxonDescriptions(TaxonNode taxonNode, DescriptiveDataSet dataSet) {
317
    private Set<TaxonDescription> getChildTaxonDescriptions(TaxonNode taxonNode, DescriptiveDataSet dataSet) {
315 318
        Set<TaxonDescription> result = new HashSet<>();
316 319
        List<TaxonNode> childNodes = taxonNode.getChildNodes();
317 320
        for (TaxonNode childNode : childNodes) {
318
            result.addAll(childNode.getTaxon().getDescriptions().stream()
319
            .filter(desc->desc.getTypes().contains(DescriptionType.AGGREGATED_STRUC_DESC))
320
            .filter(desc->dataSet.getDescriptions().contains(desc))
321
            .collect(Collectors.toSet()));
321
            Set<TaxonDescription> childDescriptions = childNode.getTaxon().getDescriptions();
322
            result.addAll(childDescriptions.stream()
323
                .filter(desc->desc.getTypes().contains(DescriptionType.AGGREGATED_STRUC_DESC))
324
                .filter(desc->dataSet.getDescriptions().contains(desc))
325
                .collect(Collectors.toSet()));
322 326
        }
323 327
        return result;
324 328
    }
325 329

  
326
    private static Set<SpecimenDescription> getSpecimenDescriptions(Taxon taxon, DescriptiveDataSet dataSet) {
330
    private Set<SpecimenDescription> getSpecimenDescriptions(Taxon taxon, DescriptiveDataSet dataSet) {
327 331
        Set<SpecimenDescription> result = new HashSet<>();
332
        //TODO performance: use DTO service to retrieve specimen descriptions without initializing all taxon descriptions
328 333
        for (TaxonDescription taxonDesc: taxon.getDescriptions()){
329 334
            for (DescriptionElementBase taxonDeb : taxonDesc.getElements()){
330 335
                if (taxonDeb.isInstanceOf(IndividualsAssociation.class)){
331 336
                    IndividualsAssociation indAss = CdmBase.deproxy(taxonDeb, IndividualsAssociation.class);
332 337
                    SpecimenOrObservationBase<?> specimen = indAss.getAssociatedSpecimenOrObservation();
333
                     Set<SpecimenDescription> descriptions = (Set)specimen.getDescriptions();
334
                     for(SpecimenDescription specimenDescription : descriptions){
335
                         if(dataSet.getDescriptions().contains(specimenDescription) && specimenDescription.getTypes().stream().noneMatch(type->type.equals(DescriptionType.CLONE_FOR_SOURCE))){
336
                             result.add(specimenDescription);
337
                         }
338
                     }
338
                    @SuppressWarnings({ "unchecked", "rawtypes" })
339
                    Set<SpecimenDescription> descriptions = (Set)specimen.getDescriptions();
340
                    for(SpecimenDescription specimenDescription : descriptions){
341
                        if(dataSet.getDescriptions().contains(specimenDescription) &&
342
                                specimenDescription.getTypes().stream().noneMatch(type->type.equals(DescriptionType.CLONE_FOR_SOURCE))){
343
                            result.add(specimenDescription);
344
                        }
345
                    }
339 346
                }
340 347
            }
341 348
        }
......
369 376
    }
370 377

  
371 378
    private QuantitativeData handleMissingValues(QuantitativeData qd) {
379
        //min max
372 380
        qd = handleMissingMinOrMax(qd);
381
        //average
373 382
        if (qd != null && qd.getAverage() == null){
374 383
            BigDecimal n = qd.getSampleSize();
375 384
            if(n != null && !n.equals(0f)){
376
                qd.setAverage((qd.getMax().add(qd.getMin())).divide(n), null);
385
                BigDecimal average = (qd.getMax().add(qd.getMin())).divide(n);
386
                qd.setAverage(average, null);
377 387
            }
378 388
        }
379 389
        return qd;
......
407 417

  
408 418
    private QuantitativeData mergeQuantitativeData(QuantitativeData aggQd, QuantitativeData newQd) {
409 419

  
410
        newQd = aggregateSingleQuantitativeData(newQd); //alternatively we could check, if newQd is already basically aggregated, but for this we need a cleear definition what the minimum requirements are and how ExactValues and MinMax if existing in parallel should be handled.
420
        newQd = aggregateSingleQuantitativeData(newQd); //alternatively we could check, if newQd is already basically aggregated, but for this we need a clear definition what the minimum requirements are and how ExactValues and MinMax if existing in parallel should be handled.
411 421

  
412 422
        BigDecimal min = null;
413 423
        BigDecimal max = null;
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/description/StructuredDescriptionAggregationConfiguration.java
25 25

  
26 26
    private UUID datasetUuid;
27 27

  
28

  
29 28
    //TODO merge with DistributionAggregationConfiguration.aggregationMode
30 29
    private boolean aggregateToHigherRanks;
31 30

  
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/description/StructuredDescriptionAggregationTest.java
141 141
        engine = new StructuredDescriptionAggregation();
142 142
        engine.setBatchMinFreeHeap(100 * 1024 * 1024);
143 143
        monitor = DefaultProgressMonitor.NewInstance();
144

  
145 144
    }
146 145

  
147

  
148 146
    @Test
149 147
    @DataSets({
150 148
        @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/ClearDB_with_Terms_DataSet.xml"),
......
308 306

  
309 307
    private DescriptiveDataSet createTestDataset() {
310 308
        DescriptiveDataSet dataSet = DescriptiveDataSet.NewInstance();
309
        dataSet.setLabel("Test dataset");
311 310
        datasetService.save(dataSet);
312 311

  
313 312
        SpecimenDescription specDescAlpina1 = createSpecimenDescription(dataSet, T_LAPSANA_COMMUNIS_ALPINA_UUID, "alpina specimen1");
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/description/StructuredDescriptionAggregationTest.xml
5 5
  <TAXONBASE DTYPE="Taxon" ID="5002" UUID="441a3c40-0c84-11de-8c30-0800200c9a66" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. communis sec. ???"    DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5002"/>
6 6
  <TAXONBASE DTYPE="Taxon" ID="5003" UUID="e4acf200-63b6-11dd-ad8b-0800200c9a66" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. adenophora sec. ???"  DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5003"/>
7 7
  <TAXONBASE DTYPE="Taxon" ID="5004" UUID="596b1325-be50-4b0a-9aa2-3ecd610215f2" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. alpina sec. ???"      DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" NAME_ID="5004"/>
8
  <TAXONNAME ID="5000" UUID="99e31a2d-36aa-4d5f-adce-c4a6ba27c6cb" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="Lapsana" FULLTITLECACHE="Lapsana" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
9
  <TAXONNAME ID="5001" UUID="cd2335d1-2d7c-437e-b4d5-1f450ce0d380" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis" FULLTITLECACHE="L. communis" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
10
  <TAXONNAME ID="5002" UUID="c9a5631c-20b0-477b-890b-fb11c7e7a083" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. communis" FULLTITLECACHE="L. communis subsp. communis" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="subsp." PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
11
  <TAXONNAME ID="5003" UUID="494224de-a70c-4d06-a579-5b8ca2c3559b" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. adenophora" FULLTITLECACHE="L. communis subsp. adenophora" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="subsp." PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
12
  <TAXONNAME ID="5004" UUID="ba953d05-53e5-46ff-8d80-8cccb2cc5f9d" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. alpina" FULLTITLECACHE="L. communis subsp. alpina" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="subsp." PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
13
  <CLASSIFICATION ID="5000" UUID="4b266053-a841-4980-b548-3f21d8d7d712" UPDATED="2019-11-26 13:23:34.183" PROTECTEDTITLECACHE="false" TITLECACHE="TestClassification" NAME_ID="5000" ROOTNODE_ID="5000"/>
14
  <TAXONNODE ID="5000" UUID="d7ecc004-5291-4b9d-9573-f5537576f39c" UPDATED="2019-11-26 13:23:34.184" SORTINDEX="-1" TREEINDEX="#t5000#5000#" COUNTCHILDREN="1" CLASSIFICATION_ID="5000" PARENT_ID="[null]" TAXON_ID="[null]"/>
15
  <TAXONNODE ID="5001" UUID="f4d29e9f-6484-4184-af2e-9704e96a17e3" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#" COUNTCHILDREN="1" CLASSIFICATION_ID="5000" PARENT_ID="5000" TAXON_ID="5000"/>
16
  <TAXONNODE ID="5002" UUID="de98cbfe-f4c9-4e15-8b31-88a8bf128e5a" UPDATED="2019-11-26 13:23:34.184" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#5002#" COUNTCHILDREN="3" CLASSIFICATION_ID="5000" PARENT_ID="5001" TAXON_ID="5001"/>
17
  <TAXONNODE ID="5003" UUID="c6b28358-ecc6-4ca7-8384-57c5a5c7d8eb" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#5002#5003#" COUNTCHILDREN="0" CLASSIFICATION_ID="5000" PARENT_ID="5002" TAXON_ID="5002"/>
18
  <TAXONNODE ID="5004" UUID="13988b44-e363-44e5-9495-479eb4415245" SORTINDEX="1" TREEINDEX="#t5000#5000#5001#5002#5004#" COUNTCHILDREN="0" CLASSIFICATION_ID="5000" PARENT_ID="5002" TAXON_ID="5003"/>
19
  <TAXONNODE ID="5005" UUID="d7ef7e1d-04b4-4169-bded-cce72984a824" SORTINDEX="2" TREEINDEX="#t5000#5000#5001#5002#5005#" COUNTCHILDREN="0" CLASSIFICATION_ID="5000" PARENT_ID="5002" TAXON_ID="5004"/>
20
  <REFERENCE ID="5000" UUID="cd499064-af81-4df7-83ed-854f7888edd0" PROTECTEDTITLECACHE="true" TITLECACHE="Sp.Pl." NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" TITLE="[null]" ABBREVTITLECACHE="Sp.Pl." PROTECTEDABBREVTITLECACHE="false" REFTYPE="DB" />
21
  <REFERENCE ID="5001" UUID="c3218a0e-b2cc-4bb9-8ced-8faaf635beca" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 0, uuid=c3218a0e-b2cc-4bb9-8ced-8faaf635beca]" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" TITLE="[null]" ABBREVTITLECACHE="Reference [type=Book, id= 0, uuid=c3218a0e-b2cc-4bb9-8ced-8faaf635beca]" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
8
  <TAXONNAME ID="5000" UUID="99e31a2d-36aa-4d5f-adce-c4a6ba27c6cb" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="Lapsana"     FULLTITLECACHE="Lapsana"     PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
9
  <TAXONNAME ID="5001" UUID="cd2335d1-2d7c-437e-b4d5-1f450ce0d380" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis" FULLTITLECACHE="L. communis" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
10
  <TAXONNAME ID="5002" UUID="c9a5631c-20b0-477b-890b-fb11c7e7a083" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. communis"   FULLTITLECACHE="L. communis subsp. communis"   PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="subsp." PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
11
  <TAXONNAME ID="5003" UUID="494224de-a70c-4d06-a579-5b8ca2c3559b" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. adenophora" FULLTITLECACHE="L. communis subsp. adenophora" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="subsp." PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
12
  <TAXONNAME ID="5004" UUID="ba953d05-53e5-46ff-8d80-8cccb2cc5f9d" NAMETYPE="ICNAFP" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. alpina"     FULLTITLECACHE="L. communis subsp. alpina"     PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" NAMECACHE="subsp." PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
13
  <CLASSIFICATION ID="5000" UUID="4b266053-a841-4980-b548-3f21d8d7d712" PROTECTEDTITLECACHE="false" TITLECACHE="TestClassification" NAME_ID="5000" ROOTNODE_ID="5000"/>
14
  <TAXONNODE ID="5000" UUID="d7ecc004-5291-4b9d-9573-f5537576f39c" SORTINDEX="-1" TREEINDEX="#t5000#5000#"                COUNTCHILDREN="1" CLASSIFICATION_ID="5000"/>
15
  <TAXONNODE ID="5001" UUID="f4d29e9f-6484-4184-af2e-9704e96a17e3" SORTINDEX="0"  TREEINDEX="#t5000#5000#5001#"           COUNTCHILDREN="1" CLASSIFICATION_ID="5000" PARENT_ID="5000" TAXON_ID="5000"/>
16
  <TAXONNODE ID="5002" UUID="de98cbfe-f4c9-4e15-8b31-88a8bf128e5a" SORTINDEX="0"  TREEINDEX="#t5000#5000#5001#5002#"      COUNTCHILDREN="3" CLASSIFICATION_ID="5000" PARENT_ID="5001" TAXON_ID="5001"/>
17
  <TAXONNODE ID="5003" UUID="c6b28358-ecc6-4ca7-8384-57c5a5c7d8eb" SORTINDEX="0"  TREEINDEX="#t5000#5000#5001#5002#5003#" COUNTCHILDREN="0" CLASSIFICATION_ID="5000" PARENT_ID="5002" TAXON_ID="5002"/>
18
  <TAXONNODE ID="5004" UUID="13988b44-e363-44e5-9495-479eb4415245" SORTINDEX="1"  TREEINDEX="#t5000#5000#5001#5002#5004#" COUNTCHILDREN="0" CLASSIFICATION_ID="5000" PARENT_ID="5002" TAXON_ID="5003"/>
19
  <TAXONNODE ID="5005" UUID="d7ef7e1d-04b4-4169-bded-cce72984a824" SORTINDEX="2"  TREEINDEX="#t5000#5000#5001#5002#5005#" COUNTCHILDREN="0" CLASSIFICATION_ID="5000" PARENT_ID="5002" TAXON_ID="5004"/>
20
  <REFERENCE ID="5000" UUID="cd499064-af81-4df7-83ed-854f7888edd0" PROTECTEDTITLECACHE="true" TITLECACHE="Sp.Pl."  NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="Sp.Pl." PROTECTEDABBREVTITLECACHE="false" REFTYPE="DB" />
21
  <REFERENCE ID="5001" UUID="c3218a0e-b2cc-4bb9-8ced-8faaf635beca" PROTECTEDTITLECACHE="true" TITLECACHE="My Book" NOMENCLATURALLYRELEVANT="false" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" ABBREVTITLECACHE="My Bk." PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK"/>
22 22
  <LANGUAGESTRING ID="5000" UUID="abb4c80f-2203-4544-8e37-1fef1e41f498" TEXT="TestClassification" LANGUAGE_ID="406"/>
23
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="AuditEvent" NEXT_VAL="5003"/>
24
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="CdmMetaData" NEXT_VAL="5004"/>
25
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="Classification" NEXT_VAL="5001"/>
26
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="GrantedAuthorityImpl" NEXT_VAL="5021"/>
27
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="HomotypicalGroup" NEXT_VAL="5005"/>
28
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="LanguageString" NEXT_VAL="5001"/>
29
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="PermissionGroup" NEXT_VAL="5004"/>
30
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="Reference" NEXT_VAL="5002"/>
31
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonBase" NEXT_VAL="5005"/>
32
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonName" NEXT_VAL="5005"/>
33
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonNode" NEXT_VAL="5006"/>
34
  <HIBERNATE_SEQUENCES SEQUENCE_NAME="UserAccount" NEXT_VAL="5001"/>
35 23
</dataset>

Also available in: Unified diff