ref #6794 change FeatureTree to TermTree
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / data / FullCoverageDataGenerator.java
index 3057bf00a4ab7908ccd592df18648c484339cce1..07671cf6b065af25162940af52050dd3a1d12553 100644 (file)
@@ -22,7 +22,6 @@ import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Credit;
-import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.EventBase;
 import eu.etaxonomy.cdm.model.common.Extension;
 import eu.etaxonomy.cdm.model.common.ExtensionType;
@@ -37,18 +36,14 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.common.Marker;
 import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.cdm.model.common.OriginalSourceType;
-import eu.etaxonomy.cdm.model.common.Representation;
-import eu.etaxonomy.cdm.model.common.TermType;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
+import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureNode;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.IIdentificationKey;
 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
@@ -68,12 +63,13 @@ import eu.etaxonomy.cdm.model.description.TaxonInteraction;
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.description.TextFormat;
-import eu.etaxonomy.cdm.model.description.WorkingSet;
 import eu.etaxonomy.cdm.model.location.Country;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.Point;
 import eu.etaxonomy.cdm.model.location.ReferenceSystem;
 import eu.etaxonomy.cdm.model.media.AudioFile;
+import eu.etaxonomy.cdm.model.media.ExternalLink;
+import eu.etaxonomy.cdm.model.media.ExternalLinkType;
 import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
 import eu.etaxonomy.cdm.model.media.ImageFile;
 import eu.etaxonomy.cdm.model.media.Media;
@@ -94,9 +90,6 @@ import eu.etaxonomy.cdm.model.molecular.SequenceString;
 import eu.etaxonomy.cdm.model.molecular.SingleRead;
 import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment;
 import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment.Shift;
-import eu.etaxonomy.cdm.model.name.BacterialName;
-import eu.etaxonomy.cdm.model.name.BotanicalName;
-import eu.etaxonomy.cdm.model.name.CultivarPlantName;
 import eu.etaxonomy.cdm.model.name.HybridRelationship;
 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
 import eu.etaxonomy.cdm.model.name.NameRelationship;
@@ -106,11 +99,11 @@ import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.Registration;
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.name.ViralName;
-import eu.etaxonomy.cdm.model.name.ZoologicalName;
+import eu.etaxonomy.cdm.model.name.TaxonName;
+import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
@@ -123,16 +116,23 @@ import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
+import eu.etaxonomy.cdm.model.taxon.SynonymType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.cdm.model.term.DefinedTerm;
+import eu.etaxonomy.cdm.model.term.Representation;
+import eu.etaxonomy.cdm.model.term.TermTree;
+import eu.etaxonomy.cdm.model.term.TermTreeNode;
+import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
 
 /**
@@ -147,7 +147,7 @@ import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
  * depend on general parameter than concrete data values.
  *
  * @author a.mueller
- * @created 3013-12-02
+ * @since 3013-12-02
  *
  *
  */
@@ -155,7 +155,7 @@ public class FullCoverageDataGenerator {
 
 
        public void fillWithData(Session session){
-               List<CdmBase> cdmBases = new ArrayList<CdmBase>();
+               List<CdmBase> cdmBases = new ArrayList<>();
 
                createAgents(cdmBases);
 
@@ -183,7 +183,7 @@ public class FullCoverageDataGenerator {
 
        private void createSupplemental(List<CdmBase> cdmBases)  {
 
-               Reference<?> ref = ReferenceFactory.newBook();
+               Reference ref = ReferenceFactory.newBook();
 
                Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
                ref.addAnnotation(annotation);
@@ -200,7 +200,7 @@ public class FullCoverageDataGenerator {
                //Others
                try {
                        LSIDAuthority lsidAuthority = new LSIDAuthority("My authority");
-                       lsidAuthority.addNamespace("lsidNamespace", TaxonNameBase.class);
+                       lsidAuthority.addNamespace("lsidNamespace", TaxonName.class);
                        cdmBases.add(lsidAuthority);
                } catch (MalformedLSIDException e) {
                        e.printStackTrace();
@@ -225,8 +225,8 @@ public class FullCoverageDataGenerator {
        private void createAgents(List<CdmBase> cdmBases) {
                //Person
                Person person = Person.NewTitledInstance("Person Title");
-               person.setFirstname("first name");
-               person.setLastname("last name");
+               person.setGivenName("first name");
+               person.setFamilyName("last name");
                person.setLifespan(TimePeriodParser.parseString("1905-1995"));
                person.setPrefix("prefix");
                person.setSuffix("suffix");
@@ -342,7 +342,7 @@ public class FullCoverageDataGenerator {
 
                Taxon referencedTaxon = getTaxon();
                cdmBases.add(referencedTaxon);
-               languageString.addIntextReference(IntextReference.NewTaxonInstance(referencedTaxon, languageString, 2, 5));
+               languageString.addIntextReference(IntextReference.NewInstance(referencedTaxon, languageString, 2, 5));
                textData.putModifyingText(eng, "nice diagnosis");
                handleAnnotatableEntity(textData);
                handleAnnotatableEntity(languageString);
@@ -387,9 +387,12 @@ public class FullCoverageDataGenerator {
                textData.addModifier(DefinedTerm.SEX_HERMAPHRODITE());
                textData.putModifyingText(Language.ENGLISH(), "no modification");
                textData.setTimeperiod(TimePeriodParser.parseString("1970-1980"));
-               Reference<?> ref = ReferenceFactory.newArticle();
+               Reference ref = ReferenceFactory.newArticle();
                DescriptionElementSource source = textData.addSource(OriginalSourceType.Import, "22", "taxon description table", ref, "detail");
-               source.setNameUsedInSource(BotanicalName.NewInstance(Rank.GENUS()));
+               source.setNameUsedInSource(TaxonNameFactory.NewBotanicalInstance(Rank.GENUS()));
+               ExternalLink link = ExternalLink.NewInstance(ExternalLinkType.WebSite,
+                       URI.create("http://wwww.abd.de"), "Somehow useful link", 445);
+               source.addLink(link);
                handleAnnotatableEntity(source);
 
                taxonDescription.addDescriptionSource(ref);
@@ -402,19 +405,17 @@ public class FullCoverageDataGenerator {
                handleAnnotatableEntity(specDesc);
 
                //Name description
-               TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.GENUS());
+               TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
                TaxonNameDescription nameDesc = TaxonNameDescription.NewInstance(name);
                cdmBases.add(name);
                handleAnnotatableEntity(nameDesc);
 
 
                //Feature Tree
-               FeatureTree featureTree = FeatureTree.NewInstance();
+               TermTree<Feature> featureTree = TermTree.NewInstance();
 //             featureTree
-               FeatureNode descriptionFeatureNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
-               FeatureNode leaveLengthNode = FeatureNode.NewInstance(leaveLength);
-               featureTree.getRootChildren().add(descriptionFeatureNode);
-               descriptionFeatureNode.addChild(leaveLengthNode);
+        TermTreeNode<Feature> descriptionFeatureNode = featureTree.getRoot().addChild(Feature.DESCRIPTION());
+        TermTreeNode<Feature> leaveLengthNode = descriptionFeatureNode.addChild(leaveLength);
                handleIdentifiableEntity(featureTree);
 
                State inapplicableState = State.NewInstance("inapplicableState", "inapplicableState", null);
@@ -427,11 +428,20 @@ public class FullCoverageDataGenerator {
                cdmBases.add(leaveLengthNode);
 
 
-               WorkingSet workingSet = WorkingSet.NewInstance();
-               workingSet.addDescription(taxonDescription);
-               workingSet.setLabel("My Workingset");
-               workingSet.getDescriptiveSystem();
-               handleAnnotatableEntity(workingSet);
+               //DescriptiveDataSet
+               DescriptiveDataSet descriptiveDataSet = DescriptiveDataSet.NewInstance();
+               descriptiveDataSet.addDescription(taxonDescription);
+               descriptiveDataSet.setLabel("My Descriptive Dataset");
+               descriptiveDataSet.getDescriptiveSystem();
+               handleAnnotatableEntity(descriptiveDataSet);
+               descriptiveDataSet.addGeoFilterArea(Country.GERMANY());
+               Classification classification = Classification.NewInstance("DescriptiveDataSet subtree classification");
+               Taxon subTreeTaxon = getTaxon();
+        TaxonNode subtree = classification.addChildTaxon(subTreeTaxon, null, null);
+               descriptiveDataSet.addTaxonSubtree(subtree);
+
+               cdmBases.add(classification);
+               cdmBases.add(subtree);
 
 
                //polytomous keys
@@ -500,7 +510,7 @@ public class FullCoverageDataGenerator {
                media.addRepresentation(mediaRepresentation);
 
                media.putTitle(Language.ENGLISH(), "Media title");
-               media.setMediaCreated(DateTime.now());
+               media.setMediaCreated(TimePeriod.NewInstance(DateTime.now()));
                media.putDescription(Language.ENGLISH(), "Media description");
                handleIdentifiableEntity(media);
 
@@ -596,7 +606,7 @@ public class FullCoverageDataGenerator {
                sequence.setGeneticAccessionNumber("GenNO12345");
                sequence.setBoldProcessId("boldId");
                sequence.setHaplotype("haplotype");
-               Reference<?> sequenceCitation = getReference();
+               Reference sequenceCitation = getReference();
                sequence.addCitation(sequenceCitation);
                handleAnnotatableEntity(sequence);
 
@@ -626,17 +636,15 @@ public class FullCoverageDataGenerator {
 
 
        private void createTaxon(List<CdmBase> cdmBases) {
-               Reference<?> sec = getReference();
-               TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.GENUS());
+               Reference sec = getReference();
+               TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
                Taxon taxon = Taxon.NewInstance(name, sec);
                handleIdentifiableEntity(taxon);
 
-               TaxonNameBase<?,?> synName = BotanicalName.NewInstance(Rank.GENUS());
-               Synonym syn = Synonym.NewInstance(synName, sec);
-               SynonymRelationship synRel = taxon.addSynonym(syn, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(),
-                               getReference(), "123");
+               TaxonName synName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
+               Synonym syn = Synonym.NewInstance(synName, sec, "123");
+               taxon.addSynonym(syn, SynonymType.HETEROTYPIC_SYNONYM_OF());
                taxon.setDoubtful(true);
-               handleAnnotatableEntity(synRel);
                handleIdentifiableEntity(syn);
 
 
@@ -644,8 +652,6 @@ public class FullCoverageDataGenerator {
                TaxonRelationship taxRel = taxon.addTaxonRelation(concept, TaxonRelationshipType.CONGRUENT_TO(),
                                sec, "444");
                taxon.setTaxonStatusUnknown(true);
-               taxon.setUnplaced(true);
-               taxon.setExcluded(true);
                handleAnnotatableEntity(taxRel);
 
 
@@ -656,18 +662,25 @@ public class FullCoverageDataGenerator {
                classification.addGeoScope(Country.GERMANY());
                classification.putDescription(Language.ENGLISH(), "An interesting classification");
 
-
                TaxonNode node = classification.addChildTaxon(taxon, sec,"22");
                handleIdentifiableEntity(classification);
                handleAnnotatableEntity(node);
+               node.putExcludedNote(Language.DEFAULT(), "Excluded note");
+               DefinedTerm agentRelationType = DefinedTerm.NewTaxonNodeAgentRelationTypeInstance(null, "agentRelation", "ar");
+               Person agent = Person.NewTitledInstance("Related agent");
+               TaxonNodeAgentRelation agentRelation = node.addAgentRelation(agentRelationType, agent);
+               handleAnnotatableEntity(agentRelation);
 
                Taxon childTaxon = Taxon.NewInstance(synName, sec);
                node.addChildTaxon(childTaxon, sec, "44");
+           node.setUnplaced(true);
+           node.setExcluded(true);
 
                cdmBases.add(taxon);
                cdmBases.add(concept);
                cdmBases.add(childTaxon);
                cdmBases.add(classification);
+               cdmBases.add(agentRelationType);
 
 
        }
@@ -676,12 +689,12 @@ public class FullCoverageDataGenerator {
 
 
        private void createReference(List<CdmBase> cdmBases) {
-               Reference<?> reference = ReferenceFactory.newArticle();
+               Reference reference = ReferenceFactory.newArticle();
                Person author = Person.NewTitledInstance("Author team");
                reference.setAuthorship(author);
                reference.setTitle("ref title");
                reference.setAbbrevTitle("abbrev title");
-               reference.setDatePublished(TimePeriodParser.parseString("1999"));
+               reference.setDatePublished(TimePeriodParser.parseStringVerbatim("1999"));
                reference.setEdition("edition");
                reference.setEditor("editor");
                Institution institution = Institution.NewInstance();
@@ -701,7 +714,7 @@ public class FullCoverageDataGenerator {
                reference.setVolume("vol. 3");
                reference.setUri(URI.create("http://rer.abc.de"));
 
-               Reference<?> journal = ReferenceFactory.newJournal();
+               Reference journal = ReferenceFactory.newJournal();
                reference.setInJournal(journal);
 
                handleIdentifiableEntity(reference);
@@ -767,7 +780,7 @@ public class FullCoverageDataGenerator {
                mediaSpecimen.setAccessionNumber("accessionNumber");
 //             mediaSpecimen.setCollectorsNumber("collectorsNumber");
                mediaSpecimen.setBarcode("barcode");
-               BotanicalName storedUnder = BotanicalName.NewInstance(Rank.SPECIES());
+               TaxonName storedUnder = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
                storedUnder.setTitleCache("Stored under", true);
                mediaSpecimen.setStoredUnder(storedUnder);
                mediaSpecimen.setExsiccatum("exsiccatum");
@@ -786,7 +799,6 @@ public class FullCoverageDataGenerator {
                handleAnnotatableEntity(event);
                handleEventBase(event);
 
-
                //SpecOrObservationBase
                fieldUnit.setSex(DefinedTerm.SEX_FEMALE());
                DefinedTerm lifeStage = DefinedTerm.NewStageInstance("Live stage", "stage", null);
@@ -795,7 +807,7 @@ public class FullCoverageDataGenerator {
                DefinedTerm kindOfUnit = DefinedTerm.NewKindOfUnitInstance("Kind of unit", "Kind of unit", null);
                cdmBases.add(kindOfUnit);
                fieldUnit.setKindOfUnit(kindOfUnit);
-               fieldUnit.setIndividualCount(3);
+               fieldUnit.setIndividualCount("3");
                fieldUnit.putDefinition(Language.ENGLISH(), "definition");
                fieldUnit.setPublish(true);
                handleIdentifiableEntity(fieldUnit);
@@ -815,12 +827,12 @@ public class FullCoverageDataGenerator {
 
 
        private void createTaxonName(List<CdmBase> cdmBases) {
-               BacterialName bacName = BacterialName.NewInstance(Rank.GENUS());
+               TaxonName bacName = TaxonNameFactory.NewBacterialInstance(Rank.GENUS());
                bacName.setSubGenusAuthorship("sub Genus author");
                bacName.setNameApprobation("nameApprobation");
                handleIdentifiableEntity(bacName);
 
-               CultivarPlantName botName = CultivarPlantName.NewInstance(Rank.SUBSPECIES());
+               TaxonName botName = TaxonNameFactory.NewCultivarInstance(Rank.SUBSPECIES());
                botName.setAnamorphic(true);
                botName.setCultivarName("cultivarName");
                botName.setGenusOrUninomial("Genus");
@@ -837,13 +849,13 @@ public class FullCoverageDataGenerator {
                botName.setExBasionymAuthorship(exBasionymAuthorship);
                handleIdentifiableEntity(botName);
                handleAnnotatableEntity(botName.getHomotypicalGroup());
-               BotanicalName botName2 = BotanicalName.NewInstance(Rank.SPECIES());
+               TaxonName botName2 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
                HybridRelationship hybridRel = botName2.addHybridChild(botName, HybridRelationshipType.FIRST_PARENT(), "Rule 1.2.3");
                hybridRel.setCitation(ReferenceFactory.newBook());
                hybridRel.setCitationMicroReference("p. 123");
                handleAnnotatableEntity(hybridRel);
 
-               ZoologicalName zooName = ZoologicalName.NewInstance(Rank.GENUS());
+               TaxonName zooName = TaxonNameFactory.NewZoologicalInstance(Rank.GENUS());
                zooName.setBreed("breed");
                zooName.setPublicationYear(1922);
                zooName.setOriginalPublicationYear(1987);
@@ -859,7 +871,7 @@ public class FullCoverageDataGenerator {
                handleIdentifiableEntity(zooName);
 
                //TypeDesignation
-               ZoologicalName speciesZooName = ZoologicalName.NewInstance(Rank.SPECIES());
+               TaxonName speciesZooName = TaxonNameFactory.NewZoologicalInstance(Rank.SPECIES());
                NameTypeDesignation nameDesig = zooName.addNameTypeDesignation(speciesZooName, getReference(), "111", "original name",
                                NameTypeDesignationStatus.AUTOMATIC(), true, true, true, true);
                handleAnnotatableEntity(nameDesig);
@@ -867,15 +879,28 @@ public class FullCoverageDataGenerator {
                                getReference(), "p,22", "original name", false, true);
                handleAnnotatableEntity(specimenDesig);
 
-               ViralName viralName = ViralName.NewInstance(Rank.GENUS());
+               TaxonName viralName = TaxonNameFactory.NewViralInstance(Rank.GENUS());
                viralName.setAcronym("acronym");
                handleIdentifiableEntity(viralName);
 
-
+               //Registration
+               Registration registration = Registration.NewInstance("registration identifier",
+                       "specificIdentifier", speciesZooName, null);
+               registration.addTypeDesignation(specimenDesig);
+               registration.setRegistrationDate(DateTime.now());
+               Registration blockingRegistration = Registration.NewInstance();
+               registration.addBlockedBy(blockingRegistration);
+               registration.setInstitution(Institution.NewInstance());
+               User submitter = User.NewInstance("submitter", "12345");
+               registration.setSubmitter(submitter);
+               handleAnnotatableEntity(registration);;
+
+               cdmBases.add(submitter);
                cdmBases.add(bacName);
                cdmBases.add(botName);
                cdmBases.add(viralName);
                cdmBases.add(zooName);
+               cdmBases.add(botName2);
        }
 
        private void handleEventBase(EventBase event){
@@ -903,7 +928,7 @@ public class FullCoverageDataGenerator {
                Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
 
                //Identifier
-               Identifier<?> identifier = Identifier.NewInstance(identifiableEntity, "ident23", DefinedTerm.SEX_FEMALE());
+               Identifier<?> identifier = identifiableEntity.addIdentifier("ident23", DefinedTerm.SEX_FEMALE());
                handleAnnotatableEntity(identifier);
 
 
@@ -938,8 +963,8 @@ public class FullCoverageDataGenerator {
        }
 
 
-       private Reference<?> getReference() {
-                Reference<?> result = ReferenceFactory.newGeneric();
+       private Reference getReference() {
+                Reference result = ReferenceFactory.newGeneric();
                 result.setTitle("some generic reference");
                 return result;
        }
@@ -953,8 +978,8 @@ public class FullCoverageDataGenerator {
 
 
        private Taxon getTaxon() {
-               Reference<?> sec = getReference();
-               TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.GENUS());
+               Reference sec = getReference();
+               TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
                Taxon taxon = Taxon.NewInstance(name, sec);
                return taxon;