X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/df748bc6a41dc96d6998dd7c1eb313c4ca46ba04..1fa935e85ea39aab2d1e87d3f0c914c37c64c7d7:/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/SDDDescriptionIO.java?ds=inline diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/SDDDescriptionIO.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/SDDDescriptionIO.java index 399ae977af..4702340781 100644 --- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/SDDDescriptionIO.java +++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/sdd/SDDDescriptionIO.java @@ -31,6 +31,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.TransactionStatus; import eu.etaxonomy.cdm.api.service.IAgentService; +import eu.etaxonomy.cdm.api.service.IVersionableService;//rajout import eu.etaxonomy.cdm.api.service.IDescriptionService; import eu.etaxonomy.cdm.api.service.IReferenceService; import eu.etaxonomy.cdm.api.service.ITermService; @@ -39,7 +40,10 @@ import eu.etaxonomy.cdm.io.common.CdmImportBase; import eu.etaxonomy.cdm.io.common.ICdmImport; import eu.etaxonomy.cdm.io.common.IImportConfigurator; import eu.etaxonomy.cdm.io.common.ImportHelper; +import eu.etaxonomy.cdm.model.agent.Contact; +import eu.etaxonomy.cdm.model.agent.Institution; import eu.etaxonomy.cdm.model.agent.Person; +import eu.etaxonomy.cdm.model.agent.Address;//rajout import eu.etaxonomy.cdm.model.agent.Team; import eu.etaxonomy.cdm.model.common.Annotation; import eu.etaxonomy.cdm.model.common.AnnotationType; @@ -49,9 +53,12 @@ import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.model.common.IdentifiableSource; 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.Representation; import eu.etaxonomy.cdm.model.common.TermBase; import eu.etaxonomy.cdm.model.common.TermVocabulary; +import eu.etaxonomy.cdm.model.common.User; import eu.etaxonomy.cdm.model.common.VersionableEntity; import eu.etaxonomy.cdm.model.description.CategoricalData; import eu.etaxonomy.cdm.model.description.Feature; @@ -65,19 +72,26 @@ import eu.etaxonomy.cdm.model.description.StatisticalMeasure; import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue; import eu.etaxonomy.cdm.model.description.TaxonDescription; import eu.etaxonomy.cdm.model.description.TextData; +import eu.etaxonomy.cdm.model.description.Modifier; +import eu.etaxonomy.cdm.model.taxon.TaxonomicTree; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.model.media.ImageFile; import eu.etaxonomy.cdm.model.media.Media; import eu.etaxonomy.cdm.model.media.MediaRepresentation; +import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity; import eu.etaxonomy.cdm.model.media.MediaRepresentationPart; import eu.etaxonomy.cdm.model.media.Rights; import eu.etaxonomy.cdm.model.name.NonViralName; import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.occurrence.Specimen; import eu.etaxonomy.cdm.model.reference.IArticle; import eu.etaxonomy.cdm.model.reference.IDatabase; import eu.etaxonomy.cdm.model.reference.IGeneric; import eu.etaxonomy.cdm.model.reference.ReferenceBase; import eu.etaxonomy.cdm.model.reference.ReferenceFactory; import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.Synonym; +import eu.etaxonomy.cdm.model.location.NamedArea; /** * @author h.fradin @@ -105,6 +119,9 @@ public class SDDDescriptionIO extends CdmImportBase taxonDescriptions = new HashMap(); private Map taxonNameBases = new HashMap(); private Map units = new HashMap(); + private Map taxonNodes = new HashMap(); + private Map namedAreas = new HashMap(); + private Map specimens = new HashMap(); private Set annotationTypes = new HashSet(); private Set featureSet = new HashSet(); @@ -122,9 +139,13 @@ public class SDDDescriptionIO extends CdmImportBase statisticalMeasures = new HashSet(); private Set featureData = new HashSet(); private Set featureTrees = new HashSet(); + private Set taxonomicTrees = new HashSet(); private Rights copyright = null; + private int taxonNamesCount = 0; //XIM ajout + + public SDDDescriptionIO(){ super(); } @@ -208,6 +229,7 @@ public class SDDDescriptionIO extends CdmImportBase labDet = null; @@ -342,9 +366,42 @@ public class SDDDescriptionIO extends CdmImportBase listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace); + if (elLinks != null) { + + // + List listLinks = elLinks.getChildren("Link", sddNamespace); + Media link = Media.NewInstance(); + MediaRepresentation mr = MediaRepresentation.NewInstance(); + int k = 0; + //for each Link + for (Element elLink : listLinks){ + + try { + + String rel = elLink.getAttributeValue("rel"); + String href = elLink.getAttributeValue("href"); + + mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null)); + link.addRepresentation(mr); + ime.addMedia(link); + + } catch (Exception e) { + //FIXME + logger.warn("Import of Link " + k + " failed."); + } + + if ((++k % modCount) == 0){ logger.info("Links handled: " + k);} + + } + } + } + List listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace); for (Element elMediaObject : listMediaObjects) { String ref = null; String role = null; @@ -366,6 +423,7 @@ public class SDDDescriptionIO extends CdmImportBase listGeographicAreas = elGeographicAreas.getChildren("GeographicArea", sddNamespace); + int j = 0; + + for (Element elGeographicArea : listGeographicAreas){ + + String id = elGeographicArea.getAttributeValue("id"); + NamedArea na = new NamedArea(); + importRepresentation(elGeographicArea, sddNamespace, na, id, sddConfig); + namedAreas.put(id,na); + } + if ((++j % modCount) == 0){ logger.info("TaxonNames handled: " + j);} + } + } + // imports the representation (label, detail, lang) of a particular SDD element protected void importTechnicalMetadata(Element root, Namespace sddNamespace, SDDImportConfigurator sddConfig){ @@ -421,16 +497,29 @@ public class SDDDescriptionIO extends CdmImportBase author = authors.values().iterator() ; author.hasNext() ;){ team.addTeamMember(author.next()); } + if (editors != null) { + Marker marker = Marker.NewInstance(); + marker.setMarkerType(editou); + for (Iterator editor = editors.values().iterator() ; editor.hasNext() ;){ + Person edit = editor.next(); + edit.addMarker(marker); + team.addTeamMember(edit); + } + } sec.setAuthorTeam(team); sourceReference.setAuthorTeam(team); } - + if (editors != null) { Person ed = Person.NewInstance(); for (Iterator editor = editors.values().iterator() ; editor.hasNext() ;){ @@ -445,11 +534,22 @@ public class SDDDescriptionIO extends CdmImportBase k = taxonDescriptions.values().iterator() ; k.hasNext() ;){ + TaxonDescription taxonDescription = k.next(); + // Persists a Description + descriptionService.save(taxonDescription); + } + + //descriptionService.saveFeatureNodeAll(featureNodes.values()); + for (Iterator refCD = taxonDescriptions.keySet().iterator() ; refCD.hasNext() ;){ String ref = refCD.next(); TaxonDescription td = taxonDescriptions.get(ref); - td.addDescriptionSource(sec); + //XIM BUG ONAFILE td.addDescriptionSource(sec); if (citations.containsKey(ref)) { IArticle publication = (IArticle) publications.get(citations.get(ref)); if (locations.containsKey(ref)) { @@ -464,7 +564,7 @@ public class SDDDescriptionIO extends CdmImportBase k = namedAreas.values().iterator() ; k.hasNext() ;) { + Marker areamarker = Marker.NewInstance(); + areamarker.setMarkerType(sddGeographicArea); + NamedArea area = k.next(); + area.addMarker(areamarker); + getTermService().save(area); + } + if (units != null) { for (Iterator k = units.values().iterator() ; k.hasNext() ;){ MeasurementUnit unit = k.next(); @@ -501,32 +615,20 @@ public class SDDDescriptionIO extends CdmImportBase p = authors.values().iterator() ; p.hasNext() ;) { - Person person = p.next(); - agentService.save(person); - } - - for (Iterator p = editors.values().iterator() ; p.hasNext() ;) { - Person person = p.next(); - agentService.save(person); - } - - // Returns a CdmApplicationController created by the values of this configuration. - IDescriptionService descriptionService = getDescriptionService(); - - for (Iterator k = taxonDescriptions.values().iterator() ; k.hasNext() ;){ - TaxonDescription taxonDescription = k.next(); - // Persists a Description - descriptionService.save(taxonDescription); - } - - // descriptionService.saveFeatureNodeAll(featureNodes.values()); - for (Iterator k = featureTrees.iterator() ; k.hasNext() ;) { FeatureTree tree = k.next(); getFeatureTreeService().save(tree); } + + for (Iterator k = taxonomicTrees.iterator() ; k.hasNext() ;) { + TaxonomicTree tree = k.next(); + getTaxonTreeService().save(tree); + } + + for (Iterator k = specimens.values().iterator() ; k.hasNext() ;) { + Specimen specimen = k.next(); + getOccurrenceService().save(specimen); + } } @@ -544,58 +646,82 @@ public class SDDDescriptionIO extends CdmImportBase listSpecimens = elSpecimens.getChildren("Specimen", sddNamespace); + int j = 0; + for (Element elSpecimen : listSpecimens) { + String id = elSpecimen.getAttributeValue("id"); + Specimen speci = null; + if (!id.equals("")) { + speci = Specimen.NewInstance(); + specimens.put(id,speci); + importRepresentation(elSpecimen, sddNamespace, speci, id, sddConfig); + } + } + + } + } + + + + + // imports the revision data associated with the Dataset (authors, modifications) protected void importRevisionData(Element elDataset, Namespace sddNamespace){ // logger.info("start RevisionData ..."); Element elRevisionData = elDataset.getChild("RevisionData",sddNamespace); - - // - Element elCreators = elRevisionData.getChild("Creators",sddNamespace); - - // - List listAgents = elCreators.getChildren("Agent", sddNamespace); - - int j = 0; - //for each Agent - for (Element elAgent : listAgents){ - - String role = elAgent.getAttributeValue("role"); - String ref = elAgent.getAttributeValue("ref"); - if (role.equals("aut")) { - if(!ref.equals("")) { - authors.put(ref, null); + if (elRevisionData != null){ + // + Element elCreators = elRevisionData.getChild("Creators",sddNamespace); + + // + List listAgents = elCreators.getChildren("Agent", sddNamespace); + + int j = 0; + //for each Agent + for (Element elAgent : listAgents){ + + String role = elAgent.getAttributeValue("role"); + String ref = elAgent.getAttributeValue("ref"); + if (role.equals("aut")) { + if(!ref.equals("")) { + authors.put(ref, null); + } } - } - if (role.equals("edt")) { - if(!ref.equals("")) { - editors.put(ref, null); + if (role.equals("edt")) { + if(!ref.equals("")) { + editors.put(ref, null); + } } + if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);} + } - - if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);} - - } - - // 2006-04-08T00:00:00 - String stringDateModified = (String)ImportHelper.getXmlInputValue(elRevisionData, "DateModified",sddNamespace); - - if (stringDateModified != null) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss"); - Date d = null; - try { - d = sdf.parse(stringDateModified); - } catch(Exception e) { - System.err.println("Exception :"); - e.printStackTrace(); - } - - DateTime updated = null; - if (d != null) { - updated = new DateTime(d); - sourceReference.setUpdated(updated); - sec.setUpdated(updated); + + // 2006-04-08T00:00:00 + String stringDateModified = (String)ImportHelper.getXmlInputValue(elRevisionData, "DateModified",sddNamespace); + + if (stringDateModified != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss"); + Date d = null; + try { + d = sdf.parse(stringDateModified); + } catch(Exception e) { + System.err.println("Exception :"); + e.printStackTrace(); + } + + DateTime updated = null; + if (d != null) { + updated = new DateTime(d); + sourceReference.setUpdated(updated); + sec.setUpdated(updated); + } } } } @@ -701,7 +827,6 @@ public class SDDDescriptionIO extends CdmImportBase List elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace); TermVocabulary termVocabularyState = new TermVocabulary(); - int k = 0; //for each StateDefinition for (Element elStateDefinition : elStateDefinitions){ @@ -742,7 +866,6 @@ public class SDDDescriptionIO extends CdmImportBase List elMeasures = elQuantitative.getChildren("Measure", sddNamespace); int l = 0; + //for each State for (Element elMeasure : elMeasures){ if ((++l % modCount) == 0){ logger.info("States handled: " + (l-1));} String type = elMeasure.getAttributeValue("type"); String value = elMeasure.getAttributeValue("value"); - float v = Float.parseFloat(value); + if (value.contains(",")) { + value = value.replace(',', '.'); + } + Float v = Float.parseFloat(value); + //Float v = new Float(0); StatisticalMeasure t = null; if (type.equals("Min")) { t = StatisticalMeasure.MIN(); @@ -983,10 +1121,15 @@ public class SDDDescriptionIO extends CdmImportBase logger.info("start Agents ..."); Element elAgents = elDataset.getChild("Agents",sddNamespace); + if (elAgents != null) { + // + List listAgents = elAgents.getChildren("Agent", sddNamespace); + int j = 0; + //for each Agent + for (Element elAgent : listAgents){ + + try { - // - List listAgents = elAgents.getChildren("Agent", sddNamespace); - int j = 0; - //for each Agent - for (Element elAgent : listAgents){ + String idA = elAgent.getAttributeValue("id"); - try { + // + // + // Ali Baba is also known as r.a.m. + // + Person person = Person.NewInstance(); + importRepresentation(elAgent, sddNamespace, person, idA, sddConfig); + person.addSource(IdentifiableSource.NewInstance(idA, "Agent")); - String idA = elAgent.getAttributeValue("id"); + /*XIM + Element elLinks = elAgent.getChild("Links",sddNamespace); - // - // - // Ali Baba is also known as r.a.m. - // - Person person = Person.NewInstance(); - importRepresentation(elAgent, sddNamespace, person, idA, sddConfig); - person.addSource(IdentifiableSource.NewInstance(idA, "Agent")); + if (elLinks != null) { - // - Element elLinks = elAgent.getChild("Links",sddNamespace); + // + List listLinks = elLinks.getChildren("Link", sddNamespace); + int k = 0; + //for each Link + for (Element elLink : listLinks){ - if (elLinks != null) { + try { - // - List listLinks = elLinks.getChildren("Link", sddNamespace); - int k = 0; - //for each Link - for (Element elLink : listLinks){ + String rel = elLink.getAttributeValue("rel"); + String href = elLink.getAttributeValue("href"); - try { + Media link = Media.NewInstance(); + MediaRepresentation mr = MediaRepresentation.NewInstance(); + mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null)); + link.addRepresentation(mr); + person.addMedia(link); - String rel = elLink.getAttributeValue("rel"); - String href = elLink.getAttributeValue("href"); + } catch (Exception e) { + //FIXME + logger.warn("Import of Link " + k + " failed."); + success = false; + } - Media link = Media.NewInstance(); - MediaRepresentation mr = MediaRepresentation.NewInstance(); - mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null)); - link.addRepresentation(mr); - person.addMedia(link); + if ((++k % modCount) == 0){ logger.info("Links handled: " + k);} - } catch (Exception e) { - //FIXME - logger.warn("Import of Link " + k + " failed."); - success = false; } + } + */ + if (authors.containsKey(idA)) { + authors.put(idA,person); + } - if ((++k % modCount) == 0){ logger.info("Links handled: " + k);} - + if (editors.containsKey(idA)) { + editors.put(idA, person); } - } - if (authors.containsKey(idA)) { - authors.put(idA,person); - } - if (editors.containsKey(idA)) { - editors.put(idA, person); + } catch (Exception e) { + //FIXME + logger.warn("Import of Agent " + j + " failed."); + success = false; } - } catch (Exception e) { - //FIXME - logger.warn("Import of Agent " + j + " failed."); - success = false; - } - - if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);} + if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);} + } } } @@ -1177,7 +1322,6 @@ public class SDDDescriptionIO extends CdmImportBase // importRepresentation(elDescriptiveConcept, sddNamespace, feature, id, sddConfig); + //System.out.println(feature.getLabel()+id); features.put("g" + g, feature); g++; + /*Element elModifiers = elDescriptiveConcept.getChild("Modifiers", sddNamespace); + if (elModifiers !=null){ + List listModifiers = elModifiers.getChildren("Modifier", sddNamespace); + for (Element elModifier : listModifiers) { + TermVocabulary termVocabularyState = new TermVocabulary("test","test","test","test"); + Modifier modif = Modifier.NewInstance(); + String idmod = elModifier.getAttributeValue("id"); + importRepresentation(elModifier, sddNamespace, modif, idmod, sddConfig); + termVocabularyState.addTerm(modif); + //XIMfeature.addRecommendedModifierEnumeration(termVocabularyState); + } + }*/ + fn.setFeature(feature); // TODO if an OriginalSource can be attached to a FeatureNode or a Feature @@ -1306,7 +1469,7 @@ public class SDDDescriptionIO extends CdmImportBase logger.info("start CharacterTrees ..."); @@ -1329,7 +1491,193 @@ public class SDDDescriptionIO extends CdmImportBase listCharacterTrees = elCharacterTrees.getChildren("CharacterTree", sddNamespace); int j = 0; //for each CharacterTree + for (Element elCharacterTree : listCharacterTrees){ + try { + Element elRepresentation = elCharacterTree.getChild("Representation",sddNamespace); + String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace); + Element elDesignedFor = elCharacterTree.getChild("DesignedFor",sddNamespace); + /*XIMList listRoles = elDesignedFor.getChildren("Role",sddNamespace); + boolean isgroups = false; + + for (Element elRole : listRoles){ + if (elRole.getText().equals("Filtering")) { + isgroups = true; + } + }*/ + + // only treats the case of flat groups containing characters + // should also be added: dependencies between characters, + //XIM + + FeatureTree feattree = FeatureTree.NewInstance(); + importRepresentation(elCharacterTree, sddNamespace, feattree, "", sddConfig); + FeatureNode root = feattree.getRoot(); + //XIM several found in some files, is it correct ? + List listelNodes = elCharacterTree.getChildren("Nodes", sddNamespace); + for (Element elNodes : listelNodes) { + List listNodes = elNodes.getChildren("Node", sddNamespace); + if (listNodes != null) { + for (Element elNode : listNodes){ + String idN = elNode.getAttributeValue("id"); + FeatureNode fn = null; + if (!idN.equals("")) { + Element elDescriptiveConcept = elNode.getChild("DescriptiveConcept", sddNamespace); + if (elDescriptiveConcept != null){ + String refDC = elDescriptiveConcept.getAttributeValue("ref"); + //System.out.println(refDC); + fn = featureNodes.get(refDC); + } + else { + fn = FeatureNode.NewInstance(); + featureNodes.put(idN,fn); + } + Element elParent = elNode.getChild("Parent", sddNamespace); + if (elParent!=null){ + String refP = elParent.getAttributeValue("ref"); + if (!refP.equals("")) { + FeatureNode parent = nodes.get(refP); + parent.addChild(fn); + } + } + else { + fn = FeatureNode.NewInstance(); + root.addChild(fn); + } + } + nodes.put(idN, fn); + } + //System.out.println("zic"); + List listCharNodes = elNodes.getChildren("CharNode", sddNamespace); + for (Element elCharNode : listCharNodes){ + Element elParent = elCharNode.getChild("Parent", sddNamespace); + Element elCharacter = elCharNode.getChild("Character", sddNamespace); + FeatureNode fn = FeatureNode.NewInstance(); + if (elParent!=null){ + String refP = elParent.getAttributeValue("ref"); + if ((refP!=null)&&(!refP.equals(""))) { + FeatureNode parent = nodes.get(refP); + if (parent==null){ + parent = root; // because of Delta example + } + parent.addChild(fn); + } + } + String refC = elCharacter.getAttributeValue("ref"); + if ((refC!=null)&&(!refC.equals(""))){ + Feature character = features.get(refC); + fn.setFeature(character); + // if method setParent() in FeatureNode becomes visible + // fn.setParent(parent); + } + else { + refC = String.valueOf(taxonNamesCount); + taxonNamesCount++; + } + nodes.put(refC, fn); + } + } + } + featureTrees.add(feattree); + } + + catch (Exception e) { + //FIXME + logger.warn("Import of Character tree " + j + " failed."); + success = false; + } + + if ((++j % modCount) == 0){ logger.info("CharacterTrees handled: " + j);} + + } + + } + } + + + + + protected void importTaxonHierarchies(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){ + + logger.info("start TaxonHierarchies ..."); + Element elTaxonHierarchies = elDataset.getChild("TaxonHierarchies",sddNamespace); + + if (elTaxonHierarchies != null) { + List listTaxonHierarchies = elTaxonHierarchies.getChildren("TaxonHierarchy", sddNamespace); + int j = 0; + for (Element elTaxonHierarchy : listTaxonHierarchies){ + try { + Element elRepresentation = elTaxonHierarchy.getChild("Representation",sddNamespace); + String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace); + + TaxonomicTree taxonomicTree = TaxonomicTree.NewInstance(label); + importRepresentation(elTaxonHierarchy, sddNamespace, taxonomicTree, "", sddConfig); + Set root = taxonomicTree.getRootNodes(); + Element elNodes = elTaxonHierarchy.getChild("Nodes", sddNamespace); + List listNodes = elNodes.getChildren("Node", sddNamespace); + for (Element elNode : listNodes){ + String idN = elNode.getAttributeValue("id"); + TaxonNameBase tnb = null; + if (!idN.equals("")) { + Element elTaxonName = elNode.getChild("TaxonName", sddNamespace); + String refTN = elTaxonName.getAttributeValue("ref"); + tnb = taxonNameBases.get(refTN); + Taxon taxonou = (Taxon) tnb.getTaxa().iterator().next() ; + Element elParent = elNode.getChild("Parent", sddNamespace); + if (elParent!=null){ + String refP = elParent.getAttributeValue("ref"); + if (!refP.equals("")) { + TaxonNode parent = taxonNodes.get(refP); + //TaxonNode child = parent.addChildTaxon(Taxon.NewInstance(tnb, sec), sec, "", Synonym.NewInstance(tnb, sec)); + TaxonNode child = parent.addChildTaxon(taxonou, sec, "", Synonym.NewInstance(tnb, sec)); + taxonNodes.put(idN,child); + } + } + else { + //XIM addChildtaxon (taxon, referencebase ??? + //TaxonNode tn = taxonomicTree.addChildTaxon(Taxon.NewInstance(tnb, sec), sec, "", Synonym.NewInstance(tnb, sec)); + TaxonNode tn = taxonomicTree.addChildTaxon(taxonou, sec, "", Synonym.NewInstance(tnb, sec)); + taxonNodes.put(idN,tn); + } + } + } + + taxonomicTrees.add(taxonomicTree); + } + + catch (Exception e) { + //FIXME + logger.warn("Import of Taxon Hierarchy " + j + " failed."); + success = false; + } + + if ((++j % modCount) == 0){ logger.info("TaxonHierarchies handled: " + j);} + + } + + } + } + + + + + + + + + + // imports the descriptions of taxa (specimens TODO) + protected void importCharacterTrees2(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){ + // + logger.info("start CharacterTrees ..."); + Element elCharacterTrees = elDataset.getChild("CharacterTrees",sddNamespace); + + // + + if (elCharacterTrees != null) { + List listCharacterTrees = elCharacterTrees.getChildren("CharacterTree", sddNamespace); + int j = 0; + //for each CharacterTree for (Element elCharacterTree : listCharacterTrees){ try { @@ -1347,13 +1695,13 @@ public class SDDDescriptionIO extends CdmImportBase listNodes = elNodes.getChildren("Node", sddNamespace); for (Element elNode : listNodes){ @@ -1371,13 +1719,17 @@ public class SDDDescriptionIO extends CdmImportBase listCharNodes = elNodes.getChildren("CharNode", sddNamespace); for (Element elCharNode : listCharNodes){ Element elParent = elCharNode.getChild("Parent", sddNamespace); - String refP = elParent.getAttributeValue("ref"); - Element elCharacter = elCharNode.getChild("Character", sddNamespace); - String refC = elCharacter.getAttributeValue("ref"); + Element elCharacter = elCharNode.getChild("Character", sddNamespace); FeatureNode fn = FeatureNode.NewInstance(); - if (!refP.equals("")) { - FeatureNode parent = nodes.get(refP); - parent.addChild(fn); + if (elParent!=null){ + String refP = elParent.getAttributeValue("ref"); + if (!refP.equals("")) { + FeatureNode parent = nodes.get(refP); + parent.addChild(fn); + } + } + String refC = elCharacter.getAttributeValue("ref"); + if (!refC.equals("")){ Feature character = features.get(refC); fn.setFeature(character); // if method setParent() in FeatureNode becomes visible