(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / sdd / SDDDescriptionIO.java
index 399ae977af6308ddbf6ec81eff9c23a990e2653c..4702340781ae208b539645398b1a9125b6f41662 100644 (file)
@@ -31,6 +31,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.TransactionStatus;\r
 \r
 import eu.etaxonomy.cdm.api.service.IAgentService;\r
 import org.springframework.transaction.TransactionStatus;\r
 \r
 import eu.etaxonomy.cdm.api.service.IAgentService;\r
+import eu.etaxonomy.cdm.api.service.IVersionableService;//rajout\r
 import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
 import eu.etaxonomy.cdm.api.service.IReferenceService;\r
 import eu.etaxonomy.cdm.api.service.ITermService;\r
 import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
 import eu.etaxonomy.cdm.api.service.IReferenceService;\r
 import eu.etaxonomy.cdm.api.service.ITermService;\r
@@ -39,7 +40,10 @@ import eu.etaxonomy.cdm.io.common.CdmImportBase;
 import eu.etaxonomy.cdm.io.common.ICdmImport;\r
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
 import eu.etaxonomy.cdm.io.common.ImportHelper;\r
 import eu.etaxonomy.cdm.io.common.ICdmImport;\r
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
 import eu.etaxonomy.cdm.io.common.ImportHelper;\r
+import eu.etaxonomy.cdm.model.agent.Contact;\r
+import eu.etaxonomy.cdm.model.agent.Institution;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.agent.Address;//rajout\r
 import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.AnnotationType;\r
 import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.AnnotationType;\r
@@ -49,9 +53,12 @@ import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.LanguageString;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.LanguageString;\r
+import eu.etaxonomy.cdm.model.common.Marker;\r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.cdm.model.common.Representation;\r
 import eu.etaxonomy.cdm.model.common.TermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.Representation;\r
 import eu.etaxonomy.cdm.model.common.TermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.User;\r
 import eu.etaxonomy.cdm.model.common.VersionableEntity;\r
 import eu.etaxonomy.cdm.model.description.CategoricalData;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.common.VersionableEntity;\r
 import eu.etaxonomy.cdm.model.description.CategoricalData;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
@@ -65,19 +72,26 @@ import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.description.Modifier;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
 import eu.etaxonomy.cdm.model.media.ImageFile;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
 import eu.etaxonomy.cdm.model.media.ImageFile;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
+import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;\r
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
 import eu.etaxonomy.cdm.model.media.Rights;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
 import eu.etaxonomy.cdm.model.media.Rights;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
 import eu.etaxonomy.cdm.model.reference.IArticle;\r
 import eu.etaxonomy.cdm.model.reference.IDatabase;\r
 import eu.etaxonomy.cdm.model.reference.IGeneric;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.reference.IArticle;\r
 import eu.etaxonomy.cdm.model.reference.IDatabase;\r
 import eu.etaxonomy.cdm.model.reference.IGeneric;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
 \r
 /**\r
  * @author h.fradin\r
 \r
 /**\r
  * @author h.fradin\r
@@ -105,6 +119,9 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
        private Map<String,TaxonDescription> taxonDescriptions = new HashMap<String,TaxonDescription>();\r
        private Map<String,NonViralName> taxonNameBases = new HashMap<String,NonViralName>();\r
        private Map<String,MeasurementUnit> units = new HashMap<String,MeasurementUnit>();\r
        private Map<String,TaxonDescription> taxonDescriptions = new HashMap<String,TaxonDescription>();\r
        private Map<String,NonViralName> taxonNameBases = new HashMap<String,NonViralName>();\r
        private Map<String,MeasurementUnit> units = new HashMap<String,MeasurementUnit>();\r
+       private Map<String,TaxonNode> taxonNodes = new HashMap<String,TaxonNode>();\r
+       private Map<String,NamedArea> namedAreas = new HashMap<String,NamedArea>();\r
+       private Map<String,Specimen> specimens = new HashMap<String,Specimen>();\r
 \r
        private Set<AnnotationType> annotationTypes = new HashSet<AnnotationType>();\r
        private Set<Feature> featureSet = new HashSet<Feature>();\r
 \r
        private Set<AnnotationType> annotationTypes = new HashSet<AnnotationType>();\r
        private Set<Feature> featureSet = new HashSet<Feature>();\r
@@ -122,9 +139,13 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
        private Set<StatisticalMeasure> statisticalMeasures = new HashSet<StatisticalMeasure>();\r
        private Set<VersionableEntity> featureData = new HashSet<VersionableEntity>();\r
        private Set<FeatureTree> featureTrees = new HashSet<FeatureTree>();\r
        private Set<StatisticalMeasure> statisticalMeasures = new HashSet<StatisticalMeasure>();\r
        private Set<VersionableEntity> featureData = new HashSet<VersionableEntity>();\r
        private Set<FeatureTree> featureTrees = new HashSet<FeatureTree>();\r
+       private Set<TaxonomicTree> taxonomicTrees = new HashSet<TaxonomicTree>();\r
 \r
        private Rights copyright = null;\r
 \r
 \r
        private Rights copyright = null;\r
 \r
+       private int taxonNamesCount = 0; //XIM ajout\r
+       \r
+       \r
        public SDDDescriptionIO(){\r
                super();\r
        }\r
        public SDDDescriptionIO(){\r
                super();\r
        }\r
@@ -208,6 +229,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
 \r
                if (detail != null) {\r
                        Annotation annotation = Annotation.NewInstance(detail, datasetLanguage);\r
 \r
                if (detail != null) {\r
                        Annotation annotation = Annotation.NewInstance(detail, datasetLanguage);\r
+                       annotation.setAnnotationType(AnnotationType.EDITORIAL());\r
                        sec.addAnnotation(annotation);\r
                }\r
 \r
                        sec.addAnnotation(annotation);\r
                }\r
 \r
@@ -307,7 +329,9 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                ve = m;\r
                        }\r
 \r
                                ve = m;\r
                        }\r
 \r
-               } else if (ve instanceof IdentifiableEntity) {\r
+               } \r
+               //XIM else if\r
+               if (ve instanceof IdentifiableEntity) {\r
                        IdentifiableEntity ie = (IdentifiableEntity) ve;\r
                        List<String> labDet = null;\r
 \r
                        IdentifiableEntity ie = (IdentifiableEntity) ve;\r
                        List<String> labDet = null;\r
 \r
@@ -342,9 +366,42 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        ve = ie;\r
 \r
                }\r
                        ve = ie;\r
 \r
                }\r
+               \r
+               if (ve instanceof IdentifiableMediaEntity){\r
+                       IdentifiableMediaEntity ime = (IdentifiableMediaEntity) ve;\r
+                       Element elLinks = parent.getChild("Links",sddNamespace);\r
 \r
 \r
-               List <Element> listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
+                       if (elLinks != null) {\r
+\r
+                               //  <Link rel="Alternate" href="http://www.diversitycampus.net/people/hagedorn"/>\r
+                               List<Element> listLinks = elLinks.getChildren("Link", sddNamespace);\r
+                               Media link = Media.NewInstance();\r
+                               MediaRepresentation mr = MediaRepresentation.NewInstance();\r
+                               int k = 0;\r
+                               //for each Link\r
+                               for (Element elLink : listLinks){\r
+\r
+                                       try {\r
+\r
+                                               String rel = elLink.getAttributeValue("rel");\r
+                                               String href = elLink.getAttributeValue("href");\r
+\r
+                                               mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null));\r
+                                               link.addRepresentation(mr);\r
+                                               ime.addMedia(link);\r
+\r
+                                       } catch (Exception e) {\r
+                                               //FIXME\r
+                                               logger.warn("Import of Link " + k + " failed.");\r
+                                       }\r
+\r
+                                       if ((++k % modCount) == 0){ logger.info("Links handled: " + k);}\r
+\r
+                               }\r
+                       }\r
+               }\r
 \r
 \r
+               List <Element> listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
                for (Element elMediaObject : listMediaObjects) {\r
                        String ref = null;\r
                        String role = null;\r
                for (Element elMediaObject : listMediaObjects) {\r
                        String ref = null;\r
                        String role = null;\r
@@ -366,6 +423,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                                this.associateImageWithCdmBase(ref,descriptionSource);\r
                                                        }\r
                                                } else {\r
                                                                this.associateImageWithCdmBase(ref,descriptionSource);\r
                                                        }\r
                                                } else {\r
+                                                       //System.out.println(parent.getName());\r
                                                        this.associateImageWithCdmBase(ref,ve);\r
                                                }\r
                                        }\r
                                                        this.associateImageWithCdmBase(ref,ve);\r
                                                }\r
                                        }\r
@@ -375,6 +433,24 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                }\r
 \r
        }\r
                }\r
 \r
        }\r
+       \r
+       protected void importGeographicAreas(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig) {\r
+               Element elGeographicAreas = elDataset.getChild("GeographicAreas",sddNamespace);\r
+               if (elGeographicAreas != null) {\r
+                       List<Element> listGeographicAreas = elGeographicAreas.getChildren("GeographicArea", sddNamespace);\r
+                       int j = 0;\r
+                       \r
+                       for (Element elGeographicArea : listGeographicAreas){\r
+\r
+                               String id = elGeographicArea.getAttributeValue("id");\r
+                               NamedArea na = new NamedArea();\r
+                               importRepresentation(elGeographicArea, sddNamespace, na, id, sddConfig);\r
+                               namedAreas.put(id,na);\r
+                       }\r
+                       if ((++j % modCount) == 0){ logger.info("TaxonNames handled: " + j);}\r
+               }\r
+       }\r
+       \r
 \r
        // imports the representation (label, detail, lang) of a particular SDD element\r
        protected void importTechnicalMetadata(Element root, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
 \r
        // imports the representation (label, detail, lang) of a particular SDD element\r
        protected void importTechnicalMetadata(Element root, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
@@ -421,16 +497,29 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                importAgents(elDataset, sddNamespace, sddConfig, success);\r
                importPublications(elDataset, sddNamespace, sddConfig, success);\r
                importMediaObjects(elDataset, sddNamespace, sddConfig, success);\r
                importAgents(elDataset, sddNamespace, sddConfig, success);\r
                importPublications(elDataset, sddNamespace, sddConfig, success);\r
                importMediaObjects(elDataset, sddNamespace, sddConfig, success);\r
-\r
+               importTaxonHierarchies(elDataset, sddNamespace, sddConfig, success);\r
+               importGeographicAreas(elDataset, sddNamespace, sddConfig);\r
+               importSpecimens(elDataset,sddNamespace, sddConfig);\r
+                       \r
+               MarkerType editou = MarkerType.NewInstance("Editor", "editor", "edt") ;\r
                if (authors != null) {\r
                        Team team = Team.NewInstance();\r
                        for (Iterator<Person> author = authors.values().iterator() ; author.hasNext() ;){\r
                                team.addTeamMember(author.next());\r
                        }\r
                if (authors != null) {\r
                        Team team = Team.NewInstance();\r
                        for (Iterator<Person> author = authors.values().iterator() ; author.hasNext() ;){\r
                                team.addTeamMember(author.next());\r
                        }\r
+                       if (editors != null) {\r
+                               Marker marker = Marker.NewInstance();\r
+                               marker.setMarkerType(editou);\r
+                               for (Iterator<Person> editor = editors.values().iterator() ; editor.hasNext() ;){\r
+                                       Person edit = editor.next();\r
+                                       edit.addMarker(marker);\r
+                                       team.addTeamMember(edit);\r
+                               }\r
+                               }\r
                        sec.setAuthorTeam(team);\r
                        sourceReference.setAuthorTeam(team);\r
                }\r
                        sec.setAuthorTeam(team);\r
                        sourceReference.setAuthorTeam(team);\r
                }\r
-\r
+               \r
                if (editors != null) {\r
                        Person ed = Person.NewInstance();\r
                        for (Iterator<Person> editor = editors.values().iterator() ; editor.hasNext() ;){\r
                if (editors != null) {\r
                        Person ed = Person.NewInstance();\r
                        for (Iterator<Person> editor = editors.values().iterator() ; editor.hasNext() ;){\r
@@ -445,11 +534,22 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        sourceReference.addRights(copyright);\r
                        sec.addRights(copyright);\r
                }\r
                        sourceReference.addRights(copyright);\r
                        sec.addRights(copyright);\r
                }\r
+               \r
+               // Returns a CdmApplicationController created by the values of this configuration.\r
+               IDescriptionService descriptionService = getDescriptionService();\r
 \r
 \r
+               for (Iterator<TaxonDescription> k = taxonDescriptions.values().iterator() ; k.hasNext() ;){\r
+                       TaxonDescription taxonDescription = k.next();\r
+                       // Persists a Description\r
+                       descriptionService.save(taxonDescription);\r
+               }\r
+\r
+               //descriptionService.saveFeatureNodeAll(featureNodes.values());\r
+               \r
                for (Iterator<String> refCD = taxonDescriptions.keySet().iterator() ; refCD.hasNext() ;){\r
                        String ref = refCD.next();\r
                        TaxonDescription td = taxonDescriptions.get(ref);\r
                for (Iterator<String> refCD = taxonDescriptions.keySet().iterator() ; refCD.hasNext() ;){\r
                        String ref = refCD.next();\r
                        TaxonDescription td = taxonDescriptions.get(ref);\r
-                       td.addDescriptionSource(sec);\r
+                       //XIM BUG ONAFILE td.addDescriptionSource(sec);\r
                        if (citations.containsKey(ref)) {\r
                                IArticle publication = (IArticle) publications.get(citations.get(ref));\r
                                if (locations.containsKey(ref)) {\r
                        if (citations.containsKey(ref)) {\r
                                IArticle publication = (IArticle) publications.get(citations.get(ref));\r
                                if (locations.containsKey(ref)) {\r
@@ -464,7 +564,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                }\r
                logger.info("end makeTaxonDescriptions ...");\r
 \r
                }\r
                logger.info("end makeTaxonDescriptions ...");\r
 \r
-               sddConfig.setSourceReference(sourceReference);\r
+               //sddConfig.setSourceReference(sourceReference);\r
 \r
                //saving of all imported data into the CDM db\r
                ITermService termService = getTermService();\r
 \r
                //saving of all imported data into the CDM db\r
                ITermService termService = getTermService();\r
@@ -476,6 +576,20 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        Feature feature = k.next();\r
                        termService.save(feature); \r
                }\r
                        Feature feature = k.next();\r
                        termService.save(feature); \r
                }\r
+               \r
+               \r
+               termService.save(editou);\r
+               \r
+               MarkerType sddGeographicArea = MarkerType.NewInstance("", "SDDGeographicArea", "");\r
+               termService.save(sddGeographicArea);\r
+               for (Iterator<NamedArea> k = namedAreas.values().iterator() ; k.hasNext() ;) {\r
+                       Marker areamarker = Marker.NewInstance();\r
+                       areamarker.setMarkerType(sddGeographicArea);\r
+                       NamedArea area = k.next();\r
+                       area.addMarker(areamarker);\r
+                       getTermService().save(area);\r
+               }               \r
+               \r
                if (units != null) {\r
                        for (Iterator<MeasurementUnit> k = units.values().iterator() ; k.hasNext() ;){\r
                                MeasurementUnit unit = k.next();\r
                if (units != null) {\r
                        for (Iterator<MeasurementUnit> k = units.values().iterator() ; k.hasNext() ;){\r
                                MeasurementUnit unit = k.next();\r
@@ -501,32 +615,20 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        referenceService.save(publication); \r
                }\r
 \r
                        referenceService.save(publication); \r
                }\r
 \r
-               IAgentService agentService = getAgentService();\r
-               for (Iterator<Person> p = authors.values().iterator() ; p.hasNext() ;) {\r
-                       Person person = p.next();\r
-                       agentService.save(person);\r
-               }\r
-\r
-               for (Iterator<Person> p = editors.values().iterator() ; p.hasNext() ;) {\r
-                       Person person = p.next();\r
-                       agentService.save(person);\r
-               }\r
-\r
-               // Returns a CdmApplicationController created by the values of this configuration.\r
-               IDescriptionService descriptionService = getDescriptionService();\r
-\r
-               for (Iterator<TaxonDescription> k = taxonDescriptions.values().iterator() ; k.hasNext() ;){\r
-                       TaxonDescription taxonDescription = k.next();\r
-                       // Persists a Description\r
-                       descriptionService.save(taxonDescription); \r
-               }\r
-\r
-               //      descriptionService.saveFeatureNodeAll(featureNodes.values());\r
-\r
                for (Iterator<FeatureTree> k = featureTrees.iterator() ; k.hasNext() ;) {\r
                        FeatureTree tree = k.next();\r
                        getFeatureTreeService().save(tree);\r
                }\r
                for (Iterator<FeatureTree> k = featureTrees.iterator() ; k.hasNext() ;) {\r
                        FeatureTree tree = k.next();\r
                        getFeatureTreeService().save(tree);\r
                }\r
+               \r
+               for (Iterator<TaxonomicTree> k = taxonomicTrees.iterator() ; k.hasNext() ;) {\r
+                       TaxonomicTree tree = k.next();\r
+                       getTaxonTreeService().save(tree);\r
+               }\r
+               \r
+               for (Iterator<Specimen> k = specimens.values().iterator() ; k.hasNext() ;) {\r
+                       Specimen specimen = k.next();\r
+                       getOccurrenceService().save(specimen);\r
+               }\r
 \r
        }\r
 \r
 \r
        }\r
 \r
@@ -544,58 +646,82 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        datasetLanguage = Language.ENGLISH();\r
                }\r
        }\r
                        datasetLanguage = Language.ENGLISH();\r
                }\r
        }\r
+       \r
+       protected void importSpecimens(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig) {\r
+               logger.info("start Specimens ...");\r
+               Element elSpecimens = elDataset.getChild("Specimens",sddNamespace);\r
+               if (elSpecimens != null){\r
+                       List<Element> listSpecimens = elSpecimens.getChildren("Specimen", sddNamespace);\r
+                       int j = 0;\r
+                       for (Element elSpecimen : listSpecimens) {\r
+                               String id = elSpecimen.getAttributeValue("id");\r
+                               Specimen speci = null;\r
+                               if (!id.equals("")) {\r
+                                       speci = Specimen.NewInstance();\r
+                                       specimens.put(id,speci);\r
+                                       importRepresentation(elSpecimen, sddNamespace, speci, id, sddConfig);\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+       }\r
 \r
 \r
+       \r
+\r
+       \r
+       \r
+       \r
        // imports the revision data associated with the Dataset (authors, modifications)\r
        protected void importRevisionData(Element elDataset, Namespace sddNamespace){\r
                // <RevisionData>\r
                logger.info("start RevisionData ...");\r
                Element elRevisionData = elDataset.getChild("RevisionData",sddNamespace);\r
        // imports the revision data associated with the Dataset (authors, modifications)\r
        protected void importRevisionData(Element elDataset, Namespace sddNamespace){\r
                // <RevisionData>\r
                logger.info("start RevisionData ...");\r
                Element elRevisionData = elDataset.getChild("RevisionData",sddNamespace);\r
-\r
-               // <Creators>\r
-               Element elCreators = elRevisionData.getChild("Creators",sddNamespace);\r
-\r
-               // <Agent role="aut" ref="a1"/>\r
-               List<Element> listAgents = elCreators.getChildren("Agent", sddNamespace);\r
-\r
-               int j = 0;\r
-               //for each Agent\r
-               for (Element elAgent : listAgents){\r
-\r
-                       String role = elAgent.getAttributeValue("role");\r
-                       String ref = elAgent.getAttributeValue("ref");\r
-                       if (role.equals("aut")) {\r
-                               if(!ref.equals("")) {\r
-                                       authors.put(ref, null);\r
+               if (elRevisionData != null){\r
+                       // <Creators>\r
+                       Element elCreators = elRevisionData.getChild("Creators",sddNamespace);\r
+       \r
+                       // <Agent role="aut" ref="a1"/>\r
+                       List<Element> listAgents = elCreators.getChildren("Agent", sddNamespace);\r
+       \r
+                       int j = 0;\r
+                       //for each Agent\r
+                       for (Element elAgent : listAgents){\r
+       \r
+                               String role = elAgent.getAttributeValue("role");\r
+                               String ref = elAgent.getAttributeValue("ref");\r
+                               if (role.equals("aut")) {\r
+                                       if(!ref.equals("")) {\r
+                                               authors.put(ref, null);\r
+                                       }\r
                                }\r
                                }\r
-                       }\r
-                       if (role.equals("edt")) {\r
-                               if(!ref.equals("")) {\r
-                                       editors.put(ref, null);\r
+                               if (role.equals("edt")) {\r
+                                       if(!ref.equals("")) {\r
+                                               editors.put(ref, null);\r
+                                       }\r
                                }\r
                                }\r
+                               if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
+       \r
                        }\r
                        }\r
-\r
-                       if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
-\r
-               }\r
-\r
-               // <DateModified>2006-04-08T00:00:00</DateModified>\r
-               String stringDateModified = (String)ImportHelper.getXmlInputValue(elRevisionData, "DateModified",sddNamespace);\r
-\r
-               if (stringDateModified != null) {\r
-                       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");\r
-                       Date d = null;\r
-                       try {\r
-                               d = sdf.parse(stringDateModified);\r
-                       } catch(Exception e) {\r
-                               System.err.println("Exception :");\r
-                               e.printStackTrace();\r
-                       }\r
-\r
-                       DateTime updated = null;\r
-                       if (d != null) {\r
-                               updated = new DateTime(d);\r
-                               sourceReference.setUpdated(updated);\r
-                               sec.setUpdated(updated);\r
+       \r
+                       // <DateModified>2006-04-08T00:00:00</DateModified>\r
+                       String stringDateModified = (String)ImportHelper.getXmlInputValue(elRevisionData, "DateModified",sddNamespace);\r
+       \r
+                       if (stringDateModified != null) {\r
+                               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");\r
+                               Date d = null;\r
+                               try {\r
+                                       d = sdf.parse(stringDateModified);\r
+                               } catch(Exception e) {\r
+                                       System.err.println("Exception :");\r
+                                       e.printStackTrace();\r
+                               }\r
+       \r
+                               DateTime updated = null;\r
+                               if (d != null) {\r
+                                       updated = new DateTime(d);\r
+                                       sourceReference.setUpdated(updated);\r
+                                       sec.setUpdated(updated);\r
+                               }\r
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
@@ -701,7 +827,6 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        int j = 0;\r
                        //for each CategoricalCharacter\r
                        for (Element elCategoricalCharacter : elCategoricalCharacters){\r
                        int j = 0;\r
                        //for each CategoricalCharacter\r
                        for (Element elCategoricalCharacter : elCategoricalCharacters){\r
-\r
                                try {\r
 \r
                                        String idCC = elCategoricalCharacter.getAttributeValue("id");\r
                                try {\r
 \r
                                        String idCC = elCategoricalCharacter.getAttributeValue("id");\r
@@ -722,7 +847,6 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                        // <StateDefinition id="s1">\r
                                        List<Element> elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace);\r
                                        TermVocabulary<State> termVocabularyState = new TermVocabulary<State>();\r
                                        // <StateDefinition id="s1">\r
                                        List<Element> elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace);\r
                                        TermVocabulary<State> termVocabularyState = new TermVocabulary<State>();\r
-\r
                                        int k = 0;\r
                                        //for each StateDefinition\r
                                        for (Element elStateDefinition : elStateDefinitions){\r
                                        int k = 0;\r
                                        //for each StateDefinition\r
                                        for (Element elStateDefinition : elStateDefinitions){\r
@@ -742,7 +866,6 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                termVocabularyState.addTerm(state);\r
                                                stateDatas.put(idSD,stateData);\r
                                        }\r
                                                termVocabularyState.addTerm(state);\r
                                                stateDatas.put(idSD,stateData);\r
                                        }\r
-\r
                                        categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
                                        features.put(idCC, categoricalCharacter);\r
 \r
                                        categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
                                        features.put(idCC, categoricalCharacter);\r
 \r
@@ -903,6 +1026,16 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                NonViralName taxonNameBase = taxonNameBases.get(ref);\r
                                                taxon = Taxon.NewInstance(taxonNameBase, sec);\r
                                        }\r
                                                NonViralName taxonNameBase = taxonNameBases.get(ref);\r
                                                taxon = Taxon.NewInstance(taxonNameBase, sec);\r
                                        }\r
+                                       else {\r
+                                               NonViralName tnb = NonViralName.NewInstance(null);\r
+                                               String id = new String(""+taxonNamesCount);\r
+                                               IdentifiableSource source = IdentifiableSource.NewInstance(id, "TaxonName");\r
+                                               importRepresentation(elCodedDescription, sddNamespace, tnb, id, sddConfig);\r
+                                               tnb.addSource(source);\r
+                                               taxonNameBases.put(id ,tnb);\r
+                                               taxonNamesCount++;\r
+                                               taxon = Taxon.NewInstance(tnb, sec);\r
+                                       }\r
 \r
                                        String refCitation = "";\r
                                        String location = "";\r
 \r
                                        String refCitation = "";\r
                                        String location = "";\r
@@ -925,7 +1058,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                int k = 0;\r
                                                //for each Categorical\r
                                                for (Element elCategorical : elCategoricals){\r
                                                int k = 0;\r
                                                //for each Categorical\r
                                                for (Element elCategorical : elCategoricals){\r
-                                                       if ((++k % modCount) == 0){ logger.info("Categorical handled: " + (k-1));}\r
+                                                       if ((++k % modCount) == 0){ logger.warn("Categorical handled: " + (k-1));}\r
                                                        ref = elCategorical.getAttributeValue("ref");\r
                                                        Feature feature = features.get(ref);\r
                                                        CategoricalData categoricalData = CategoricalData.NewInstance();\r
                                                        ref = elCategorical.getAttributeValue("ref");\r
                                                        Feature feature = features.get(ref);\r
                                                        CategoricalData categoricalData = CategoricalData.NewInstance();\r
@@ -949,7 +1082,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                k = 0;\r
                                                //for each Quantitative\r
                                                for (Element elQuantitative : elQuantitatives){\r
                                                k = 0;\r
                                                //for each Quantitative\r
                                                for (Element elQuantitative : elQuantitatives){\r
-                                                       if ((++k % modCount) == 0){ logger.info("Quantitative handled: " + (k-1));}\r
+                                                       if ((++k % modCount) == 0){ logger.warn("Quantitative handled: " + (k-1));}\r
                                                        ref = elQuantitative.getAttributeValue("ref");\r
                                                        Feature feature = features.get(ref);\r
                                                        QuantitativeData quantitativeData = QuantitativeData.NewInstance();\r
                                                        ref = elQuantitative.getAttributeValue("ref");\r
                                                        Feature feature = features.get(ref);\r
                                                        QuantitativeData quantitativeData = QuantitativeData.NewInstance();\r
@@ -969,12 +1102,17 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                        // <Measure type="Min" value="2.3"/>\r
                                                        List<Element> elMeasures = elQuantitative.getChildren("Measure", sddNamespace);\r
                                                        int l = 0;\r
                                                        // <Measure type="Min" value="2.3"/>\r
                                                        List<Element> elMeasures = elQuantitative.getChildren("Measure", sddNamespace);\r
                                                        int l = 0;\r
+                                                       \r
                                                        //for each State\r
                                                        for (Element elMeasure : elMeasures){\r
                                                                if ((++l % modCount) == 0){ logger.info("States handled: " + (l-1));}\r
                                                                String type = elMeasure.getAttributeValue("type");\r
                                                                String value = elMeasure.getAttributeValue("value");\r
                                                        //for each State\r
                                                        for (Element elMeasure : elMeasures){\r
                                                                if ((++l % modCount) == 0){ logger.info("States handled: " + (l-1));}\r
                                                                String type = elMeasure.getAttributeValue("type");\r
                                                                String value = elMeasure.getAttributeValue("value");\r
-                                                               float v = Float.parseFloat(value);\r
+                                                               if (value.contains(",")) {\r
+                                                                       value = value.replace(',', '.');\r
+                                                               }\r
+                                                               Float v = Float.parseFloat(value);\r
+                                                               //Float v = new Float(0);\r
                                                                StatisticalMeasure t = null;\r
                                                                if (type.equals("Min")) {\r
                                                                        t = StatisticalMeasure.MIN();\r
                                                                StatisticalMeasure t = null;\r
                                                                if (type.equals("Min")) {\r
                                                                        t = StatisticalMeasure.MIN();\r
@@ -983,10 +1121,15 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                                } else if (type.equals("Max")) {\r
                                                                        t = StatisticalMeasure.MAX();\r
                                                                } else if (type.equals("SD")) {\r
                                                                } else if (type.equals("Max")) {\r
                                                                        t = StatisticalMeasure.MAX();\r
                                                                } else if (type.equals("SD")) {\r
-                                                                       // Create a new StatisticalMeasure for standard deviation\r
                                                                        t = StatisticalMeasure.STANDARD_DEVIATION();\r
                                                                } else if (type.equals("N")) {\r
                                                                        t = StatisticalMeasure.SAMPLE_SIZE();\r
                                                                        t = StatisticalMeasure.STANDARD_DEVIATION();\r
                                                                } else if (type.equals("N")) {\r
                                                                        t = StatisticalMeasure.SAMPLE_SIZE();\r
+                                                               } else if (type.equals("UMethLower")) {\r
+                                                                       t = StatisticalMeasure.TYPICAL_LOWER_BOUNDARY();\r
+                                                               } else if (type.equals("UMethUpper")) {\r
+                                                                       t = StatisticalMeasure.TYPICAL_UPPER_BOUNDARY();\r
+                                                               } else if (type.equals("Var")) {\r
+                                                                       t = StatisticalMeasure.VARIANCE();\r
                                                                } else {\r
                                                                        t = StatisticalMeasure.NewInstance(type,type,type);\r
                                                                        statisticalMeasures.add(t);\r
                                                                } else {\r
                                                                        t = StatisticalMeasure.NewInstance(type,type,type);\r
                                                                        statisticalMeasures.add(t);\r
@@ -1031,10 +1174,10 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                        if (!location.equals("")){\r
                                                locations.put(idCD, location);\r
                                        }\r
                                        if (!location.equals("")){\r
                                                locations.put(idCD, location);\r
                                        }\r
-\r
+                                       \r
                                        taxonDescription.setDescriptiveSystem(featureSet);\r
 \r
                                        taxonDescription.setDescriptiveSystem(featureSet);\r
 \r
-                                       taxonDescriptions.put(idCD, taxonDescription);\r
+                                       taxonDescriptions.put(idCD, taxonDescription);//XIM PB ici\r
 \r
                                } catch (Exception e) {\r
                                        //FIXME\r
 \r
                                } catch (Exception e) {\r
                                        //FIXME\r
@@ -1054,73 +1197,75 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                // <Agents>\r
                logger.info("start Agents ...");\r
                Element elAgents = elDataset.getChild("Agents",sddNamespace);\r
                // <Agents>\r
                logger.info("start Agents ...");\r
                Element elAgents = elDataset.getChild("Agents",sddNamespace);\r
+               if (elAgents != null) {\r
+                       // <Agent id="a1">\r
+                       List <Element> listAgents = elAgents.getChildren("Agent", sddNamespace);\r
+                       int j = 0;\r
+                       //for each Agent\r
+                       for (Element elAgent : listAgents){\r
+\r
+                               try {\r
 \r
 \r
-               // <Agent id="a1">\r
-               List <Element> listAgents = elAgents.getChildren("Agent", sddNamespace);\r
-               int j = 0;\r
-               //for each Agent\r
-               for (Element elAgent : listAgents){\r
+                                       String idA = elAgent.getAttributeValue("id");\r
 \r
 \r
-                       try {\r
+                                       //  <Representation>\r
+                                       //   <Label>Kevin Thiele</Label>\r
+                                       //   <Detail role="Description">Ali Baba is also known as r.a.m.</Detail>\r
+                                       //  </Representation>\r
+                                       Person person = Person.NewInstance();\r
+                                       importRepresentation(elAgent, sddNamespace, person, idA, sddConfig);\r
+                                       person.addSource(IdentifiableSource.NewInstance(idA, "Agent"));\r
 \r
 \r
-                               String idA = elAgent.getAttributeValue("id");\r
+                                       /*XIM <Links>\r
+                                       Element elLinks = elAgent.getChild("Links",sddNamespace);\r
 \r
 \r
-                               //  <Representation>\r
-                               //   <Label>Kevin Thiele</Label>\r
-                               //   <Detail role="Description">Ali Baba is also known as r.a.m.</Detail>\r
-                               //  </Representation>\r
-                               Person person = Person.NewInstance();\r
-                               importRepresentation(elAgent, sddNamespace, person, idA, sddConfig);\r
-                               person.addSource(IdentifiableSource.NewInstance(idA, "Agent"));\r
+                                       if (elLinks != null) {\r
 \r
 \r
-                               // <Links>\r
-                               Element elLinks = elAgent.getChild("Links",sddNamespace);\r
+                                               //  <Link rel="Alternate" href="http://www.diversitycampus.net/people/hagedorn"/>\r
+                                               List<Element> listLinks = elLinks.getChildren("Link", sddNamespace);\r
+                                               int k = 0;\r
+                                               //for each Link\r
+                                               for (Element elLink : listLinks){\r
 \r
 \r
-                               if (elLinks != null) {\r
+                                                       try {\r
 \r
 \r
-                                       //  <Link rel="Alternate" href="http://www.diversitycampus.net/people/hagedorn"/>\r
-                                       List<Element> listLinks = elLinks.getChildren("Link", sddNamespace);\r
-                                       int k = 0;\r
-                                       //for each Link\r
-                                       for (Element elLink : listLinks){\r
+                                                               String rel = elLink.getAttributeValue("rel");\r
+                                                               String href = elLink.getAttributeValue("href");\r
 \r
 \r
-                                               try {\r
+                                                               Media link = Media.NewInstance();\r
+                                                               MediaRepresentation mr = MediaRepresentation.NewInstance();\r
+                                                               mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null));\r
+                                                               link.addRepresentation(mr);\r
+                                                               person.addMedia(link);\r
 \r
 \r
-                                                       String rel = elLink.getAttributeValue("rel");\r
-                                                       String href = elLink.getAttributeValue("href");\r
+                                                       } catch (Exception e) {\r
+                                                               //FIXME\r
+                                                               logger.warn("Import of Link " + k + " failed.");\r
+                                                               success = false; \r
+                                                       }\r
 \r
 \r
-                                                       Media link = Media.NewInstance();\r
-                                                       MediaRepresentation mr = MediaRepresentation.NewInstance();\r
-                                                       mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null));\r
-                                                       link.addRepresentation(mr);\r
-                                                       person.addMedia(link);\r
+                                                       if ((++k % modCount) == 0){ logger.info("Links handled: " + k);}\r
 \r
 \r
-                                               } catch (Exception e) {\r
-                                                       //FIXME\r
-                                                       logger.warn("Import of Link " + k + " failed.");\r
-                                                       success = false; \r
                                                }\r
                                                }\r
+                                       }\r
+                                       */\r
+                                       if (authors.containsKey(idA)) {\r
+                                               authors.put(idA,person);\r
+                                       }\r
 \r
 \r
-                                               if ((++k % modCount) == 0){ logger.info("Links handled: " + k);}\r
-\r
+                                       if (editors.containsKey(idA)) {\r
+                                               editors.put(idA, person);\r
                                        }\r
                                        }\r
-                               }\r
-                               if (authors.containsKey(idA)) {\r
-                                       authors.put(idA,person);\r
-                               }\r
 \r
 \r
-                               if (editors.containsKey(idA)) {\r
-                                       editors.put(idA, person);\r
+                               } catch (Exception e) {\r
+                                       //FIXME\r
+                                       logger.warn("Import of Agent " + j + " failed.");\r
+                                       success = false; \r
                                }\r
 \r
                                }\r
 \r
-                       } catch (Exception e) {\r
-                               //FIXME\r
-                               logger.warn("Import of Agent " + j + " failed.");\r
-                               success = false; \r
-                       }\r
-\r
-                       if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
+                               if ((++j % modCount) == 0){ logger.info("Agents handled: " + j);}\r
 \r
 \r
+                       }\r
                }\r
        }\r
 \r
                }\r
        }\r
 \r
@@ -1177,7 +1322,6 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                String id = "";\r
 \r
                                try {\r
                                String id = "";\r
 \r
                                try {\r
-\r
                                        String idMO = elMO.getAttributeValue("id");\r
                                        id = idMO;\r
 \r
                                        String idMO = elMO.getAttributeValue("id");\r
                                        id = idMO;\r
 \r
@@ -1197,12 +1341,11 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
 \r
                                                ImageMetaData imageMetaData = ImageMetaData.newInstance();\r
                                                ImageFile image = null;\r
 \r
                                                ImageMetaData imageMetaData = ImageMetaData.newInstance();\r
                                                ImageFile image = null;\r
-\r
                                                if (href.substring(0,7).equals("http://")) {\r
                                                        try{\r
                                                                URL url = new URL(href);\r
                                                                \r
                                                if (href.substring(0,7).equals("http://")) {\r
                                                        try{\r
                                                                URL url = new URL(href);\r
                                                                \r
-                                                               imageMetaData.readMetaData(url.toURI());\r
+                                                               imageMetaData.readMetaData(url.toURI(), 0);\r
                                                                image = ImageFile.NewInstance(url.toString(), null, imageMetaData);\r
                                                        } catch (MalformedURLException e) {\r
                                                                logger.error("Malformed URL", e);\r
                                                                image = ImageFile.NewInstance(url.toString(), null, imageMetaData);\r
                                                        } catch (MalformedURLException e) {\r
                                                                logger.error("Malformed URL", e);\r
@@ -1211,12 +1354,12 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                        String sns = sddConfig.getSourceNameString();\r
                                                        File f = new File(sns);\r
                                                        File parent = f.getParentFile();\r
                                                        String sns = sddConfig.getSourceNameString();\r
                                                        File f = new File(sns);\r
                                                        File parent = f.getParentFile();\r
-                                                       String fi = parent.toString() + File.separator + href;\r
+                                                       String fi = href;\r
+                                                       //XIMString fi = parent.toString() + File.separator + href; enlever le file:/ ou truc du genre\r
                                                        File file = new File(fi);\r
                                                        File file = new File(fi);\r
-                                                       imageMetaData.readMetaData(file.toURI());\r
+                                                       imageMetaData.readMetaData(file.toURI(), 0);\r
                                                        image = ImageFile.NewInstance(file.toString(), null, imageMetaData);\r
                                                }\r
                                                        image = ImageFile.NewInstance(file.toString(), null, imageMetaData);\r
                                                }\r
-\r
                                                MediaRepresentation representation = MediaRepresentation.NewInstance(imageMetaData.getMimeType(), null);\r
                                                representation.addRepresentationPart(image);\r
 \r
                                                MediaRepresentation representation = MediaRepresentation.NewInstance(imageMetaData.getMimeType(), null);\r
                                                representation.addRepresentationPart(image);\r
 \r
@@ -1232,6 +1375,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                                        //                                                                      if (dtb!=null) {\r
                                                                        //                                                                              if (k == 0) {\r
                                                                        dtb.addMedia(media);\r
                                                                        //                                                                      if (dtb!=null) {\r
                                                                        //                                                                              if (k == 0) {\r
                                                                        dtb.addMedia(media);\r
+                                                                       //System.out.println(dtb.getLabel());\r
                                                                        //                                                                              } else {\r
                                                                        //                                                                                      Media me = (Media) media.clone();\r
                                                                        //                                                                                      dtb.addMedia(me);\r
                                                                        //                                                                              } else {\r
                                                                        //                                                                                      Media me = (Media) media.clone();\r
                                                                        //                                                                                      dtb.addMedia(me);\r
@@ -1245,19 +1389,23 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                                        //                                                                      if (rb!=null) {\r
                                                                        //                                                                              if (k == 0) {\r
                                                                        rb.addMedia(media);\r
                                                                        //                                                                      if (rb!=null) {\r
                                                                        //                                                                              if (k == 0) {\r
                                                                        rb.addMedia(media);\r
+                                                                       //System.out.println(rb.getTitle());\r
                                                                        //                                                                              } else {\r
                                                                        //                                                                                      Media me = (Media) media.clone();\r
                                                                        //                                                                                      rb.addMedia(me);\r
                                                                        //                                                                              }\r
                                                                        //                                                                      }\r
                                                                        //                                                                              } else {\r
                                                                        //                                                                                      Media me = (Media) media.clone();\r
                                                                        //                                                                                      rb.addMedia(me);\r
                                                                        //                                                                              }\r
                                                                        //                                                                      }\r
-                                                               }\r
+                                                               }/* else if (lcb.get(k) instanceof TaxonNameBase){\r
+                                                                       TaxonNameBase tb = (TaxonNameBase) lcb.get(k);\r
+                                                                       tb.addMedia(media);\r
+                                                       }*/\r
                                                        }\r
                                                }\r
                                        }\r
 \r
                                } catch (Exception e) {\r
                                        //FIXME\r
                                                        }\r
                                                }\r
                                        }\r
 \r
                                } catch (Exception e) {\r
                                        //FIXME\r
-                                       logger.warn("Could not attached MediaObject " + j + "(SDD: " + id + ") to several objects.");\r
+                                       logger.warn("Could not attach MediaObject " + j + "(SDD: " + id + ") to several objects.");\r
                                        success = false; \r
                                }\r
 \r
                                        success = false; \r
                                }\r
 \r
@@ -1279,6 +1427,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        int j = 0;\r
                        //for each DescriptiveConcept\r
                        int g = 1;\r
                        int j = 0;\r
                        //for each DescriptiveConcept\r
                        int g = 1;\r
+\r
                        for (Element elDescriptiveConcept : listDescriptiveConcepts){\r
 \r
                                String id = elDescriptiveConcept.getAttributeValue("id");\r
                        for (Element elDescriptiveConcept : listDescriptiveConcepts){\r
 \r
                                String id = elDescriptiveConcept.getAttributeValue("id");\r
@@ -1293,8 +1442,22 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                        //       <Representation>\r
                                        //       <Label>Body</Label>\r
                                        importRepresentation(elDescriptiveConcept, sddNamespace, feature, id, sddConfig);\r
                                        //       <Representation>\r
                                        //       <Label>Body</Label>\r
                                        importRepresentation(elDescriptiveConcept, sddNamespace, feature, id, sddConfig);\r
+                                       //System.out.println(feature.getLabel()+id);\r
                                        features.put("g" + g, feature);\r
                                        g++;\r
                                        features.put("g" + g, feature);\r
                                        g++;\r
+                                       /*Element elModifiers = elDescriptiveConcept.getChild("Modifiers", sddNamespace);\r
+                                       if (elModifiers !=null){\r
+                                               List<Element> listModifiers = elModifiers.getChildren("Modifier", sddNamespace);\r
+                                               for (Element elModifier : listModifiers) {\r
+                                                               TermVocabulary<Modifier> termVocabularyState = new TermVocabulary<Modifier>("test","test","test","test");\r
+                                                               Modifier modif = Modifier.NewInstance();\r
+                                                               String idmod = elModifier.getAttributeValue("id");\r
+                                                               importRepresentation(elModifier, sddNamespace, modif, idmod, sddConfig);\r
+                                                               termVocabularyState.addTerm(modif);\r
+                                                               //XIMfeature.addRecommendedModifierEnumeration(termVocabularyState);\r
+                                               }\r
+                                       }*/\r
+                                       \r
                                        fn.setFeature(feature);\r
 \r
                                        //      TODO if an OriginalSource can be attached to a FeatureNode or a Feature         \r
                                        fn.setFeature(feature);\r
 \r
                                        //      TODO if an OriginalSource can be attached to a FeatureNode or a Feature         \r
@@ -1306,7 +1469,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                        //                                      } else {\r
                                        //                                              source = OriginalSource.NewInstance(id, "DescriptiveConcept");\r
                                        //                                      }\r
                                        //                                      } else {\r
                                        //                                              source = OriginalSource.NewInstance(id, "DescriptiveConcept");\r
                                        //                                      }\r
-                                       //                                      fn.addSource(source);\r
+                                       //                                      f.addSource(source);\r
 \r
                                        featureNodes.put(id,fn);\r
                                }\r
 \r
                                        featureNodes.put(id,fn);\r
                                }\r
@@ -1316,8 +1479,7 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        }\r
                }\r
        }\r
                        }\r
                }\r
        }\r
-\r
-       // imports the descriptions of taxa (specimens TODO)\r
+       \r
        protected void importCharacterTrees(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
                // <CharacterTrees>\r
                logger.info("start CharacterTrees ...");\r
        protected void importCharacterTrees(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
                // <CharacterTrees>\r
                logger.info("start CharacterTrees ...");\r
@@ -1329,7 +1491,193 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                        List<Element> listCharacterTrees = elCharacterTrees.getChildren("CharacterTree", sddNamespace);\r
                        int j = 0;\r
                        //for each CharacterTree\r
                        List<Element> listCharacterTrees = elCharacterTrees.getChildren("CharacterTree", sddNamespace);\r
                        int j = 0;\r
                        //for each CharacterTree\r
+                       for (Element elCharacterTree : listCharacterTrees){\r
+                               try {\r
+                                       Element elRepresentation = elCharacterTree.getChild("Representation",sddNamespace);\r
+                                       String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace);\r
+                                       Element elDesignedFor = elCharacterTree.getChild("DesignedFor",sddNamespace);\r
+                                       /*XIMList<Element> listRoles = elDesignedFor.getChildren("Role",sddNamespace);\r
+                                       boolean isgroups = false;\r
+\r
+                                       for (Element elRole : listRoles){\r
+                                               if (elRole.getText().equals("Filtering")) {\r
+                                                       isgroups = true;\r
+                                               }\r
+                                       }*/\r
+\r
+                                       // only treats the case of flat groups containing characters\r
+                                       // should also be added: dependencies between characters, \r
+                                       //XIM\r
+\r
+                                               FeatureTree feattree =  FeatureTree.NewInstance();\r
+                                               importRepresentation(elCharacterTree, sddNamespace, feattree, "", sddConfig);\r
+                                               FeatureNode root = feattree.getRoot();\r
+                                               //XIM several <Nodes> found in some files, is it correct ?\r
+                                               List<Element> listelNodes = elCharacterTree.getChildren("Nodes", sddNamespace);\r
+                                               for (Element elNodes : listelNodes) {\r
+                                                       List<Element> listNodes = elNodes.getChildren("Node", sddNamespace);\r
+                                                       if (listNodes != null) {\r
+                                                               for (Element elNode : listNodes){\r
+                                                                       String idN = elNode.getAttributeValue("id");\r
+                                                                       FeatureNode fn = null;\r
+                                                                       if (!idN.equals("")) {\r
+                                                                               Element elDescriptiveConcept = elNode.getChild("DescriptiveConcept", sddNamespace);\r
+                                                                               if (elDescriptiveConcept != null){\r
+                                                                                       String refDC = elDescriptiveConcept.getAttributeValue("ref");\r
+                                                                                       //System.out.println(refDC);\r
+                                                                                       fn = featureNodes.get(refDC);\r
+                                                                               }\r
+                                                                               else {\r
+                                                                                       fn = FeatureNode.NewInstance();\r
+                                                                                       featureNodes.put(idN,fn);\r
+                                                                               }\r
+                                                                               Element elParent = elNode.getChild("Parent", sddNamespace);\r
+                                                                               if (elParent!=null){\r
+                                                                                       String refP = elParent.getAttributeValue("ref");\r
+                                                                                       if (!refP.equals("")) {\r
+                                                                                               FeatureNode parent = nodes.get(refP);\r
+                                                                                               parent.addChild(fn);\r
+                                                                                       }\r
+                                                                               }\r
+                                                                               else {\r
+                                                                                       fn = FeatureNode.NewInstance();\r
+                                                                                       root.addChild(fn);\r
+                                                                               }\r
+                                                                       }\r
+                                                                       nodes.put(idN, fn);\r
+                                                               }\r
+                                                               //System.out.println("zic");\r
+                                                               List<Element> listCharNodes = elNodes.getChildren("CharNode", sddNamespace);\r
+                                                               for (Element elCharNode : listCharNodes){\r
+                                                                       Element elParent = elCharNode.getChild("Parent", sddNamespace);\r
+                                                                       Element elCharacter = elCharNode.getChild("Character", sddNamespace);                                                   \r
+                                                                       FeatureNode fn = FeatureNode.NewInstance();\r
+                                                                       if (elParent!=null){\r
+                                                                               String refP = elParent.getAttributeValue("ref");\r
+                                                                               if ((refP!=null)&&(!refP.equals(""))) {\r
+                                                                                       FeatureNode parent = nodes.get(refP);\r
+                                                                                       if (parent==null){\r
+                                                                                               parent = root; // because of Delta example\r
+                                                                                       }\r
+                                                                                       parent.addChild(fn);\r
+                                                                               }\r
+                                                                       }\r
+                                                                       String refC = elCharacter.getAttributeValue("ref");\r
+                                                                       if ((refC!=null)&&(!refC.equals(""))){\r
+                                                                               Feature character = features.get(refC);\r
+                                                                               fn.setFeature(character);\r
+                                                                               // if method setParent() in FeatureNode becomes visible\r
+                                                                               // fn.setParent(parent);\r
+                                                                       }\r
+                                                                       else {\r
+                                                                               refC = String.valueOf(taxonNamesCount);\r
+                                                                               taxonNamesCount++;\r
+                                                                       }\r
+                                                                       nodes.put(refC, fn);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                               featureTrees.add(feattree);\r
+                                       }\r
+\r
+                               catch (Exception e) {\r
+                                       //FIXME\r
+                                       logger.warn("Import of Character tree " + j + " failed.");\r
+                                       success = false; \r
+                               }\r
+\r
+                               if ((++j % modCount) == 0){ logger.info("CharacterTrees handled: " + j);}\r
+\r
+                       }\r
+\r
+               }\r
+       }\r
 \r
 \r
+       \r
+       \r
+       \r
+       \r
+       protected void importTaxonHierarchies(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+\r
+               logger.info("start TaxonHierarchies ...");\r
+               Element elTaxonHierarchies = elDataset.getChild("TaxonHierarchies",sddNamespace);\r
+\r
+               if (elTaxonHierarchies != null) {\r
+                       List<Element> listTaxonHierarchies = elTaxonHierarchies.getChildren("TaxonHierarchy", sddNamespace);\r
+                       int j = 0;\r
+                       for (Element elTaxonHierarchy : listTaxonHierarchies){\r
+                               try {\r
+                                       Element elRepresentation = elTaxonHierarchy.getChild("Representation",sddNamespace);\r
+                                       String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace);\r
+\r
+                                               TaxonomicTree taxonomicTree =  TaxonomicTree.NewInstance(label);\r
+                                               importRepresentation(elTaxonHierarchy, sddNamespace, taxonomicTree, "", sddConfig);\r
+                                               Set<TaxonNode> root = taxonomicTree.getRootNodes();\r
+                                               Element elNodes = elTaxonHierarchy.getChild("Nodes", sddNamespace);\r
+                                               List<Element> listNodes = elNodes.getChildren("Node", sddNamespace);\r
+                                               for (Element elNode : listNodes){\r
+                                                       String idN = elNode.getAttributeValue("id");\r
+                                                       TaxonNameBase tnb = null;\r
+                                                       if (!idN.equals("")) {\r
+                                                               Element elTaxonName = elNode.getChild("TaxonName", sddNamespace);\r
+                                                               String refTN = elTaxonName.getAttributeValue("ref");\r
+                                                               tnb = taxonNameBases.get(refTN);\r
+                                                               Taxon taxonou = (Taxon) tnb.getTaxa().iterator().next() ;\r
+                                                               Element elParent = elNode.getChild("Parent", sddNamespace);\r
+                                                               if (elParent!=null){\r
+                                                                       String refP = elParent.getAttributeValue("ref");\r
+                                                                       if (!refP.equals("")) {\r
+                                                                               TaxonNode parent = taxonNodes.get(refP);\r
+                                                                               //TaxonNode child = parent.addChildTaxon(Taxon.NewInstance(tnb, sec), sec, "", Synonym.NewInstance(tnb, sec));\r
+                                                                               TaxonNode child = parent.addChildTaxon(taxonou, sec, "", Synonym.NewInstance(tnb, sec));\r
+                                                                               taxonNodes.put(idN,child);\r
+                                                                       }\r
+                                                               }\r
+                                                               else {\r
+                                                                       //XIM addChildtaxon (taxon, referencebase ???\r
+                                                                       //TaxonNode tn = taxonomicTree.addChildTaxon(Taxon.NewInstance(tnb, sec), sec, "", Synonym.NewInstance(tnb, sec));\r
+                                                                       TaxonNode tn = taxonomicTree.addChildTaxon(taxonou, sec, "", Synonym.NewInstance(tnb, sec));\r
+                                                                       taxonNodes.put(idN,tn);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               taxonomicTrees.add(taxonomicTree);\r
+                                       }\r
+\r
+                               catch (Exception e) {\r
+                                       //FIXME\r
+                                       logger.warn("Import of Taxon Hierarchy " + j + " failed.");\r
+                                       success = false; \r
+                               }\r
+\r
+                               if ((++j % modCount) == 0){ logger.info("TaxonHierarchies handled: " + j);}\r
+\r
+                       }\r
+\r
+               }\r
+       }\r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \r
+       // imports the descriptions of taxa (specimens TODO)\r
+       protected void importCharacterTrees2(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+               // <CharacterTrees>\r
+               logger.info("start CharacterTrees ...");\r
+               Element elCharacterTrees = elDataset.getChild("CharacterTrees",sddNamespace);\r
+\r
+               // <CharacterTree>\r
+\r
+               if (elCharacterTrees != null) {\r
+                       List<Element> listCharacterTrees = elCharacterTrees.getChildren("CharacterTree", sddNamespace);\r
+                       int j = 0;\r
+                       //for each CharacterTree\r
                        for (Element elCharacterTree : listCharacterTrees){\r
 \r
                                try {\r
                        for (Element elCharacterTree : listCharacterTrees){\r
 \r
                                try {\r
@@ -1347,13 +1695,13 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
 \r
                                        // only treats the case of flat groups containing characters\r
                                        // should also be added: dependencies between characters, \r
 \r
                                        // only treats the case of flat groups containing characters\r
                                        // should also be added: dependencies between characters, \r
-\r
-                                       if ((label.contains("group")) || (isgroups)) {\r
+                                       //XIM\r
+                                       if ((label.contains("group")) || (isgroups) || (1==1)) {\r
 \r
                                                FeatureTree groups =  FeatureTree.NewInstance();\r
                                                importRepresentation(elCharacterTree, sddNamespace, groups, "", sddConfig);\r
                                                FeatureNode root = groups.getRoot();\r
 \r
                                                FeatureTree groups =  FeatureTree.NewInstance();\r
                                                importRepresentation(elCharacterTree, sddNamespace, groups, "", sddConfig);\r
                                                FeatureNode root = groups.getRoot();\r
-\r
+                                               \r
                                                Element elNodes = elCharacterTree.getChild("Nodes", sddNamespace);\r
                                                List<Element> listNodes = elNodes.getChildren("Node", sddNamespace);\r
                                                for (Element elNode : listNodes){\r
                                                Element elNodes = elCharacterTree.getChild("Nodes", sddNamespace);\r
                                                List<Element> listNodes = elNodes.getChildren("Node", sddNamespace);\r
                                                for (Element elNode : listNodes){\r
@@ -1371,13 +1719,17 @@ public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDIm
                                                List<Element> listCharNodes = elNodes.getChildren("CharNode", sddNamespace);\r
                                                for (Element elCharNode : listCharNodes){\r
                                                        Element elParent = elCharNode.getChild("Parent", sddNamespace);\r
                                                List<Element> listCharNodes = elNodes.getChildren("CharNode", sddNamespace);\r
                                                for (Element elCharNode : listCharNodes){\r
                                                        Element elParent = elCharNode.getChild("Parent", sddNamespace);\r
-                                                       String refP = elParent.getAttributeValue("ref");\r
-                                                       Element elCharacter = elCharNode.getChild("Character", sddNamespace);\r
-                                                       String refC = elCharacter.getAttributeValue("ref");\r
+                                                       Element elCharacter = elCharNode.getChild("Character", sddNamespace);                                                   \r
                                                        FeatureNode fn = FeatureNode.NewInstance();\r
                                                        FeatureNode fn = FeatureNode.NewInstance();\r
-                                                       if (!refP.equals("")) {\r
-                                                               FeatureNode parent = nodes.get(refP);\r
-                                                               parent.addChild(fn);\r
+                                                       if (elParent!=null){\r
+                                                               String refP = elParent.getAttributeValue("ref");\r
+                                                               if (!refP.equals("")) {\r
+                                                                       FeatureNode parent = nodes.get(refP);\r
+                                                                       parent.addChild(fn);\r
+                                                               }\r
+                                                       }\r
+                                                       String refC = elCharacter.getAttributeValue("ref");\r
+                                                       if (!refC.equals("")){\r
                                                                Feature character = features.get(refC);\r
                                                                fn.setFeature(character);\r
                                                                // if method setParent() in FeatureNode becomes visible\r
                                                                Feature character = features.get(refC);\r
                                                                fn.setFeature(character);\r
                                                                // if method setParent() in FeatureNode becomes visible\r