Revision f5295f3f
Added by Andreas Kohlbecker almost 8 years ago
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/OriginalSourceBase.java | ||
---|---|---|
150 | 150 |
} |
151 | 151 |
} |
152 | 152 |
|
153 |
//*********************************** EQUALS *********************************************************/ |
|
154 |
|
|
155 |
/** |
|
156 |
* {@inheritDoc} |
|
157 |
*/ |
|
158 |
@Override |
|
159 |
public boolean equalsByShallowCompare(ReferencedEntityBase other) { |
|
160 |
|
|
161 |
if(!super.equalsByShallowCompare(other)) { |
|
162 |
return false; |
|
163 |
} |
|
164 |
OriginalSourceBase<T> theOther = (OriginalSourceBase<T>)other; |
|
165 |
if(!StringUtils.equals(this.getIdInSource(), theOther.getIdInSource()) |
|
166 |
|| !StringUtils.equals(this.getIdNamespace(), theOther.getIdNamespace())) { |
|
167 |
return false; |
|
168 |
} |
|
169 |
|
|
170 |
return true; |
|
171 |
} |
|
172 |
|
|
153 | 173 |
} |
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ReferencedEntityBase.java | ||
---|---|---|
21 | 21 |
import javax.xml.bind.annotation.XmlSchemaType; |
22 | 22 |
import javax.xml.bind.annotation.XmlType; |
23 | 23 |
|
24 |
import org.apache.commons.lang.StringUtils; |
|
24 | 25 |
import org.apache.log4j.Logger; |
25 | 26 |
import org.hibernate.annotations.Cascade; |
26 | 27 |
import org.hibernate.annotations.CascadeType; |
... | ... | |
118 | 119 |
return result; |
119 | 120 |
} |
120 | 121 |
|
122 |
//*********************************** EQUALS *********************************************************/ |
|
123 |
|
|
124 |
/** |
|
125 |
* Indicates whether some other object is "equal to" this one. |
|
126 |
* |
|
127 |
* Uses a content based compare strategy which avoids bean initialization. This is achieved by |
|
128 |
* comparing the cdm entity ids. |
|
129 |
* |
|
130 |
* @param other |
|
131 |
* @return |
|
132 |
*/ |
|
133 |
public boolean equalsByShallowCompare(ReferencedEntityBase other) { |
|
134 |
|
|
135 |
if(this.getCitation().getId() != other.getCitation().getId() |
|
136 |
|| !StringUtils.equals(this.getCitationMicroReference(), other.getCitationMicroReference()) |
|
137 |
|| !StringUtils.equals(this.getOriginalNameString(), other.getOriginalNameString()) |
|
138 |
){ |
|
139 |
return false; |
|
140 |
} |
|
141 |
|
|
142 |
return true; |
|
143 |
} |
|
144 |
|
|
145 |
|
|
121 | 146 |
} |
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/DescriptionElementSource.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
import eu.etaxonomy.cdm.model.common.OriginalSourceBase; |
27 | 27 |
import eu.etaxonomy.cdm.model.common.OriginalSourceType; |
28 |
import eu.etaxonomy.cdm.model.common.ReferencedEntityBase; |
|
28 | 29 |
import eu.etaxonomy.cdm.model.name.TaxonNameBase; |
29 | 30 |
import eu.etaxonomy.cdm.model.reference.Reference; |
30 | 31 |
|
... | ... | |
163 | 164 |
return result; |
164 | 165 |
} |
165 | 166 |
|
167 |
//*********************************** EQUALS *********************************************************/ |
|
168 |
|
|
169 |
/** |
|
170 |
* {@inheritDoc} |
|
171 |
*/ |
|
172 |
@Override |
|
173 |
public boolean equalsByShallowCompare(ReferencedEntityBase other) { |
|
174 |
|
|
175 |
if(!super.equalsByShallowCompare(other)) { |
|
176 |
return false; |
|
177 |
} |
|
178 |
|
|
179 |
int a = -1; |
|
180 |
int b = -1; |
|
181 |
if(this.getNameUsedInSource() != null) { |
|
182 |
a = this.getNameUsedInSource().getId(); |
|
183 |
} |
|
184 |
DescriptionElementSource otherDescriptionElementSource = (DescriptionElementSource)other; |
|
185 |
if(otherDescriptionElementSource.getNameUsedInSource() != null) { |
|
186 |
b = otherDescriptionElementSource.getNameUsedInSource().getId(); |
|
187 |
} |
|
188 |
return a == b; |
|
189 |
} |
|
166 | 190 |
|
167 | 191 |
|
168 | 192 |
} |
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/description/TransmissionEngineDistribution.java | ||
---|---|---|
19 | 19 |
import java.util.Set; |
20 | 20 |
import java.util.UUID; |
21 | 21 |
|
22 |
import org.apache.log4j.Level; |
|
23 | 22 |
import org.apache.log4j.Logger; |
24 | 23 |
import org.hibernate.FlushMode; |
25 | 24 |
import org.hibernate.HibernateException; |
... | ... | |
244 | 243 |
* |
245 | 244 |
* @param a |
246 | 245 |
* @param b |
246 |
* @param sourcesForWinnerB |
|
247 |
* In the case when <code>b</code> is preferred over <code>a</code> these Set of sources will be added to the sources of <code>b</code> |
|
247 | 248 |
* @return |
248 | 249 |
*/ |
249 |
private StatusAndSources choosePreferred(StatusAndSources a, StatusAndSources b){ |
|
250 |
private StatusAndSources choosePreferred(StatusAndSources a, StatusAndSources b, Set<DescriptionElementSource> sourcesForWinnerB){
|
|
250 | 251 |
|
251 | 252 |
if (statusPriorityMap == null) { |
252 | 253 |
initializeStatusPriorityMap(); |
... | ... | |
268 | 269 |
return a; |
269 | 270 |
} |
270 | 271 |
if(statusPriorityMap.get(a.status) < statusPriorityMap.get(b.status)){ |
272 |
if(sourcesForWinnerB != null) { |
|
273 |
b.addSources(sourcesForWinnerB); |
|
274 |
} |
|
271 | 275 |
return b; |
272 | 276 |
} else if (statusPriorityMap.get(a.status) == statusPriorityMap.get(b.status)){ |
273 |
a.sources.addAll(b.sources);
|
|
277 |
a.addSources(b.sources);
|
|
274 | 278 |
return a; |
275 | 279 |
} else { |
276 | 280 |
return a; |
... | ... | |
335 | 339 |
|
336 | 340 |
|
337 | 341 |
// only for debugging: |
338 |
logger.setLevel(Level.DEBUG); // TRACE will slow down a lot since it forces loading all term representations
|
|
342 |
//logger.setLevel(Level.TRACE); // TRACE will slow down a lot since it forces loading all term representations
|
|
339 | 343 |
//Logger.getLogger("org.hibernate.SQL").setLevel(Level.DEBUG); |
340 | 344 |
|
341 | 345 |
logger.info("Hibernate JDBC Batch size: " |
... | ... | |
481 | 485 |
continue; |
482 | 486 |
} |
483 | 487 |
StatusAndSources subStatusAndSources = new StatusAndSources(status, distribution.getSources()); |
484 |
accumulatedStatusAndSources = choosePreferred(accumulatedStatusAndSources, subStatusAndSources); |
|
488 |
accumulatedStatusAndSources = choosePreferred(accumulatedStatusAndSources, subStatusAndSources, null);
|
|
485 | 489 |
} |
486 | 490 |
} |
487 | 491 |
} // next sub area |
... | ... | |
491 | 495 |
} |
492 | 496 |
// store new distribution element for superArea in taxon description |
493 | 497 |
Distribution newDistribitionElement = Distribution.NewInstance(superArea, accumulatedStatusAndSources.status); |
498 |
newDistribitionElement.getSources().addAll(accumulatedStatusAndSources.sources); |
|
494 | 499 |
newDistribitionElement.addMarker(Marker.NewInstance(MarkerType.COMPUTED(), true)); |
495 | 500 |
description.addElement(newDistribitionElement); |
496 | 501 |
} |
... | ... | |
520 | 525 |
} |
521 | 526 |
|
522 | 527 |
/** |
523 |
* Step 2: Accumulate by ranks staring from lower rank to upper rank, the status of all children |
|
528 |
* Step 2: Accumulate by ranks starting from lower rank to upper rank, the status of all children
|
|
524 | 529 |
* are accumulated on each rank starting from lower rank to upper rank. |
525 | 530 |
* <ul> |
526 | 531 |
* <li>aggregate distribution of included taxa of the next lower rank for any rank level starting from the lower rank (e.g. sub species) |
... | ... | |
566 | 571 |
while (taxonIdIterator.hasNext()) { |
567 | 572 |
|
568 | 573 |
if(txStatus == null) { |
569 |
// transaction has been comitted at the end of this batch, start a new one |
|
574 |
// transaction has been committed at the end of this batch, start a new one
|
|
570 | 575 |
txStatus = startTransaction(false); |
571 | 576 |
} |
572 | 577 |
|
... | ... | |
624 | 629 |
} |
625 | 630 |
|
626 | 631 |
StatusAndSources subStatusAndSources = new StatusAndSources(status, distribution.getSources()); |
627 |
accumulatedStatusMap.put(area, choosePreferred(accumulatedStatusMap.get(area), subStatusAndSources)); |
|
632 |
accumulatedStatusMap.put(area, choosePreferred(accumulatedStatusMap.get(area), subStatusAndSources, null));
|
|
628 | 633 |
} |
629 | 634 |
} |
630 | 635 |
|
631 | 636 |
if(accumulatedStatusMap.size() > 0) { |
632 | 637 |
TaxonDescription description = findComputedDescription(taxon, doClearDescriptions); |
633 | 638 |
for (NamedArea area : accumulatedStatusMap.keySet()) { |
634 |
// store new distribution element in new Description |
|
635 |
Distribution newDistribitionElement = Distribution.NewInstance(area, accumulatedStatusMap.get(area).status); |
|
636 |
newDistribitionElement.addMarker(Marker.NewInstance(MarkerType.COMPUTED(), true)); |
|
637 |
description.addElement(newDistribitionElement); |
|
639 |
Distribution distribition = findDistribution(description, area, accumulatedStatusMap.get(area).status); |
|
640 |
if(distribition == null) { |
|
641 |
// create a new distribution element |
|
642 |
distribition = Distribution.NewInstance(area, accumulatedStatusMap.get(area).status); |
|
643 |
distribition.addMarker(Marker.NewInstance(MarkerType.COMPUTED(), true)); |
|
644 |
} |
|
645 |
addSourcesDeduplicated(distribition.getSources(), accumulatedStatusMap.get(area).sources); |
|
646 |
|
|
647 |
description.addElement(distribition); |
|
638 | 648 |
} |
639 | 649 |
taxonService.saveOrUpdate(taxon); |
640 | 650 |
descriptionService.saveOrUpdate(description); |
... | ... | |
670 | 680 |
subMonitor.done(); |
671 | 681 |
} |
672 | 682 |
|
683 |
/** |
|
684 |
* @param description |
|
685 |
* @param area |
|
686 |
* @param status |
|
687 |
* @return |
|
688 |
*/ |
|
689 |
private Distribution findDistribution(TaxonDescription description, NamedArea area, PresenceAbsenceTerm status) { |
|
690 |
for(DescriptionElementBase item : description.getElements()) { |
|
691 |
if(!(item instanceof Distribution)) { |
|
692 |
continue; |
|
693 |
} |
|
694 |
Distribution distribution = ((Distribution)item); |
|
695 |
if(distribution.getArea().equals(area) && distribution.getStatus().equals(status)) { |
|
696 |
return distribution; |
|
697 |
} |
|
698 |
} |
|
699 |
return null; |
|
700 |
} |
|
701 |
|
|
673 | 702 |
/** |
674 | 703 |
* @param lowerRank |
675 | 704 |
* @param upperRank |
... | ... | |
927 | 956 |
commitTransaction(txStatus); |
928 | 957 |
} |
929 | 958 |
|
959 |
public static void addSourcesDeduplicated(Set<DescriptionElementSource> target, Set<DescriptionElementSource> sources) { |
|
960 |
for(DescriptionElementSource source : sources) { |
|
961 |
boolean contained = false; |
|
962 |
for(DescriptionElementSource existingSource: target) { |
|
963 |
if(existingSource.equalsByShallowCompare(source)) { |
|
964 |
contained = true; |
|
965 |
break; |
|
966 |
} |
|
967 |
} |
|
968 |
if(!contained) { |
|
969 |
try { |
|
970 |
target.add((DescriptionElementSource)source.clone()); |
|
971 |
} catch (CloneNotSupportedException e) { |
|
972 |
// should never happen |
|
973 |
throw new RuntimeException(e); |
|
974 |
} |
|
975 |
} |
|
976 |
} |
|
977 |
} |
|
978 |
|
|
930 | 979 |
public enum AggregationMode { |
931 | 980 |
byAreas, |
932 | 981 |
byRanks, |
... | ... | |
936 | 985 |
|
937 | 986 |
private class StatusAndSources { |
938 | 987 |
|
939 |
PresenceAbsenceTerm status; |
|
988 |
private final PresenceAbsenceTerm status;
|
|
940 | 989 |
|
941 |
Set<DescriptionElementSource> sources = new HashSet<>(); |
|
990 |
private final Set<DescriptionElementSource> sources = new HashSet<>();
|
|
942 | 991 |
|
943 | 992 |
public StatusAndSources(PresenceAbsenceTerm status, Set<DescriptionElementSource> sources) { |
944 | 993 |
this.status = status; |
945 |
this.sources = sources;
|
|
994 |
addSourcesDeduplicated(this.sources, sources);
|
|
946 | 995 |
} |
996 |
|
|
997 |
/** |
|
998 |
* @param sources |
|
999 |
*/ |
|
1000 |
public void addSources(Set<DescriptionElementSource> sources) { |
|
1001 |
addSourcesDeduplicated(this.sources, sources); |
|
1002 |
} |
|
1003 |
|
|
947 | 1004 |
} |
948 | 1005 |
} |
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TransmissionEngineDistributionTest.java | ||
---|---|---|
12 | 12 |
import static org.junit.Assert.assertEquals; |
13 | 13 |
import static org.junit.Assert.assertNotNull; |
14 | 14 |
import static org.junit.Assert.assertNull; |
15 |
import static org.junit.Assert.assertTrue; |
|
15 | 16 |
|
16 | 17 |
import java.io.FileNotFoundException; |
17 | 18 |
import java.util.Arrays; |
19 |
import java.util.Collection; |
|
20 |
import java.util.HashSet; |
|
21 |
import java.util.Iterator; |
|
18 | 22 |
import java.util.List; |
19 | 23 |
import java.util.Set; |
20 | 24 |
import java.util.UUID; |
... | ... | |
53 | 57 |
*/ |
54 | 58 |
public class TransmissionEngineDistributionTest extends CdmTransactionalIntegrationTest { |
55 | 59 |
|
56 |
@SuppressWarnings("unused") |
|
57 | 60 |
private static Logger logger = Logger.getLogger(TransmissionEngineDistributionTest.class); |
58 | 61 |
|
59 | 62 |
private static final UUID T_LAPSANA_UUID = UUID.fromString("f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8"); |
... | ... | |
105 | 108 |
|
106 | 109 |
private Classification classification; |
107 | 110 |
|
111 |
private Reference book_a = null; |
|
112 |
private Reference book_b = null; |
|
113 |
|
|
108 | 114 |
|
109 | 115 |
@Before |
110 | 116 |
public void setUp() { |
... | ... | |
124 | 130 |
yug_ma = termService.getAreaByTdwgAbbreviation("YUG-MA"); |
125 | 131 |
yug_mn = termService.getAreaByTdwgAbbreviation("YUG-MN"); |
126 | 132 |
|
133 |
book_a = ReferenceFactory.newBook(); |
|
134 |
book_a.setTitle("book_a"); |
|
135 |
book_b = ReferenceFactory.newBook(); |
|
136 |
book_b.setTitle("book_a"); |
|
137 |
|
|
127 | 138 |
engine.updatePriorities(); |
128 | 139 |
} |
129 | 140 |
|
... | ... | |
146 | 157 |
|
147 | 158 |
addDistributions( |
148 | 159 |
T_LAPSANA_COMMUNIS_ALPINA_UUID, |
149 |
new Distribution[] { |
|
160 |
Arrays.asList(new Distribution[] {
|
|
150 | 161 |
// should succeed during area aggregation be ignored by rank aggregation |
151 | 162 |
// => yug will get status ENDEMIC_FOR_THE_RELEVANT_AREA |
152 | 163 |
// but only for LAPSANA_COMMUNIS_ALPINA |
... | ... | |
154 | 165 |
// should be ignored by area aggregation |
155 | 166 |
// => LAPSANA_COMMUNIS will wave distribution with yug_ko and INTRODUCED_FORMERLY_INTRODUCED |
156 | 167 |
Distribution.NewInstance(yug_ko, PresenceAbsenceTerm.INTRODUCED_FORMERLY_INTRODUCED()), |
157 |
} |
|
168 |
})
|
|
158 | 169 |
); |
159 | 170 |
|
160 | 171 |
engine.accumulate(AggregationMode.byAreasAndRanks, superAreas, lowerRank, upperRank, null, null); |
... | ... | |
186 | 197 |
}) |
187 | 198 |
public void testArea_area() { |
188 | 199 |
|
189 |
Distribution[] distributions = new Distribution[4]; |
|
190 |
|
|
191 |
Reference book_LCA_yug_mn = ReferenceFactory.newBook(); |
|
192 |
book_LCA_yug_mn.setTitle("LCA_yug_mn"); |
|
193 |
DescriptionElementSource.NewPrimarySourceInstance(book_LCA_yug_mn, "1"); |
|
194 |
distributions[0] = Distribution.NewInstance(yug_mn, PresenceAbsenceTerm.CULTIVATED()); |
|
200 |
Set<Distribution> distributions_LCA = new HashSet<>(); |
|
195 | 201 |
|
196 |
Reference book_LCA_yug_ko = ReferenceFactory.newBook(); |
|
197 |
book_LCA_yug_mn.setTitle("LCA_yug_ko"); |
|
198 |
DescriptionElementSource.NewPrimarySourceInstance(book_LCA_yug_ko, "2"); |
|
199 |
distributions[1] = Distribution.NewInstance(yug_ko, PresenceAbsenceTerm.NATIVE()); // NATIVE should succeed |
|
200 |
|
|
201 |
Reference book_LCA_yug_bh = ReferenceFactory.newBook(); |
|
202 |
book_LCA_yug_mn.setTitle("LCA_yug_bh"); |
|
203 |
DescriptionElementSource.NewPrimarySourceInstance(book_LCA_yug_bh, "3"); |
|
204 |
distributions[2] = Distribution.NewInstance(yug_bh, PresenceAbsenceTerm.INTRODUCED()); |
|
205 |
|
|
206 |
Reference book_LCA_yug_ma = ReferenceFactory.newBook(); |
|
207 |
book_LCA_yug_mn.setTitle("LCA_yug_ma"); |
|
208 |
DescriptionElementSource.NewPrimarySourceInstance(book_LCA_yug_ma, "4"); |
|
209 |
distributions[3] = Distribution.NewInstance(yug_ma, PresenceAbsenceTerm.NATIVE()); // NATIVE should succeed |
|
202 |
distributions_LCA.add(newDistribution(book_a, yug_mn, PresenceAbsenceTerm.CULTIVATED(), "1")); |
|
203 |
distributions_LCA.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "2")); // NATIVE should succeed |
|
204 |
distributions_LCA.add(newDistribution(book_a, yug_bh, PresenceAbsenceTerm.INTRODUCED(), "3")); |
|
205 |
distributions_LCA.add(newDistribution(book_a, yug_ma, PresenceAbsenceTerm.NATIVE(), "4")); // NATIVE should succeed |
|
210 | 206 |
|
211 | 207 |
addDistributions( |
212 | 208 |
T_LAPSANA_COMMUNIS_ALPINA_UUID, |
213 |
distributions |
|
209 |
distributions_LCA
|
|
214 | 210 |
); |
215 | 211 |
|
216 | 212 |
Taxon lapsana_communis_alpina = (Taxon) taxonService.load(T_LAPSANA_COMMUNIS_ALPINA_UUID); |
... | ... | |
225 | 221 |
for (TaxonDescription description : lapsana_communis_alpina.getDescriptions()) { |
226 | 222 |
if(description.hasMarker(MarkerType.COMPUTED(), true)) { |
227 | 223 |
assertNull("only one computed Distribution should exists", accumulatedDistribution); |
228 |
assertEquals("the computed Decription should have only one element", 1, description.getElements().size()); |
|
224 |
assertEquals("the computed Decsription should have only one element", 1, description.getElements().size());
|
|
229 | 225 |
accumulatedDistribution = (Distribution) description.getElements().iterator().next(); |
230 | 226 |
assertEquals("Expecting area to be YUG", yug, accumulatedDistribution.getArea()); |
231 | 227 |
assertEquals("Expecting status to be NATIVE", PresenceAbsenceTerm.NATIVE().getLabel(), accumulatedDistribution.getStatus().getLabel()); |
232 | 228 |
} |
233 | 229 |
} |
234 | 230 |
assertNotNull("The area YUG should have been found", accumulatedDistribution); |
235 |
// assertEquals("Expecting two source references", accumulatedDistribution.getSources().size()); |
|
236 |
// assertTrue(accumulatedDistribution.getSources().contains(book_LCA_yug_ko)); |
|
237 |
// assertTrue(accumulatedDistribution.getSources().contains(book_LCA_yug_ma)); |
|
231 |
assertEquals("Expecting two source references", 2, accumulatedDistribution.getSources().size()); |
|
232 |
Iterator<DescriptionElementSource> sourceIt = accumulatedDistribution.getSources().iterator(); |
|
233 |
// should contain source_LCA_yug_ma and source_LCA_yug_ko, testing the microreference which is unique in the tests |
|
234 |
assertTrue(" 2 4 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
235 |
assertTrue(" 2 4 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
238 | 236 |
} |
239 | 237 |
|
240 | 238 |
@Test |
241 | 239 |
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class) |
242 |
public void testArea_rank_and_area() { |
|
240 |
public void testArea_rank_and_area_1() { |
|
241 |
|
|
242 |
Set<Distribution> distributions_LCA = new HashSet<>(); |
|
243 |
distributions_LCA.add(newDistribution(book_a, yug_mn, PresenceAbsenceTerm.CULTIVATED(), "1")); |
|
244 |
distributions_LCA.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "2")); // NATIVE should succeed |
|
243 | 245 |
|
244 | 246 |
addDistributions( |
245 | 247 |
T_LAPSANA_COMMUNIS_ALPINA_UUID, |
246 |
new Distribution[] { |
|
247 |
Distribution.NewInstance(yug_mn, PresenceAbsenceTerm.CULTIVATED()), |
|
248 |
Distribution.NewInstance(yug_ko, PresenceAbsenceTerm.NATIVE()), // should succeed |
|
249 |
} |
|
248 |
distributions_LCA |
|
250 | 249 |
); |
250 |
|
|
251 |
Set<Distribution> distributions_LC = new HashSet<>(); |
|
252 |
distributions_LC.add(newDistribution(book_a, yug_mn, PresenceAbsenceTerm.CULTIVATED(), "3")); |
|
253 |
distributions_LC.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "4")); // NATIVE should succeed |
|
254 |
|
|
255 |
commitAndStartNewTransaction(null); |
|
256 |
|
|
251 | 257 |
addDistributions( |
252 | 258 |
T_LAPSANA_COMMUNIS_UUID, |
253 |
new Distribution[] { |
|
254 |
Distribution.NewInstance(yug_mn, PresenceAbsenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION()), |
|
255 |
Distribution.NewInstance(yug_ko, PresenceAbsenceTerm.CULTIVATED()), |
|
256 |
} |
|
259 |
distributions_LC |
|
257 | 260 |
); |
258 | 261 |
|
259 | 262 |
engine.accumulate(AggregationMode.byAreasAndRanks, superAreas, lowerRank, upperRank, null, null); |
260 | 263 |
|
261 | 264 |
Taxon lapsana_communis = (Taxon) taxonService.load(T_LAPSANA_COMMUNIS_UUID); |
262 |
assertEquals(2, lapsana_communis.getDescriptions().size()); |
|
265 |
assertEquals("Lapsana communis alpina must only have 2 Descriptions", 2, lapsana_communis.getDescriptions().size());
|
|
263 | 266 |
|
264 | 267 |
Taxon lapsana = (Taxon) taxonService.load(T_LAPSANA_UUID); |
265 |
assertEquals(1, lapsana.getDescriptions().size()); |
|
268 |
assertEquals("Lapsana communis must only have 1 Description", 1, lapsana.getDescriptions().size());
|
|
266 | 269 |
TaxonDescription description = lapsana.getDescriptions().iterator().next(); |
270 |
assertTrue(description.hasMarker(MarkerType.COMPUTED(), true)); |
|
267 | 271 |
assertEquals(3, description.getElements().size()); |
268 | 272 |
int numExpectedFound = 0; |
269 | 273 |
for (DescriptionElementBase element : description.getElements()){ |
... | ... | |
271 | 275 |
if(distribution.getArea().equals(yug)){ |
272 | 276 |
numExpectedFound++; |
273 | 277 |
assertEquals("aggregated status of area YUG is wrong", PresenceAbsenceTerm.NATIVE().getLabel(), distribution.getStatus().getLabel()); |
278 |
assertEquals(2, distribution.getSources().size()); |
|
279 |
Iterator<DescriptionElementSource> sourceIt = distribution.getSources().iterator(); |
|
280 |
// should contain source_LCA_yug_ma and source_LCA_yug_ko, testing the microreference which is unique in the tests |
|
281 |
assertTrue(" 2 4 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
282 |
assertTrue(" 2 4 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
274 | 283 |
} |
275 | 284 |
if(distribution.getArea().equals(yug_mn)){ |
276 | 285 |
numExpectedFound++; |
277 | 286 |
assertEquals("aggregated status of area YUG-MN is wrong", PresenceAbsenceTerm.CULTIVATED().getLabel(), distribution.getStatus().getLabel()); |
287 |
assertEquals(2, distribution.getSources().size()); |
|
288 |
Iterator<DescriptionElementSource> sourceIt = distribution.getSources().iterator(); |
|
289 |
// should contain source_LCA_yug_ma and source_LCA_yug_ko, testing the microreference which is unique in the tests |
|
290 |
assertTrue(" 1 3 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
291 |
assertTrue(" 1 3 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
278 | 292 |
} |
279 | 293 |
if(distribution.getArea().equals(yug_ko)){ |
280 | 294 |
numExpectedFound++; |
281 | 295 |
assertEquals("aggregated status of area YUG-KO wrong", PresenceAbsenceTerm.NATIVE().getLabel(), distribution.getStatus().getLabel()); |
296 |
assertEquals(2, distribution.getSources().size()); |
|
297 |
Iterator<DescriptionElementSource> sourceIt = distribution.getSources().iterator(); |
|
298 |
// should contain source_LCA_yug_ma and source_LCA_yug_ko, testing the microreference which is unique in the tests |
|
299 |
assertTrue(" 2 4 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
300 |
assertTrue(" 2 4 ".contains(" " + sourceIt.next().getCitationMicroReference() + " ")); |
|
282 | 301 |
} |
283 | 302 |
} |
284 | 303 |
assertEquals("All three expected areas should have been found before", numExpectedFound, 3); |
285 | 304 |
} |
286 | 305 |
|
306 |
/** |
|
307 |
* Variant of {@link #testArea_rank_and_area_1()} with alternate source references to check the |
|
308 |
* suppression of duplicates. |
|
309 |
* |
|
310 |
* This test relies on {@link #testArea_rank_and_area_1()} |
|
311 |
* an makes assertions only on the alternative source references |
|
312 |
*/ |
|
313 |
@Test |
|
314 |
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class) |
|
315 |
public void testArea_rank_and_area_2() { |
|
316 |
|
|
317 |
Set<Distribution> distributions_LCA = new HashSet<Distribution>(); |
|
318 |
distributions_LCA.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "1")); |
|
319 |
distributions_LCA.add(newDistribution(book_b, yug_ko, PresenceAbsenceTerm.NATIVE(), "2")); |
|
320 |
|
|
321 |
addDistributions( |
|
322 |
T_LAPSANA_COMMUNIS_ALPINA_UUID, |
|
323 |
distributions_LCA |
|
324 |
); |
|
325 |
|
|
326 |
|
|
327 |
engine.accumulate(AggregationMode.byAreasAndRanks, superAreas, lowerRank, upperRank, null, null); |
|
328 |
|
|
329 |
Taxon lapsana_communis = (Taxon) taxonService.load(T_LAPSANA_COMMUNIS_UUID); |
|
330 |
int computedDescriptionsCnt = 0; |
|
331 |
for(TaxonDescription description : lapsana_communis.getDescriptions()) { |
|
332 |
if(description.hasMarker(MarkerType.COMPUTED(), true)) { |
|
333 |
computedDescriptionsCnt++; |
|
334 |
assertEquals(2, description.getElements().size()); // yug, yug_ko |
|
335 |
for(DescriptionElementBase distribution : description.getElements()) { |
|
336 |
logger.debug(((Distribution)distribution).getArea() + " " + sourcesToString(distribution)); |
|
337 |
if(((Distribution)distribution).getArea().equals(yug_ko)){ |
|
338 |
assertEquals(2, distribution.getSources().size()); |
|
339 |
} |
|
340 |
if(((Distribution)distribution).getArea().equals(yug)){ |
|
341 |
assertEquals(2, distribution.getSources().size()); |
|
342 |
} |
|
343 |
} |
|
344 |
} |
|
345 |
} |
|
346 |
assertEquals(1, computedDescriptionsCnt); |
|
347 |
} |
|
348 |
|
|
349 |
|
|
350 |
/** |
|
351 |
* Variant of {@link #testArea_rank_and_area_1()} with alternate source references to check the |
|
352 |
* suppression of duplicates. |
|
353 |
* |
|
354 |
* This test relies on {@link #testArea_rank_and_area_1()} |
|
355 |
* an makes assertions only on the alternative source references |
|
356 |
*/ |
|
357 |
@Test |
|
358 |
@DataSets({ |
|
359 |
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/ClearDB_with_Terms_DataSet.xml"), |
|
360 |
@DataSet(value="/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml"), |
|
361 |
@DataSet(value="TransmissionEngineDistributionTest.xml"), |
|
362 |
}) |
|
363 |
public void testArea_rank_and_area_3() { |
|
364 |
|
|
365 |
Set<Distribution> distributions_LCA = new HashSet<Distribution>(); |
|
366 |
distributions_LCA.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "1")); |
|
367 |
distributions_LCA.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "3")); |
|
368 |
|
|
369 |
addDistributions( |
|
370 |
T_LAPSANA_COMMUNIS_ALPINA_UUID, |
|
371 |
distributions_LCA |
|
372 |
); |
|
373 |
|
|
374 |
Set<Distribution> distributions_LC = new HashSet<>(); |
|
375 |
distributions_LC.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "1")); |
|
376 |
distributions_LC.add(newDistribution(book_b, yug_ko, PresenceAbsenceTerm.NATIVE(), "2")); |
|
377 |
|
|
378 |
commitAndStartNewTransaction(null); |
|
379 |
|
|
380 |
addDistributions( |
|
381 |
T_LAPSANA_COMMUNIS_UUID, |
|
382 |
distributions_LC |
|
383 |
); |
|
384 |
|
|
385 |
engine.accumulate(AggregationMode.byAreasAndRanks, superAreas, lowerRank, upperRank, null, null); |
|
386 |
|
|
387 |
Taxon lapsana_communis = (Taxon) taxonService.load(T_LAPSANA_COMMUNIS_UUID); |
|
388 |
int computedDescriptionsCnt = 0; |
|
389 |
for(TaxonDescription description : lapsana_communis.getDescriptions()) { |
|
390 |
if(description.hasMarker(MarkerType.COMPUTED(), true)) { |
|
391 |
computedDescriptionsCnt++; |
|
392 |
assertEquals(2, description.getElements().size()); |
|
393 |
for(DescriptionElementBase distribution : description.getElements()) { |
|
394 |
logger.debug(((Distribution)distribution).getArea() + " " + sourcesToString(distribution)); |
|
395 |
if(((Distribution)distribution).getArea().equals(yug_ko)){ |
|
396 |
assertEquals(2, distribution.getSources().size()); |
|
397 |
} |
|
398 |
if(((Distribution)distribution).getArea().equals(yug)){ |
|
399 |
assertEquals(3, distribution.getSources().size()); |
|
400 |
} |
|
401 |
} |
|
402 |
} |
|
403 |
} |
|
404 |
assertEquals(1, computedDescriptionsCnt); |
|
405 |
} |
|
406 |
|
|
407 |
/** |
|
408 |
* Variant of {@link #testArea_rank_and_area_1()} with alternate source references to |
|
409 |
* check the handling of the case where the target taxon already has the distribution which is the |
|
410 |
* result of the aggregation (see http://dev.e-taxonomy.eu/trac/ticket/4366#comment:12) |
|
411 |
* |
|
412 |
* This test relies on {@link #testArea_rank_and_area_1()} |
|
413 |
* an makes assertions only on the alternative source references |
|
414 |
*/ |
|
415 |
@Test |
|
416 |
@DataSets({ |
|
417 |
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/ClearDB_with_Terms_DataSet.xml"), |
|
418 |
@DataSet(value="/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml"), |
|
419 |
@DataSet(value="TransmissionEngineDistributionTest.xml"), |
|
420 |
}) |
|
421 |
public void testArea_rank_and_area_4() { |
|
422 |
|
|
423 |
Set<Distribution> distributions_LCA = new HashSet<>(); |
|
424 |
distributions_LCA.add(newDistribution(book_a, yug_ko, PresenceAbsenceTerm.NATIVE(), "1")); |
|
425 |
|
|
426 |
addDistributions( |
|
427 |
T_LAPSANA_COMMUNIS_ALPINA_UUID, |
|
428 |
distributions_LCA |
|
429 |
); |
|
430 |
|
|
431 |
Set<Distribution> distributions_LC = new HashSet<>(); |
|
432 |
distributions_LC.add(newDistribution(book_a, yug, PresenceAbsenceTerm.NATIVE(), "2")); // should succeed |
|
433 |
|
|
434 |
commitAndStartNewTransaction(null); |
|
435 |
|
|
436 |
addDistributions( |
|
437 |
T_LAPSANA_COMMUNIS_UUID, |
|
438 |
distributions_LC |
|
439 |
); |
|
440 |
|
|
441 |
engine.accumulate(AggregationMode.byAreasAndRanks, superAreas, lowerRank, upperRank, null, null); |
|
442 |
|
|
443 |
Taxon lapsana_communis = (Taxon) taxonService.load(T_LAPSANA_COMMUNIS_UUID); |
|
444 |
int computedDescriptionsCnt = 0; |
|
445 |
for(TaxonDescription description : lapsana_communis.getDescriptions()) { |
|
446 |
if(description.hasMarker(MarkerType.COMPUTED(), true)) { |
|
447 |
computedDescriptionsCnt++; |
|
448 |
assertEquals(2, description.getElements().size()); |
|
449 |
Distribution distribution = (Distribution)description.getElements().iterator().next(); |
|
450 |
if(distribution.getArea().equals(yug_ko)){ |
|
451 |
assertEquals(2, distribution.getSources().size()); |
|
452 |
DescriptionElementSource source = distribution.getSources().iterator().next(); |
|
453 |
assertEquals("2", source.getCitationMicroReference()); |
|
454 |
} |
|
455 |
} |
|
456 |
} |
|
457 |
assertEquals(1, computedDescriptionsCnt); |
|
458 |
} |
|
459 |
|
|
460 |
/** |
|
461 |
* @param referenceTitle |
|
462 |
* @param area |
|
463 |
* @param status |
|
464 |
* @param microCitation |
|
465 |
* @return |
|
466 |
*/ |
|
467 |
private Distribution newDistribution(Reference reference, NamedArea area, PresenceAbsenceTerm status, |
|
468 |
String microCitation) { |
|
469 |
DescriptionElementSource source = DescriptionElementSource.NewPrimarySourceInstance(reference, microCitation); |
|
470 |
Distribution distribution = Distribution.NewInstance(area, status); |
|
471 |
distribution.getSources().add(source); |
|
472 |
return distribution; |
|
473 |
} |
|
474 |
|
|
287 | 475 |
/** |
288 | 476 |
* creates a new description for the taxon identified by the UUIDs |
289 | 477 |
* @param taxonUuid |
290 | 478 |
* @param distributions |
291 | 479 |
*/ |
292 |
private void addDistributions(UUID taxonUuid, Distribution[] distributions) {
|
|
480 |
private void addDistributions(UUID taxonUuid, Collection<Distribution> distributions) {
|
|
293 | 481 |
Taxon taxon = (Taxon) taxonService.load(taxonUuid); |
294 | 482 |
if(taxon == null) { |
295 | 483 |
throw new NullPointerException("No taxon found for " + taxonUuid); |
... | ... | |
304 | 492 |
commitAndStartNewTransaction(null); |
305 | 493 |
} |
306 | 494 |
|
495 |
private String sourcesToString(DescriptionElementBase deb) { |
|
496 |
StringBuffer out = new StringBuffer(); |
|
497 |
for ( DescriptionElementSource source : deb.getSources()) { |
|
498 |
out.append(source.getCitation().getTitle() + " : " + source.getCitationMicroReference() + ", "); |
|
499 |
} |
|
500 |
return out.toString(); |
|
501 |
} |
|
502 |
|
|
307 | 503 |
|
308 | 504 |
//@Test // uncomment to create test data file// |
309 | 505 |
@Override |
... | ... | |
393 | 589 |
"REFERENCE", "DESCRIPTIONELEMENTBASE", "DESCRIPTIONBASE", |
394 | 590 |
"AGENTBASE", "CLASSIFICATION", "TAXONNODE", |
395 | 591 |
"HOMOTYPICALGROUP", "LANGUAGESTRING", |
592 |
"HIBERNATE_SEQUENCES" |
|
396 | 593 |
}); |
397 | 594 |
|
398 | 595 |
} |
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TransmissionEngineDistributionTest.xml | ||
---|---|---|
1 | 1 |
<?xml version='1.0' encoding='UTF-8'?> |
2 | 2 |
<dataset> |
3 |
<TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Lapsana sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
4 |
<TAXONBASE DTYPE="Taxon" ID="5001" CREATED="2016-06-22 15:19:53.0" UUID="2a5ceebb-4830-4524-b330-78461bf8cb6b" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5001" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
5 |
<TAXONBASE DTYPE="Taxon" ID="5002" CREATED="2016-06-22 15:19:53.0" UUID="441a3c40-0c84-11de-8c30-0800200c9a66" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. communis sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5002" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
6 |
<TAXONBASE DTYPE="Taxon" ID="5003" CREATED="2016-06-22 15:19:53.0" UUID="e4acf200-63b6-11dd-ad8b-0800200c9a66" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. adenophora sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5003" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
7 |
<TAXONBASE DTYPE="Taxon" ID="5004" CREATED="2016-06-22 15:19:53.0" UUID="596b1325-be50-4b0a-9aa2-3ecd610215f2" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. alpina sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5004" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
8 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="a5daa719-3552-4829-86e1-f4d4ec14d336" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="Lapsana" APPENDEDPHRASE="[null]" FULLTITLECACHE="Lapsana" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="774" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
9 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5001" CREATED="2016-06-22 15:19:53.0" UUID="db6e0607-58f0-448c-849a-26441563689d" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
10 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5002" CREATED="2016-06-22 15:19:53.0" UUID="7f122843-b7db-45ce-abe4-81dd1cd37f19" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. communis" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis subsp. communis" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5002" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="763" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
11 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5003" CREATED="2016-06-22 15:19:53.0" UUID="b6a9cdb3-69b8-44ae-b2c9-f0d2360d7083" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. adenophora" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis subsp. adenophora" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5003" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="763" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
12 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5004" CREATED="2016-06-22 15:19:53.0" UUID="62ca2164-cbd2-4e0d-b99c-6b6cf258c622" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. alpina" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis subsp. alpina" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5004" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="763" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
13 |
<REFERENCE DTYPE="[null]" ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="fa41cb1f-1404-41e9-a777-f4b01eaa9ae0" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="Sp.Pl." DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" DOI="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIESPART="[null]" TITLE="[null]" ABBREVTITLE="[null]" ABBREVTITLECACHE="" PROTECTEDABBREVTITLECACHE="false" REFTYPE="DB" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORSHIP_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/> |
|
14 |
<REFERENCE DTYPE="[null]" ID="5001" CREATED="2016-06-22 15:19:53.0" UUID="ea67d687-b338-4877-8852-b81c4f57f774" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 0, uuid=ea67d687-b338-4877-8852-b81c4f57f774]" DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" DOI="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIESPART="[null]" TITLE="[null]" ABBREVTITLE="[null]" ABBREVTITLECACHE="" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORSHIP_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/> |
|
15 |
<CLASSIFICATION ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="4b266053-a841-4980-b548-3f21d8d7d712" UPDATED="2016-06-22 15:19:53.097" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="TestClassification" MICROREFERENCE="[null]" TIMEPERIOD_START="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_END="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" REFERENCE_ID="[null]" ROOTNODE_ID="5000"/> |
|
16 |
<TAXONNODE ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="fcdb08a7-3a53-4126-ba5c-532188cc0d65" UPDATED="2016-06-22 15:19:53.098" SORTINDEX="-1" TREEINDEX="#t5000#5000#" COUNTCHILDREN="1" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="[null]"/> |
|
17 |
<TAXONNODE ID="5001" CREATED="2016-06-22 15:19:53.0" UUID="ae4704b7-0e33-421f-b8a2-2a7e17b9fde1" UPDATED="[null]" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#" COUNTCHILDREN="1" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5000" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5000"/> |
|
18 |
<TAXONNODE ID="5002" CREATED="2016-06-22 15:19:53.0" UUID="68a9e8ac-3ae1-4d83-96d3-63b056e42de1" UPDATED="2016-06-22 15:19:53.098" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#5002#" COUNTCHILDREN="3" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5001" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5001"/> |
|
19 |
<TAXONNODE ID="5003" CREATED="2016-06-22 15:19:53.0" UUID="88eed5b8-0a41-4b4a-8ded-6a6a0d8dd673" UPDATED="[null]" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#5002#5003#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5002" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5002"/> |
|
20 |
<TAXONNODE ID="5004" CREATED="2016-06-22 15:19:53.0" UUID="c6df76dc-3dcf-4034-bf86-9f4a6c23b870" UPDATED="2016-06-22 15:19:53.098" SORTINDEX="1" TREEINDEX="#t5000#5000#5001#5002#5004#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5002" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5003"/> |
|
21 |
<TAXONNODE ID="5005" CREATED="2016-06-22 15:19:53.0" UUID="c39e7750-9d0f-4901-92a4-6043ef7ff524" UPDATED="2016-06-22 15:19:53.099" SORTINDEX="2" TREEINDEX="#t5000#5000#5001#5002#5005#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5002" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5004"/> |
|
22 |
<HOMOTYPICALGROUP ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="8063b8c6-73a3-4f20-8109-93ffe6d101da" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
23 |
<HOMOTYPICALGROUP ID="5001" CREATED="2016-06-22 15:19:53.0" UUID="5c066a04-b5ae-4537-bc47-5803569daaa4" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
24 |
<HOMOTYPICALGROUP ID="5002" CREATED="2016-06-22 15:19:53.0" UUID="13527861-46cc-48bb-aa30-9c72b956e890" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
25 |
<HOMOTYPICALGROUP ID="5003" CREATED="2016-06-22 15:19:53.0" UUID="1f75856b-e970-4432-a86e-b2747ad8e16e" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
26 |
<HOMOTYPICALGROUP ID="5004" CREATED="2016-06-22 15:19:53.0" UUID="2da2c603-923f-4433-a9c3-66196da96f68" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
27 |
<LANGUAGESTRING ID="5000" CREATED="2016-06-22 15:19:53.0" UUID="c49ddee1-fe7b-48f1-8f81-71f0b1584e71" UPDATED="[null]" TEXT="TestClassification" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/> |
|
3 |
<TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Lapsana sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
4 |
<TAXONBASE DTYPE="Taxon" ID="5001" CREATED="2016-06-27 14:26:11.0" UUID="2a5ceebb-4830-4524-b330-78461bf8cb6b" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5001" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
5 |
<TAXONBASE DTYPE="Taxon" ID="5002" CREATED="2016-06-27 14:26:11.0" UUID="441a3c40-0c84-11de-8c30-0800200c9a66" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. communis sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5002" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
6 |
<TAXONBASE DTYPE="Taxon" ID="5003" CREATED="2016-06-27 14:26:11.0" UUID="e4acf200-63b6-11dd-ad8b-0800200c9a66" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. adenophora sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5003" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
7 |
<TAXONBASE DTYPE="Taxon" ID="5004" CREATED="2016-06-27 14:26:11.0" UUID="596b1325-be50-4b0a-9aa2-3ecd610215f2" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="L. communis subsp. alpina sec. Sp.Pl." APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5004" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/> |
|
8 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="463d06e3-2665-43cc-8c70-cb658c81a738" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="Lapsana" APPENDEDPHRASE="[null]" FULLTITLECACHE="Lapsana" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="774" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
9 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5001" CREATED="2016-06-27 14:26:11.0" UUID="2b718c66-1853-45c9-9f8e-e03057194349" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
10 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5002" CREATED="2016-06-27 14:26:11.0" UUID="06a6a0fd-048e-45e5-aa32-1c7f2dc75421" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. communis" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis subsp. communis" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5002" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="763" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
11 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5003" CREATED="2016-06-27 14:26:11.0" UUID="6ce4f911-4932-4cfb-9793-2e45aaef59aa" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. adenophora" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis subsp. adenophora" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5003" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="763" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
12 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5004" CREATED="2016-06-27 14:26:11.0" UUID="1621acc6-142b-4987-a1d1-475aa01489dc" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="L. communis subsp. alpina" APPENDEDPHRASE="[null]" FULLTITLECACHE="L. communis subsp. alpina" NOMENCLATURALMICROREFERENCE="[null]" 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" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5004" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="763" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/> |
|
13 |
<REFERENCE DTYPE="[null]" ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="b59c0842-fba3-4255-8e32-5a064303b8a2" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="Sp.Pl." DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" DOI="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIESPART="[null]" TITLE="[null]" ABBREVTITLE="[null]" ABBREVTITLECACHE="" PROTECTEDABBREVTITLECACHE="false" REFTYPE="DB" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORSHIP_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/> |
|
14 |
<REFERENCE DTYPE="[null]" ID="5001" CREATED="2016-06-27 14:26:11.0" UUID="3268a382-f51a-495e-8de6-763854944c7d" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Reference [type=Book, id= 0, uuid=3268a382-f51a-495e-8de6-763854944c7d]" DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" DOI="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIESPART="[null]" TITLE="[null]" ABBREVTITLE="[null]" ABBREVTITLECACHE="" PROTECTEDABBREVTITLECACHE="false" REFTYPE="BK" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORSHIP_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/> |
|
15 |
<CLASSIFICATION ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="4b266053-a841-4980-b548-3f21d8d7d712" UPDATED="2016-06-27 14:26:11.88" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="TestClassification" MICROREFERENCE="[null]" TIMEPERIOD_START="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_END="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" REFERENCE_ID="[null]" ROOTNODE_ID="5000"/> |
|
16 |
<TAXONNODE ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="06512abd-edf9-435b-a3d9-6cd6ede5aec8" UPDATED="2016-06-27 14:26:11.881" SORTINDEX="-1" TREEINDEX="#t5000#5000#" COUNTCHILDREN="1" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="[null]"/> |
|
17 |
<TAXONNODE ID="5001" CREATED="2016-06-27 14:26:11.0" UUID="dcf4f891-c486-4d36-b1d1-39fae7a5df2a" UPDATED="[null]" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#" COUNTCHILDREN="1" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5000" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5000"/> |
|
18 |
<TAXONNODE ID="5002" CREATED="2016-06-27 14:26:11.0" UUID="7dbe5319-ae7d-4140-bb3b-c34dc320d134" UPDATED="2016-06-27 14:26:11.882" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#5002#" COUNTCHILDREN="3" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5001" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5001"/> |
|
19 |
<TAXONNODE ID="5003" CREATED="2016-06-27 14:26:11.0" UUID="4fd6c300-54b7-4f48-bad2-3126ab72a6d0" UPDATED="[null]" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#5002#5003#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5002" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5002"/> |
|
20 |
<TAXONNODE ID="5004" CREATED="2016-06-27 14:26:11.0" UUID="5523c20c-bbc2-4c89-8b36-e00e8314d252" UPDATED="2016-06-27 14:26:11.883" SORTINDEX="1" TREEINDEX="#t5000#5000#5001#5002#5004#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5002" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5003"/> |
|
21 |
<TAXONNODE ID="5005" CREATED="2016-06-27 14:26:11.0" UUID="65671bba-0373-4998-8a7b-410a67a2ddcf" UPDATED="2016-06-27 14:26:11.884" SORTINDEX="2" TREEINDEX="#t5000#5000#5001#5002#5005#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5002" REFERENCEFORPARENTCHILDRELATION_ID="5000" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5004"/> |
|
22 |
<HOMOTYPICALGROUP ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="207c1e0c-ce60-4516-adf7-0ba5a61ee62f" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
23 |
<HOMOTYPICALGROUP ID="5001" CREATED="2016-06-27 14:26:11.0" UUID="e18238ce-8d2c-4ac6-bf33-8f019012dfac" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
24 |
<HOMOTYPICALGROUP ID="5002" CREATED="2016-06-27 14:26:11.0" UUID="85c073ca-bde7-4bdd-be40-e1783132f45e" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
25 |
<HOMOTYPICALGROUP ID="5003" CREATED="2016-06-27 14:26:11.0" UUID="b2f33aa8-fb6e-4ca3-9ae4-6c6d49b08a71" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
26 |
<HOMOTYPICALGROUP ID="5004" CREATED="2016-06-27 14:26:11.0" UUID="8ccf2a95-d355-4de1-8eda-ebd4b90e691d" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/> |
|
27 |
<LANGUAGESTRING ID="5000" CREATED="2016-06-27 14:26:11.0" UUID="57a6a64a-59e5-41ed-92ab-f53c03b29b14" UPDATED="[null]" TEXT="TestClassification" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/> |
|
28 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="AuditEvent" NEXT_VAL="5003"/> |
|
29 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="CdmMetaData" NEXT_VAL="5003"/> |
|
30 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="Classification" NEXT_VAL="5001"/> |
|
31 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="Extension" NEXT_VAL="5016"/> |
|
32 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="GrantedAuthorityImpl" NEXT_VAL="5011"/> |
|
33 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="HomotypicalGroup" NEXT_VAL="5005"/> |
|
34 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="LanguageString" NEXT_VAL="5001"/> |
|
35 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="PermissionGroup" NEXT_VAL="5002"/> |
|
36 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="Reference" NEXT_VAL="5002"/> |
|
37 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonBase" NEXT_VAL="5005"/> |
|
38 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonNameBase" NEXT_VAL="5005"/> |
|
39 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonNode" NEXT_VAL="5006"/> |
|
40 |
<HIBERNATE_SEQUENCES SEQUENCE_NAME="UserAccount" NEXT_VAL="5001"/> |
|
28 | 41 |
</dataset> |
Also available in: Unified diff
#4366 Transmissionengine aggregation of source references