minor
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / sdd / SDDDescriptionIO.java
index 4bef45cadac3bb56d153ff2e942766f2c21bda72..6fe8a9aff8d305b41c045236ec2c7d3d72e59a89 100644 (file)
@@ -14,9 +14,7 @@ import java.net.MalformedURLException;
 import java.net.URL;\r
 import java.text.SimpleDateFormat;\r
 import java.util.ArrayList;\r
-import java.util.Collection;\r
 import java.util.Date;\r
-import java.util.GregorianCalendar;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Iterator;\r
@@ -31,23 +29,27 @@ import org.joda.time.DateTime;
 import org.springframework.stereotype.Component;\r
 import org.springframework.transaction.TransactionStatus;\r
 \r
+import eu.etaxonomy.cdm.api.service.IAgentService;\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.common.MediaMetaData.ImageMetaData;\r
+import eu.etaxonomy.cdm.io.common.CdmImportBase;\r
+import eu.etaxonomy.cdm.io.common.CdmIoBase;\r
 import eu.etaxonomy.cdm.io.common.ICdmIO;\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.io.common.MapWrapper;\r
 import eu.etaxonomy.cdm.model.agent.Person;\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.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.LanguageString;\r
-import eu.etaxonomy.cdm.model.common.MultilanguageText;\r
 import eu.etaxonomy.cdm.model.common.OriginalSource;\r
 import eu.etaxonomy.cdm.model.common.Representation;\r
 import eu.etaxonomy.cdm.model.common.TermBase;\r
@@ -84,7 +86,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  * @version 1.0\r
  */\r
 @Component("sddDescriptionIO")\r
-public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigurator> {\r
+public class SDDDescriptionIO extends CdmImportBase<SDDImportConfigurator, SDDImportState> implements ICdmImport<SDDImportConfigurator, SDDImportState> {\r
        private static final Logger logger = Logger.getLogger(SDDDescriptionIO.class);\r
 \r
        private static int modCount = 1000;\r
@@ -104,6 +106,9 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
        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
+       \r
+       private Set<AnnotationType> annotationTypes = new HashSet<AnnotationType>();\r
+       private Set<Feature> featureSet = new HashSet<Feature>();\r
 \r
        private ReferenceBase sec = Database.NewInstance();\r
        private ReferenceBase sourceReference = null;\r
@@ -126,17 +131,19 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
        }\r
 \r
        @Override\r
-       public boolean doCheck(IImportConfigurator config){\r
+       public boolean doCheck(SDDImportState state){\r
                boolean result = true;\r
                logger.warn("No check implemented for SDD");\r
                return result;\r
        }\r
 \r
-       @Override\r
-       public boolean doInvoke(IImportConfigurator config, Map<String, MapWrapper<? extends CdmBase>> stores){\r
+//     @Override\r
+//     public boolean doInvoke(IImportConfigurator config, Map<String, MapWrapper<? extends CdmBase>> stores){\r
+               @Override\r
+               public boolean doInvoke(SDDImportState state){\r
 \r
                TransactionStatus ts = startTransaction();\r
-               SDDImportConfigurator sddConfig = (SDDImportConfigurator)config;\r
+               SDDImportConfigurator sddConfig = state.getConfig();\r
 \r
                logger.info("start Datasets ...");\r
                // <Datasets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://rs.tdwg.org/UBIF/2006/" xsi:schemaLocation="http://rs.tdwg.org/UBIF/2006/ ../SDD.xsd">\r
@@ -164,7 +171,7 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
         */\r
-       protected boolean isIgnore(IImportConfigurator config){\r
+       protected boolean isIgnore(SDDImportState state){\r
                return false;\r
        }\r
 \r
@@ -327,9 +334,7 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
                                Language lang = l.next();\r
                                List<String> labDet = langLabDet.get(lang);\r
                                if (labDet.get(0) != null){\r
-                                       MultilanguageText mt = MultilanguageText.NewInstance();\r
-                                       mt.add(LanguageString.NewInstance(labDet.get(0), lang));\r
-                                       m.setTitle(mt);\r
+                                       m.addTitle(LanguageString.NewInstance(labDet.get(0), lang));\r
                                }\r
                                if (labDet.size()>1) {\r
                                        m.addDescription(labDet.get(1), lang);\r
@@ -432,8 +437,9 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
                        for (Iterator<Person> editor = editors.values().iterator() ; editor.hasNext() ;){\r
                                ed = editor.next();\r
                        }\r
-                       sec.setUpdatedBy(ed);\r
-                       sourceReference.setUpdatedBy(ed);\r
+                       // TODO updatedBy refactored to use a user account, so setting a person is no longer applicable\r
+//                     sec.setUpdatedBy(ed);\r
+//                     sourceReference.setUpdatedBy(ed);\r
                }\r
 \r
                if (copyright != null) {\r
@@ -448,7 +454,11 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
                        if (citations.containsKey(ref)) {\r
                                Article publication = (Article) publications.get(citations.get(ref));\r
                                if (locations.containsKey(ref)) {\r
-                                       publication.addAnnotation(Annotation.NewInstance(locations.get(ref), datasetLanguage));\r
+                                       Annotation location = Annotation.NewInstance(locations.get(ref), datasetLanguage);\r
+                                       AnnotationType annotationType = AnnotationType.NewInstance("", "location", "");\r
+                                       annotationTypes.add(annotationType);\r
+                                       location.setAnnotationType(annotationType);\r
+                                       publication.addAnnotation(location);\r
                                }\r
                                td.addDescriptionSource(publication);\r
                        }\r
@@ -479,6 +489,11 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
                StatisticalMeasure sm = k.next();\r
                termService.saveTerm(sm); \r
        }\r
+       \r
+       for (Iterator<AnnotationType> at = annotationTypes.iterator() ; at.hasNext() ;) {\r
+               AnnotationType annotationType = at.next();\r
+               termService.saveTerm(annotationType); \r
+       }\r
 \r
        IReferenceService referenceService = getReferenceService();\r
        // referenceService.saveReference(sourceReference); \r
@@ -487,9 +502,20 @@ public class SDDDescriptionIO extends SDDIoBase implements ICdmIO<IImportConfigu
                referenceService.saveReference(publication); \r
        }\r
 \r
+       IAgentService agentService = getAgentService();\r
+       for (Iterator<Person> p = authors.values().iterator() ; p.hasNext() ;) {\r
+               Person person = p.next();\r
+               agentService.saveAgent(person);\r
+       }\r
+       \r
+       for (Iterator<Person> p = editors.values().iterator() ; p.hasNext() ;) {\r
+               Person person = p.next();\r
+               agentService.saveAgent(person);\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
@@ -566,10 +592,9 @@ protected void importRevisionData(Element elDataset, Namespace sddNamespace){
                        e.printStackTrace();\r
                }\r
 \r
-               GregorianCalendar updated = null;\r
+               DateTime updated = null;\r
                if (d != null) {\r
-                       updated = new java.util.GregorianCalendar();\r
-                       updated.setTime(d);\r
+                       updated = new DateTime(d);\r
                        sourceReference.setUpdated(updated);\r
                        sec.setUpdated(updated);\r
                }\r
@@ -689,8 +714,7 @@ protected void importCharacters(Element elDataset, Namespace sddNamespace, SDDIm
                                Feature categoricalCharacter = Feature.NewInstance();\r
                                importRepresentation(elCategoricalCharacter, sddNamespace, categoricalCharacter, idCC, sddConfig);\r
 \r
-                               categoricalCharacter.setSupportsQuantitativeData(false);\r
-                               categoricalCharacter.setSupportsTextData(false);\r
+                               categoricalCharacter.setSupportsCategoricalData(true);\r
 \r
                                // <States>\r
                                Element elStates = elCategoricalCharacter.getChild("States",sddNamespace);\r
@@ -749,7 +773,6 @@ protected void importCharacters(Element elDataset, Namespace sddNamespace, SDDIm
                                importRepresentation(elQuantitativeCharacter, sddNamespace, quantitativeCharacter, idQC, sddConfig);\r
 \r
                                quantitativeCharacter.setSupportsQuantitativeData(true);\r
-                               quantitativeCharacter.setSupportsTextData(false);\r
 \r
                                // <MeasurementUnit>\r
                                //  <Label role="Abbrev">m</Label>\r
@@ -817,7 +840,6 @@ protected void importCharacters(Element elDataset, Namespace sddNamespace, SDDIm
                                Feature textCharacter = Feature.NewInstance();\r
                                importRepresentation(elTextCharacter, sddNamespace, textCharacter, idTC, sddConfig);\r
 \r
-                               textCharacter.setSupportsQuantitativeData(false);\r
                                textCharacter.setSupportsTextData(true);\r
 \r
                                features.put(idTC, textCharacter);\r
@@ -833,6 +855,11 @@ protected void importCharacters(Element elDataset, Namespace sddNamespace, SDDIm
                }\r
 \r
        }\r
+       \r
+       for (Iterator<Feature> f = features.values().iterator() ; f.hasNext() ;){\r
+               featureSet.add(f.next());\r
+       }\r
+       \r
 }\r
 \r
 // imports the descriptions of taxa (specimens TODO)\r
@@ -1002,7 +1029,9 @@ protected void importCodedDescriptions(Element elDataset, Namespace sddNamespace
                                if (!location.equals("")){\r
                                        locations.put(idCD, location);\r
                                }\r
-\r
+                               \r
+                               taxonDescription.setDescriptiveSystem(featureSet);\r
+                               \r
                                taxonDescriptions.put(idCD, taxonDescription);\r
 \r
                        } catch (Exception e) {\r