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
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
* @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
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
}\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
/* (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
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
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
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
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
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
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
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
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
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
}\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
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