\r
import java.io.File;\r
import java.net.MalformedURLException;\r
+import java.net.URI;\r
import java.net.URL;\r
import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\r
import java.util.Date;\r
import java.util.HashMap;\r
import java.util.HashSet;\r
-import java.util.Iterator;\r
import java.util.List;\r
import java.util.Map;\r
import java.util.Set;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
import org.jdom.Element;\r
import org.jdom.Namespace;\r
import org.springframework.transaction.TransactionStatus;\r
\r
import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
-import eu.etaxonomy.cdm.api.service.IReferenceService;\r
-import eu.etaxonomy.cdm.api.service.ITaxonService;\r
-import eu.etaxonomy.cdm.api.service.ITermService;\r
+import eu.etaxonomy.cdm.common.IProgressMonitor;\r
import eu.etaxonomy.cdm.common.mediaMetaData.ImageMetaData;\r
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
import eu.etaxonomy.cdm.io.common.CdmImportBase;\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.sdd.SDDTransformer;\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.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.WorkingSet;\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;\r
import eu.etaxonomy.cdm.model.media.ImageFile;\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.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
+import eu.etaxonomy.cdm.model.taxon.Classification;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
\r
/**\r
* @author h.fradin\r
* @created 24.10.2008\r
* @version 1.0\r
*/\r
-@Component("sddDescriptionIO")\r
+@Component("sddImport")\r
public class SDDImport extends CdmImportBase<SDDImportConfigurator, SDDImportState> implements ICdmImport<SDDImportConfigurator, SDDImportState> {\r
private static final Logger logger = Logger.getLogger(SDDImport.class);\r
\r
private Map<String,String> locations = new HashMap<String,String>();\r
private Map<String,List<CdmBase>> mediaObject_ListCdmBase = new HashMap<String,List<CdmBase>>();\r
private Map<String,String> mediaObject_Role = new HashMap<String,String>();\r
- private Map<String,ReferenceBase> publications = new HashMap<String,ReferenceBase>();\r
- private Map<String,StateData> stateDatas = new HashMap<String,StateData>();\r
+ private Map<String,Reference> publications = new HashMap<String,Reference>();\r
private Map<String,State> states = new HashMap<String,State>();\r
private Map<String,TaxonDescription> taxonDescriptions = new HashMap<String,TaxonDescription>();\r
private Map<String,NonViralName> taxonNameBases = new HashMap<String,NonViralName>();\r
private Map<String,Modifier> modifiers = new HashMap<String,Modifier>();\r
\r
private Set<MarkerType> markerTypes = new HashSet<MarkerType>();\r
+ private Set<TermVocabulary> vocabularies = new HashSet<TermVocabulary>();\r
\r
private Set<Feature> descriptiveConcepts = new HashSet<Feature>();\r
- private Set<TermVocabulary<Modifier>> termVocabularyStates = new HashSet<TermVocabulary<Modifier>>();\r
private Set<AnnotationType> annotationTypes = new HashSet<AnnotationType>();\r
- private Set<Feature> featureSet = new HashSet<Feature>();\r
- private ReferenceBase sec = ReferenceFactory.newDatabase();\r
- private ReferenceBase sourceReference = null;\r
+// private Set<Feature> featureSet = new HashSet<Feature>();\r
+ private Set<Reference> sources = new HashSet<Reference>();\r
+ private Reference sec = ReferenceFactory.newDatabase();\r
+ private Reference sourceReference = null;\r
\r
private Language datasetLanguage = null;\r
+ private WorkingSet workingSet = null;\r
\r
private Namespace xmlNamespace = Namespace.getNamespace("xml","http://www.w3.org/XML/1998/namespace");\r
\r
private String generatorName = "";\r
private String generatorVersion = "";\r
+ \r
\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
+ private Set<Classification> classifications = new HashSet<Classification>();\r
\r
private Rights copyright = null;\r
\r
- private int taxonNamesCount = 0; //XIM ajout\r
+ private int taxonNamesCount = 0;\r
\r
public SDDImport(){\r
super();\r
\r
TransactionStatus ts = startTransaction();\r
SDDImportConfigurator sddConfig = state.getConfig();\r
-\r
+ IProgressMonitor progressMonitor = sddConfig.getProgressMonitor();\r
+ \r
logger.info("start Datasets ...");\r
+ \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
Element root = sddConfig.getSourceRoot();\r
Namespace sddNamespace = sddConfig.getSddNamespace();\r
\r
//for each Dataset\r
logger.info("start Dataset ...");\r
+ progressMonitor.beginTask("Importing SDD data", elDatasets.size());\r
for (Element elDataset : elDatasets){\r
- importDataset(elDataset, sddNamespace, success, sddConfig); \r
- if ((++i % modCount) == 0){ logger.info("Datasets handled: " + i);}\r
- logger.info(i + " Datasets handled");\r
+ success &= importDataset(elDataset, sddNamespace, state); \r
+// if ((++i % modCount) == 0){ logger.info("dataset(s) handled: " + i);}\r
+// logger.info(i + " dataset(s) handled");\r
+ progressMonitor.worked(1);\r
}\r
commitTransaction(ts);\r
+ progressMonitor.done();\r
+ logger.info("End of transaction");\r
return success;\r
}\r
\r
// associates the reference of a media object in SDD with a CdmBase Object\r
protected void associateImageWithCdmBase(String refMO, CdmBase cb){\r
if ((refMO != null) && (cb!=null)) {\r
- if (!refMO.equals("")) {\r
- if (!mediaObject_ListCdmBase.containsKey(refMO)) {\r
+ if (! refMO.equals("")) {\r
+ if (! mediaObject_ListCdmBase.containsKey(refMO)) {\r
List<CdmBase> lcb = new ArrayList<CdmBase>();\r
lcb.add(cb);\r
mediaObject_ListCdmBase.put(refMO,lcb);\r
<Detail>This is an example for a very simple SDD file, representing a single description with categorical, quantitative, and text character. Compare also the "Fragment*" examples, which contain more complex examples in the form of document fragments. Intended for version="SDD 1.1".</Detail>\r
</Representation>\r
*/\r
+\r
+ \r
+ \r
Element elRepresentation = parent.getChild("Representation",sddNamespace);\r
String label = (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace);\r
String detail = (String)ImportHelper.getXmlInputValue(elRepresentation, "Detail",sddNamespace);\r
+ \r
+ //new\r
+ Representation representation = Representation.NewInstance(detail, label, null, datasetLanguage);\r
+ workingSet.addRepresentation(representation);\r
+ \r
\r
- sec.setTitleCache(label, true);\r
-\r
- if (detail != null) {\r
- Annotation annotation = Annotation.NewInstance(detail, datasetLanguage);\r
- annotation.setAnnotationType(AnnotationType.EDITORIAL());\r
- sec.addAnnotation(annotation);\r
- }\r
+ //old\r
+// sec.setTitleCache(label, true);\r
+//\r
+// if (detail != null) {\r
+// Annotation annotation = Annotation.NewInstance(detail, datasetLanguage);\r
+// annotation.setAnnotationType(AnnotationType.EDITORIAL());\r
+// sec.addAnnotation(annotation);\r
+// }\r
+ \r
\r
List<Element> listMediaObjects = elRepresentation.getChildren("MediaObject",sddNamespace);\r
\r
// imports the representation (label, detail, lang) of a particular SDD element\r
protected void importRepresentation(Element parent, Namespace sddNamespace, VersionableEntity ve, String id, IImportConfigurator config){\r
Element elRepresentation = parent.getChild("Representation",sddNamespace);\r
- // <Label xml:lang="la">Viola hederacea Labill.</Label>\r
- List<Element> listLabels = elRepresentation.getChildren("Label",sddNamespace);\r
- List<Element> listDetails = elRepresentation.getChildren("Detail",sddNamespace);\r
+ \r
Map<Language,List<String>> langLabDet = new HashMap<Language,List<String>>();\r
\r
- for (Element elLabel : listLabels){\r
- String lang = elLabel.getAttributeValue("lang",xmlNamespace);\r
- Language language = null;\r
- if (lang != null) {\r
- if (!lang.equals("")) {\r
- language = getTermService().getLanguageByIso(lang.substring(0, 2));\r
- } else {\r
- language = datasetLanguage;\r
- }\r
- } else {\r
- language = datasetLanguage;\r
+ handleRepresentationLabels(sddNamespace, elRepresentation, langLabDet);\r
+ handleRepresentationDetails(sddNamespace, elRepresentation, langLabDet);\r
+\r
+ if (ve instanceof TermBase) {\r
+ makeRepresentationForTerms((TermBase)ve, langLabDet);\r
+ }else if (ve instanceof Media) {\r
+ makeRepresentationForMedia((Media)ve, langLabDet);\r
+ }else if (ve instanceof IdentifiableEntity<?>) {\r
+ IdentifiableEntity<?> ie = (IdentifiableEntity<?>)ve;\r
+ makeRepresentationForIdentifiableEntity(sddNamespace, ie, elRepresentation, langLabDet);\r
+ if (ve instanceof IdentifiableMediaEntity<?>){\r
+ makeRepresentationForIdentifiableMediaEntity(parent, sddNamespace, (IdentifiableMediaEntity<?>)ve);\r
}\r
- String label = elLabel.getText();\r
- List<String> labDet = new ArrayList<String>(3);\r
- labDet.add(label);\r
- langLabDet.put(language, labDet);\r
}\r
\r
+ makeRepresentationMediaObjects(sddNamespace, ve, elRepresentation);//FIXME\r
+\r
+ }\r
+\r
+\r
+ /**\r
+ * Handles the "Detail" children of representations. Adds the result to the langLabDet.\r
+ * @param sddNamespace\r
+ * @param elRepresentation\r
+ * @param langLabDet\r
+ */\r
+ private void handleRepresentationDetails(Namespace sddNamespace,\r
+ Element elRepresentation, Map<Language, List<String>> langLabDet) {\r
+ List<Element> listDetails = elRepresentation.getChildren("Detail",sddNamespace);\r
for (Element elDetail : listDetails){\r
- String lang = elDetail.getAttributeValue("lang",xmlNamespace);\r
+ Language language = getLanguage(elDetail);\r
String role = elDetail.getAttributeValue("role");\r
- Language language = null;\r
- if (lang != null) {\r
- if (!lang.equals("")) {\r
- language = getTermService().getLanguageByIso(lang.substring(0, 2));\r
- } else {\r
- language = datasetLanguage;\r
- }\r
- } else {\r
- language = datasetLanguage;\r
- }\r
String detail = elDetail.getText();\r
List<String> labDet = langLabDet.get(language);\r
labDet.add(detail);\r
labDet.add(role);\r
langLabDet.put(language, labDet);\r
}\r
+ }\r
\r
- if (ve instanceof TermBase) {\r
- TermBase tb = (TermBase) ve;\r
+ /**\r
+ * Handles the "Label" children of representations. Adds the result to the langLabDet.\r
+ * @param sddNamespace\r
+ * @param elRepresentation\r
+ * @param langLabDet\r
+ */\r
+ private void handleRepresentationLabels(Namespace sddNamespace,\r
+ Element elRepresentation, Map<Language, List<String>> langLabDet) {\r
+ // <Label xml:lang="la">Viola hederacea Labill.</Label>\r
+ List<Element> listLabels = elRepresentation.getChildren("Label",sddNamespace);\r
+ for (Element elLabel : listLabels){\r
+ Language language = getLanguage(elLabel);\r
+ String label = elLabel.getText();\r
+ List<String> labDet = new ArrayList<String>(3);\r
+ labDet.add(label);\r
+ langLabDet.put(language, labDet);\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * \r
+ * @param ve\r
+ * @param langLabDet\r
+ */\r
+ private void makeRepresentationForMedia(Media m, Map<Language, List<String>> langLabDet) {\r
+ for (Language lang : langLabDet.keySet()){\r
+ List<String> labDet = langLabDet.get(lang);\r
+ if (labDet.get(0) != null){\r
+ m.putTitle(LanguageString.NewInstance(labDet.get(0), lang));\r
+ }\r
+ if (labDet.size()>1) {\r
+ m.addDescription(labDet.get(1), lang);\r
+ }\r
+ }\r
+ }\r
\r
- for (Iterator<Language> l = langLabDet.keySet().iterator() ; l.hasNext() ;){\r
- Language lang = l.next();\r
+ /**\r
+ * Handles representations for terms. Adds one representation per language in langLabDet.\r
+ * \r
+ * @param ve\r
+ * @param langLabDet\r
+ */\r
+ private void makeRepresentationForTerms(TermBase tb, Map<Language, List<String>> langLabDet) {\r
+ for (Language lang : langLabDet.keySet()){\r
List<String> labDet = langLabDet.get(lang);\r
if (labDet.size()>0){\r
if (labDet.size()>1) {\r
tb.addRepresentation(Representation.NewInstance(labDet.get(0), labDet.get(0), labDet.get(0), lang));\r
}\r
}\r
- ve = tb;\r
}\r
+ }\r
\r
- } else if (ve instanceof Media) {\r
- Media m = (Media) ve;\r
\r
- for (Iterator<Language> l = langLabDet.keySet().iterator() ; l.hasNext() ;){\r
- Language lang = l.next();\r
- List<String> labDet = langLabDet.get(lang);\r
- if (labDet.get(0) != null){\r
- m.addTitle(LanguageString.NewInstance(labDet.get(0), lang));\r
- }\r
- if (labDet.size()>1) {\r
- m.addDescription(labDet.get(1), lang);\r
- }\r
- ve = m;\r
- }\r
-\r
- } \r
- if (ve instanceof IdentifiableEntity<?>) {\r
- IdentifiableEntity<?> ie = (IdentifiableEntity<?>) ve;\r
- List<String> labDet = null;\r
-\r
- if (ve instanceof TaxonNameBase) {\r
- if (langLabDet.keySet().contains(getTermService().getLanguageByIso("la"))) {\r
- labDet = langLabDet.get(getTermService().getLanguageByIso("la"));\r
- } else if (langLabDet.keySet().contains(datasetLanguage)) {\r
- labDet = langLabDet.get(datasetLanguage);\r
- logger.info("TaxonName " + (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace) + " is not specified as a latin name.");\r
- } else {\r
- labDet = langLabDet.get(langLabDet.keySet().iterator().next());\r
- logger.info("TaxonName " + (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace) + " is not specified as a latin name.");\r
- }\r
- } else {\r
- labDet = langLabDet.get(langLabDet.keySet().iterator().next());\r
+ /**\r
+ * Handles the "MediaObject" children of representations.\r
+ * @param sddNamespace\r
+ * @param ve\r
+ * @param elRepresentation\r
+ */\r
+ private void makeRepresentationMediaObjects(Namespace sddNamespace, VersionableEntity ve, Element elRepresentation) {\r
+ List <Element> listMediaObjects = elRepresentation.getChildren("MediaObject", sddNamespace);\r
+ for (Element elMediaObject : listMediaObjects) {\r
+ String ref = null;\r
+ //TODO\r
+ String role = null;\r
+ if (elMediaObject != null) {\r
+ ref = elMediaObject.getAttributeValue("ref");\r
+ role = elMediaObject.getAttributeValue("role");\r
}\r
-\r
- ie.setTitleCache(labDet.get(0), true);\r
-\r
- if (labDet.size()>1) {\r
- Annotation annotation = null;\r
- if (labDet.get(1) != null) {\r
- if (labDet.get(2) != null) {\r
- annotation = Annotation.NewInstance(labDet.get(2) + " - " + labDet.get(1), datasetLanguage);\r
+ if (StringUtils.isNotBlank(ref)) {\r
+ if (ve instanceof TaxonDescription) {\r
+ TaxonDescription td = (TaxonDescription) ve;\r
+ if (td.getDescriptionSources().size() > 0) {\r
+ this.associateImageWithCdmBase(ref,(Reference) td.getDescriptionSources().toArray()[0]);\r
} else {\r
- annotation = Annotation.NewInstance(labDet.get(1), datasetLanguage);\r
+ Reference descriptionSource = ReferenceFactory.newGeneric();\r
+ sources.add(descriptionSource);\r
+ td.addDescriptionSource(descriptionSource);\r
+ this.associateImageWithCdmBase(ref,descriptionSource);\r
}\r
+ } else {\r
+ this.associateImageWithCdmBase(ref,ve);\r
}\r
- ie.addAnnotation(annotation);\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
- if (elLinks != null) {\r
+ }\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
+ * Handles the "Links" element\r
+ * @param parent\r
+ * @param sddNamespace\r
+ * @param ve\r
+ */\r
+ private void makeRepresentationForIdentifiableMediaEntity(Element parent,\r
+ Namespace sddNamespace, IdentifiableMediaEntity ime) {\r
+ Element elLinks = parent.getChild("Links",sddNamespace);\r
\r
- try {\r
+ if (elLinks != null) {\r
\r
- String rel = elLink.getAttributeValue("rel");\r
- String href = elLink.getAttributeValue("href");\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
- mr.addRepresentationPart(MediaRepresentationPart.NewInstance(href, null));\r
- link.addRepresentation(mr);\r
- ime.addMedia(link);\r
+ try {\r
+ //TODO\r
+ String rel = elLink.getAttributeValue("rel");\r
+ String href = elLink.getAttributeValue("href");\r
+ URI uri = new URI(href);\r
+ mr.addRepresentationPart(MediaRepresentationPart.NewInstance(uri, 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
+ } 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
+ 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
- if (elMediaObject != null) {\r
- ref = elMediaObject.getAttributeValue("ref");\r
- role = elMediaObject.getAttributeValue("role");\r
+ /**\r
+ * @param sddNamespace\r
+ * @param ve\r
+ * @param elRepresentation\r
+ * @param langLabDet\r
+ * @return\r
+ */\r
+ private void makeRepresentationForIdentifiableEntity(Namespace sddNamespace, IdentifiableEntity<?> ie, \r
+ Element elRepresentation, Map<Language, List<String>> langLabDet) {\r
+ List<String> labDet = null;\r
+\r
+ if (ie instanceof TaxonNameBase) {\r
+ if (langLabDet.keySet().contains(getTermService().getLanguageByIso("la"))) {\r
+ labDet = langLabDet.get(getTermService().getLanguageByIso("la"));\r
+ } else if (langLabDet.keySet().contains(datasetLanguage)) {\r
+ labDet = langLabDet.get(datasetLanguage);\r
+ logger.info("TaxonName " + (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace) + " is not specified as a latin name.");\r
+ } else {\r
+ labDet = langLabDet.get(langLabDet.keySet().iterator().next());\r
+ logger.info("TaxonName " + (String)ImportHelper.getXmlInputValue(elRepresentation, "Label",sddNamespace) + " is not specified as a latin name.");\r
}\r
- if (ref != null) {\r
- if (!ref.equals("")) {\r
- if (ref != null) {\r
- if (ve instanceof TaxonDescription) {\r
- TaxonDescription td = (TaxonDescription) ve;\r
- //TODO: ensure that all images are imported\r
- if (td.getDescriptionSources().toArray().length > 0) {\r
- this.associateImageWithCdmBase(ref,(ReferenceBase) td.getDescriptionSources().toArray()[0]);\r
- } else {\r
- ReferenceBase descriptionSource = ReferenceFactory.newGeneric();\r
- td.addDescriptionSource(descriptionSource);\r
- this.associateImageWithCdmBase(ref,descriptionSource);\r
- }\r
- } else {\r
- this.associateImageWithCdmBase(ref,ve);\r
- }\r
- }\r
+ } else {\r
+ labDet = langLabDet.get(langLabDet.keySet().iterator().next());\r
+ }\r
\r
+ //FIXME labDet is != null only for TaxonNameBase\r
+ ie.setTitleCache(labDet.get(0), true);\r
+\r
+ if (labDet.size()>1) {\r
+ Annotation annotation = null;\r
+ if (labDet.get(1) != null) {\r
+ if (labDet.get(2) != null) {\r
+ annotation = Annotation.NewInstance(labDet.get(2) + " - " + labDet.get(1), datasetLanguage);\r
+ } else {\r
+ annotation = Annotation.NewInstance(labDet.get(1), datasetLanguage);\r
}\r
}\r
+ ie.addAnnotation(annotation);\r
}\r
+ return;\r
+ }\r
\r
+ /**\r
+ * @param elLabel\r
+ * @return\r
+ */\r
+ private Language getLanguage(Element elLanguage) {\r
+ String lang = elLanguage.getAttributeValue("lang",xmlNamespace);\r
+ Language language = null;\r
+ if (StringUtils.isNotBlank(lang)) {\r
+ language = getTermService().getLanguageByIso(lang.substring(0, 2));\r
+ } else {\r
+ language = datasetLanguage;\r
+ }\r
+ return language;\r
}\r
\r
\r
}\r
\r
// imports the complete dataset information\r
- protected void importDataset(Element elDataset, Namespace sddNamespace, boolean success, SDDImportConfigurator sddConfig){ // <Dataset xml:lang="en-us">\r
+ protected boolean importDataset(Element elDataset, Namespace sddNamespace, SDDImportState state){ // <Dataset xml:lang="en-us">\r
+ boolean success = true;\r
+ SDDImportConfigurator sddConfig = state.getConfig();\r
\r
+ workingSet = WorkingSet.NewInstance();\r
importDatasetLanguage(elDataset,sddConfig);\r
importDatasetRepresentation(elDataset, sddNamespace);\r
importRevisionData(elDataset, sddNamespace);\r
importIPRStatements(elDataset, sddNamespace, sddConfig);\r
importTaxonNames(elDataset, sddNamespace, sddConfig);\r
+\r
importDescriptiveConcepts(elDataset, sddNamespace, sddConfig);\r
- importCharacters(elDataset, sddNamespace, sddConfig, success);\r
+ success &= importCharacters(elDataset, sddNamespace, sddConfig);\r
importCharacterTrees(elDataset, sddNamespace, sddConfig, success);\r
\r
- //FIXME (a.mueller) \r
- MarkerType editorMarkerType = MarkerType.NewInstance("Editor", "editor", "edt") ;\r
- MarkerType geographicAreaMarkerType = MarkerType.NewInstance("", "SDDGeographicArea", "ga");\r
- MarkerType descriptiveConceptMarkerType = MarkerType.NewInstance("Descriptive Concept", "DescriptiveConcept", "DC");\r
+ MarkerType editorMarkerType = getMarkerType(state, SDDTransformer.uuidMarkerEditor, "editor", "Editor", "edt");\r
+ MarkerType geographicAreaMarkerType = getMarkerType(state, SDDTransformer.uuidMarkerSDDGeographicArea, "SDDGeographicArea", "SDDGeographicArea", "ga"); \r
+ MarkerType descriptiveConceptMarkerType = getMarkerType(state, SDDTransformer.uuidMarkerDescriptiveConcept, "DescriptiveConcept", "Descriptive Concept", "DC");\r
markerTypes.add(editorMarkerType);\r
markerTypes.add(geographicAreaMarkerType);\r
markerTypes.add(descriptiveConceptMarkerType);\r
-\r
+ \r
//saving of all imported data into the CDM db\r
+ saveVocabularies();\r
saveFeatures();\r
saveModifiers();\r
saveStates();\r
saveUnits();\r
saveStatisticalMeasure(); \r
saveAnnotationType();\r
- \r
- importCodedDescriptions(elDataset, sddNamespace, sddConfig, success);\r
+\r
+ success &= importCodedDescriptions(elDataset, sddNamespace, sddConfig);\r
importAgents(elDataset, sddNamespace, sddConfig, success);\r
importPublications(elDataset, sddNamespace, sddConfig, success);\r
importMediaObjects(elDataset, sddNamespace, sddConfig, success);\r
importTaxonHierarchies(elDataset, sddNamespace, sddConfig, success);\r
importGeographicAreas(elDataset, sddNamespace, sddConfig);\r
importSpecimens(elDataset,sddNamespace, sddConfig);\r
- \r
\r
\r
if ((authors != null)||(editors != null)) {\r
Team team = Team.NewInstance();\r
if (authors != null) {\r
- for (Iterator<Person> author = authors.values().iterator() ; author.hasNext() ;){\r
- team.addTeamMember(author.next());\r
- }\r
+ for (Person author : authors.values()){\r
+ team.addTeamMember(author);\r
+ }\r
}\r
if (editors != null) {\r
Marker marker = Marker.NewInstance();\r
marker.setMarkerType(editorMarkerType);\r
- for (Iterator<Person> editor = editors.values().iterator() ; editor.hasNext() ;){\r
- Person edit = editor.next();\r
+ for (Person editor : editors.values()){\r
+ Person edit = editor;\r
edit.addMarker(marker);\r
team.addTeamMember(edit);\r
}\r
- }\r
+ }\r
sec.setAuthorTeam(team);\r
sourceReference.setAuthorTeam(team);\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
+ \r
+ for (TaxonDescription taxonDescription : taxonDescriptions.values()){\r
// Persists a Description\r
descriptionService.save(taxonDescription);\r
}\r
-\r
-\r
\r
- for (Iterator<String> refCD = taxonDescriptions.keySet().iterator() ; refCD.hasNext() ;){\r
- String ref = refCD.next();\r
+ for (String ref : taxonDescriptions.keySet()){\r
TaxonDescription td = taxonDescriptions.get(ref);\r
if (citations.containsKey(ref)) {\r
- IArticle publication = (IArticle) publications.get(citations.get(ref));\r
+ Reference publication = publications.get(citations.get(ref));\r
if (locations.containsKey(ref)) {\r
Annotation location = Annotation.NewInstance(locations.get(ref), datasetLanguage);\r
AnnotationType annotationType = AnnotationType.NewInstance("", "location", "");\r
annotationTypes.add(annotationType);\r
location.setAnnotationType(annotationType);\r
- ((ReferenceBase)publication).addAnnotation(location);\r
+ (publication).addAnnotation(location);\r
}\r
- td.addDescriptionSource((ReferenceBase)publication);\r
+ td.addDescriptionSource(publication);\r
}\r
}\r
logger.info("end makeTaxonDescriptions ...");\r
- \r
- \r
-// for (Iterator<TermVocabulary<Modifier>> k = termVocabularyStates.iterator() ; k.hasNext() ;){\r
-// TermVocabulary<Modifier> termVocabulary = k.next();\r
-// getVocabularyService().save(termVocabulary); //XIM\r
-// }\r
- \r
-\r
- //sddConfig.setSourceReference(sourceReference);\r
-\r
\r
if (descriptiveConcepts != null) {\r
- for (Iterator<Feature> feat = descriptiveConcepts.iterator() ; feat.hasNext() ;) {\r
+ for (Feature feature : descriptiveConcepts) {\r
Marker marker = Marker.NewInstance();\r
marker.setMarkerType(descriptiveConceptMarkerType);\r
- Feature feature = feat.next();\r
feature.addMarker(marker);\r
}\r
}\r
saveFeatures();\r
\r
- /*Marker markerd = Marker.NewInstance();\r
- markerd.setMarkerType(descriptiveConceptMarker);\r
- Feature fiture = Feature.NewInstance("Fitoure","Fitoure","Fitoure");\r
- fiture.addMarker(markerd);\r
- TermVocabulary<Modifier> termVocabularyState = new TermVocabulary<Modifier>("test","test","test","test");\r
- Modifier modif = new Modifier("zoub","zab","zib");\r
- termVocabularyState.addTerm(modif);\r
- getVocabularyService().save(termVocabularyState);\r
- fiture.addRecommendedModifierEnumeration(termVocabularyState);\r
- termService.save(modif);\r
- termService.save(fiture);*/\r
- \r
- //XIMtermService.save(editorMarkerType);\r
+ for (Reference publication : publications.values()){\r
+ getReferenceService().save(publication); \r
+ }\r
\r
- //XIMtermService.save(geographicAreaMarkerType);\r
-\r
- IReferenceService referenceService = getReferenceService();\r
- // referenceService.saveReference(sourceReference); \r
- for (Iterator<ReferenceBase> k = publications.values().iterator() ; k.hasNext() ;){\r
- ReferenceBase publication = (ReferenceBase) k.next();\r
- referenceService.save(publication); \r
+ for (Reference source : sources){\r
+ getReferenceService().save(source); \r
}\r
\r
- for (Iterator<FeatureTree> k = featureTrees.iterator() ; k.hasNext() ;) {\r
- FeatureTree tree = k.next();\r
- getFeatureTreeService().save(tree);\r
+ for (FeatureTree featureTree : featureTrees) {\r
+ getFeatureTreeService().save(featureTree);\r
}\r
- for (Iterator<TaxonomicTree> k = taxonomicTrees.iterator() ; k.hasNext() ;) {\r
- TaxonomicTree tree = k.next();\r
- getTaxonTreeService().save(tree);\r
+ getWorkingSetService().save(workingSet);\r
+ for (Classification classification : classifications) {\r
+ getClassificationService().save(classification);\r
}\r
- for (Iterator<Specimen> k = specimens.values().iterator() ; k.hasNext() ;) {\r
- Specimen specimen = k.next();\r
+ for (Specimen specimen : specimens.values()) {\r
getOccurrenceService().save(specimen);\r
}\r
logger.info("end of persistence ...");\r
\r
+ return success;\r
+ }\r
+\r
+ /**\r
+ * \r
+ */\r
+ private void saveVocabularies() {\r
+ for (TermVocabulary vocabulary : vocabularies ){\r
+ getVocabularyService().save(vocabulary);\r
+ }\r
\r
}\r
\r
private void saveAnnotationType() {\r
- for (Iterator<AnnotationType> at = annotationTypes.iterator() ; at.hasNext() ;) {\r
- AnnotationType annotationType = at.next();\r
+ for (AnnotationType annotationType: annotationTypes){\r
getTermService().save(annotationType); \r
}\r
}\r
\r
private void saveStatisticalMeasure() {\r
- for (Iterator<StatisticalMeasure> k = statisticalMeasures.iterator() ; k.hasNext() ;) {\r
- StatisticalMeasure sm = k.next();\r
+ for (StatisticalMeasure sm : statisticalMeasures){\r
getTermService().save(sm); \r
}\r
}\r
\r
private void saveUnits() {\r
if (units != null) {\r
- for (Iterator<MeasurementUnit> k = units.values().iterator() ; k.hasNext() ;){\r
- MeasurementUnit unit = k.next();\r
+ for (MeasurementUnit unit : units.values()){\r
if (unit != null) {\r
getTermService().save(unit); \r
}\r
}\r
\r
private void saveAreas(MarkerType geographicAreaMarkerType) {\r
- for (Iterator<NamedArea> k = namedAreas.values().iterator() ; k.hasNext() ;) {\r
+ for (NamedArea area : namedAreas.values() ){\r
Marker marker = Marker.NewInstance();\r
marker.setMarkerType(geographicAreaMarkerType);\r
- NamedArea area = k.next();\r
area.addMarker(marker);\r
- //getTermService().save(area);\r
getTermService().save(area);\r
}\r
}\r
\r
private void saveStates() {\r
- for (Iterator<State> k = states.values().iterator() ; k.hasNext() ;){\r
- State state = k.next();\r
+ for (State state : states.values() ){\r
getTermService().save(state);\r
}\r
}\r
\r
private void saveMarkerType() {\r
- for(Iterator<MarkerType> k = markerTypes.iterator() ; k.hasNext() ;){\r
- MarkerType markerType = k.next();\r
+ for (MarkerType markerType : markerTypes){\r
getTermService().save(markerType);\r
}\r
}\r
\r
private void saveModifiers() {\r
-\r
- for (Iterator<Modifier> k = modifiers.values().iterator() ; k.hasNext() ;){\r
- Modifier modifier = k.next();\r
+ for (Modifier modifier : modifiers.values() ){\r
getTermService().save(modifier);\r
}\r
}\r
\r
private void saveFeatures() {\r
- ITermService termService = getTermService();\r
- \r
- for (Iterator<Feature> k = features.values().iterator() ; k.hasNext() ;){\r
- Feature feature = k.next();\r
- termService.save(feature); \r
+ for (Feature feature : features.values() ){\r
+ getTermService().save(feature);\r
}\r
}\r
\r
protected void importDatasetLanguage(Element elDataset, SDDImportConfigurator sddConfig){\r
String nameLang = elDataset.getAttributeValue("lang",xmlNamespace);\r
\r
- if (!nameLang.equals("")) {\r
+ if (StringUtils.isNotBlank(nameLang)) {\r
String iso = nameLang.substring(0, 2);\r
datasetLanguage = getTermService().getLanguageByIso(iso);\r
} else {\r
}\r
\r
// imports the characters (categorical, quantitative and text ; sequence characters not supported) which correspond to CDM Features\r
- protected void importCharacters(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ protected boolean importCharacters(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
+ boolean success = true;\r
// <Characters>\r
logger.info("start Characters ...");\r
Element elCharacters = elDataset.getChild("Characters", sddNamespace);\r
\r
// <CategoricalCharacter id="c1">\r
if (elCharacters != null) {\r
- List<Element> elCategoricalCharacters = elCharacters.getChildren("CategoricalCharacter", sddNamespace);\r
- int j = 0;\r
- for (Element elCategoricalCharacter : elCategoricalCharacters){\r
- try {\r
-\r
- String idCC = elCategoricalCharacter.getAttributeValue("id");\r
- Feature categoricalCharacter = Feature.NewInstance();\r
- categoricalCharacter.setKindOf(Feature.DESCRIPTION());\r
- importRepresentation(elCategoricalCharacter, sddNamespace, categoricalCharacter, idCC, sddConfig);\r
- categoricalCharacter.setSupportsCategoricalData(true);\r
+ success &= handleCategoricalData(sddNamespace, sddConfig, elCharacters);\r
+ success &= handleQuantitativeData(sddNamespace, sddConfig, elCharacters);\r
+ success &= handleTextCharacters(sddNamespace, sddConfig, elCharacters);\r
+ }\r
\r
- // <States>\r
- Element elStates = elCategoricalCharacter.getChild("States",sddNamespace);\r
+ /*for (Iterator<Feature> f = features.values().iterator() ; f.hasNext() ;){\r
+ featureSet.add(f.next()); //XIM Why this line ?\r
+ }*/\r
+ \r
+ return success;\r
\r
- // <StateDefinition id="s1">\r
- List<Element> elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace);\r
- TermVocabulary<State> termVocabularyState = new TermVocabulary<State>();\r
- int k = 0;\r
- //for each StateDefinition\r
- for (Element elStateDefinition : elStateDefinitions){\r
+ }\r
\r
- if ((++k % modCount) == 0){ logger.info("StateDefinitions handled: " + (k-1));}\r
+ /**\r
+ * @param sddNamespace\r
+ * @param sddConfig\r
+ * @param success\r
+ * @param elCharacters\r
+ * @return\r
+ */\r
+ private boolean handleCategoricalData(Namespace sddNamespace, SDDImportConfigurator sddConfig, Element elCharacters) {\r
+ boolean success = true;\r
+ List<Element> elCategoricalCharacters = elCharacters.getChildren("CategoricalCharacter", sddNamespace);\r
+ int j = 0;\r
+ for (Element elCategoricalCharacter : elCategoricalCharacters){\r
+ try {\r
+\r
+ String idCC = elCategoricalCharacter.getAttributeValue("id");\r
+ Feature categoricalCharacter = Feature.NewInstance();\r
+ categoricalCharacter.setKindOf(Feature.DESCRIPTION());\r
+ importRepresentation(elCategoricalCharacter, sddNamespace, categoricalCharacter, idCC, sddConfig);\r
+ categoricalCharacter.setSupportsCategoricalData(true);\r
+\r
+ // <States>\r
+ Element elStates = elCategoricalCharacter.getChild("States",sddNamespace);\r
+\r
+ // <StateDefinition id="s1">\r
+ List<Element> elStateDefinitions = elStates.getChildren("StateDefinition",sddNamespace);\r
+ TermVocabulary<State> termVocabularyState = TermVocabulary.NewInstance(null, null, null, null);\r
+ \r
+ vocabularies.add(termVocabularyState);\r
+ \r
+ int k = 0;\r
+ //for each StateDefinition\r
+ for (Element elStateDefinition : elStateDefinitions){\r
\r
- String idS = elStateDefinition.getAttributeValue("id");\r
- State state = State.NewInstance();\r
- importRepresentation(elStateDefinition, sddNamespace, state, idS, sddConfig);\r
+ if ((++k % modCount) == 0){ logger.info("StateDefinitions handled: " + (k-1));}\r
\r
- //StateData stateData = StateData.NewInstance();\r
- //stateData.setState(state);\r
- termVocabularyState.addTerm(state);\r
- states.put(idS,state);\r
+ String idS = elStateDefinition.getAttributeValue("id");\r
+ State state = states.get(idS);\r
+ if (state == null){\r
+ state = State.NewInstance();\r
+ }else{\r
+ logger.debug("State duplicate found");\r
}\r
- categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
- features.put(idCC, categoricalCharacter);\r
+ importRepresentation(elStateDefinition, sddNamespace, state, idS, sddConfig);\r
\r
- } catch (Exception e) {\r
- logger.warn("Import of CategoricalCharacter " + j + " failed.");\r
- success = false; \r
+ termVocabularyState.addTerm(state);\r
+ states.put(idS,state);\r
}\r
+ categoricalCharacter.addSupportedCategoricalEnumeration(termVocabularyState);\r
+ features.put(idCC, categoricalCharacter);\r
\r
- if ((++j % modCount) == 0){ logger.info("CategoricalCharacters handled: " + j);}\r
-\r
+ } catch (Exception e) {\r
+ logger.warn("Import of CategoricalCharacter " + j + " failed.");\r
+ success = false; \r
}\r
\r
- // <QuantitativeCharacter id="c2">\r
- List<Element> elQuantitativeCharacters = elCharacters.getChildren("QuantitativeCharacter", sddNamespace);\r
- j = 0;\r
- //for each QuantitativeCharacter\r
- for (Element elQuantitativeCharacter : elQuantitativeCharacters){\r
+ if ((++j % modCount) == 0){ logger.info("CategoricalCharacters handled: " + j);}\r
\r
- try {\r
+ }\r
+ return success;\r
+ }\r
\r
- String idQC = elQuantitativeCharacter.getAttributeValue("id");\r
-\r
- // <Representation>\r
- // <Label>Leaf length</Label>\r
- // </Representation>\r
- Feature quantitativeCharacter = Feature.NewInstance();\r
- quantitativeCharacter.setKindOf(Feature.DESCRIPTION());\r
- importRepresentation(elQuantitativeCharacter, sddNamespace, quantitativeCharacter, idQC, sddConfig);\r
-\r
- quantitativeCharacter.setSupportsQuantitativeData(true);\r
-\r
- // <MeasurementUnit>\r
- // <Label role="Abbrev">m</Label>\r
- // </MeasurementUnit>\r
- Element elMeasurementUnit = elQuantitativeCharacter.getChild("MeasurementUnit",sddNamespace);\r
- String label = "";\r
- String role = "";\r
- if (elMeasurementUnit != null) {\r
- Element elLabel = elMeasurementUnit.getChild("Label",sddNamespace);\r
- role = elLabel.getAttributeValue("role");\r
- label = (String)ImportHelper.getXmlInputValue(elMeasurementUnit, "Label",sddNamespace);\r
- }\r
+ /**\r
+ * @param sddNamespace\r
+ * @param sddConfig\r
+ * @param elCharacters\r
+ */\r
+ private boolean handleQuantitativeData(Namespace sddNamespace, SDDImportConfigurator sddConfig, Element elCharacters) {\r
+ boolean success = true;\r
+ int j;\r
+ // <QuantitativeCharacter id="c2">\r
+ List<Element> elQuantitativeCharacters = elCharacters.getChildren("QuantitativeCharacter", sddNamespace);\r
+ j = 0;\r
+ //for each QuantitativeCharacter\r
+ for (Element elQuantitativeCharacter : elQuantitativeCharacters){\r
\r
- MeasurementUnit unit = null;\r
- if (!label.equals("")){\r
- if (role != null) {\r
- if (role.equals("Abbrev")){\r
- unit = MeasurementUnit.NewInstance(label,label,label);\r
- }\r
- } else {\r
- unit = MeasurementUnit.NewInstance(label,label,label);\r
- }\r
- }\r
+ try {\r
\r
- if (unit != null) {\r
- units.put(idQC, unit);\r
- }\r
+ String idQC = elQuantitativeCharacter.getAttributeValue("id");\r
\r
- //<Default>\r
- // <MeasurementUnitPrefix>milli</MeasurementUnitPrefix>\r
- //</Default>\r
- Element elDefault = elQuantitativeCharacter.getChild("Default",sddNamespace);\r
- if (elDefault != null) {\r
- String measurementUnitPrefix = (String)ImportHelper.getXmlInputValue(elDefault, "MeasurementUnitPrefix",sddNamespace);\r
- if (!measurementUnitPrefix.equals("")){\r
- defaultUnitPrefixes.put(idQC, measurementUnitPrefix);\r
+ // <Representation>\r
+ // <Label>Leaf length</Label>\r
+ // </Representation>\r
+ Feature quantitativeCharacter = Feature.NewInstance();\r
+ quantitativeCharacter.setKindOf(Feature.DESCRIPTION());\r
+ importRepresentation(elQuantitativeCharacter, sddNamespace, quantitativeCharacter, idQC, sddConfig);\r
+\r
+ quantitativeCharacter.setSupportsQuantitativeData(true);\r
+\r
+ // <MeasurementUnit>\r
+ // <Label role="Abbrev">m</Label>\r
+ // </MeasurementUnit>\r
+ Element elMeasurementUnit = elQuantitativeCharacter.getChild("MeasurementUnit",sddNamespace);\r
+ String label = "";\r
+ String role = "";\r
+ if (elMeasurementUnit != null) {\r
+ Element elLabel = elMeasurementUnit.getChild("Label",sddNamespace);\r
+ role = elLabel.getAttributeValue("role");\r
+ label = (String)ImportHelper.getXmlInputValue(elMeasurementUnit, "Label",sddNamespace);\r
+ }\r
+\r
+ MeasurementUnit unit = null;\r
+ if (!label.equals("")){\r
+ if (role != null) {\r
+ if (role.equals("Abbrev")){\r
+ unit = MeasurementUnit.NewInstance(label,label,label);\r
}\r
+ } else {\r
+ unit = MeasurementUnit.NewInstance(label,label,label);\r
}\r
+ }\r
\r
- features.put(idQC, quantitativeCharacter);\r
+ if (unit != null) {\r
+ units.put(idQC, unit);\r
+ }\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of QuantitativeCharacter " + j + " failed.");\r
- success = false; \r
+ //<Default>\r
+ // <MeasurementUnitPrefix>milli</MeasurementUnitPrefix>\r
+ //</Default>\r
+ Element elDefault = elQuantitativeCharacter.getChild("Default",sddNamespace);\r
+ if (elDefault != null) {\r
+ String measurementUnitPrefix = (String)ImportHelper.getXmlInputValue(elDefault, "MeasurementUnitPrefix",sddNamespace);\r
+ if (! measurementUnitPrefix.equals("")){\r
+ defaultUnitPrefixes.put(idQC, measurementUnitPrefix);\r
+ }\r
}\r
\r
- if ((++j % modCount) == 0){ logger.info("QuantitativeCharacters handled: " + j);}\r
+ features.put(idQC, quantitativeCharacter);\r
\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of QuantitativeCharacter " + j + " failed.");\r
+ success = false; \r
}\r
\r
- // <TextCharacter id="c3">\r
- List<Element> elTextCharacters = elCharacters.getChildren("TextCharacter", sddNamespace);\r
- j = 0;\r
- //for each TextCharacter\r
- for (Element elTextCharacter : elTextCharacters){\r
+ if ((++j % modCount) == 0){ logger.info("QuantitativeCharacters handled: " + j);}\r
\r
- try {\r
+ }\r
+ return success;\r
+ }\r
\r
- String idTC = elTextCharacter.getAttributeValue("id");\r
+ private boolean handleTextCharacters(Namespace sddNamespace, SDDImportConfigurator sddConfig, Element elCharacters) {\r
+ boolean success = true;\r
+ int j;\r
+ // <TextCharacter id="c3">\r
+ List<Element> elTextCharacters = elCharacters.getChildren("TextCharacter", sddNamespace);\r
+ j = 0;\r
+ //for each TextCharacter\r
+ for (Element elTextCharacter : elTextCharacters){\r
\r
- // <Representation>\r
- // <Label xml:lang="en">Leaf features not covered by other characters</Label>\r
- // </Representation>\r
- Feature textCharacter = Feature.NewInstance();\r
- textCharacter.setKindOf(Feature.DESCRIPTION());\r
- importRepresentation(elTextCharacter, sddNamespace, textCharacter, idTC, sddConfig);\r
+ try {\r
\r
- textCharacter.setSupportsTextData(true);\r
+ String idTC = elTextCharacter.getAttributeValue("id");\r
\r
- features.put(idTC, textCharacter);\r
+ // <Representation>\r
+ // <Label xml:lang="en">Leaf features not covered by other characters</Label>\r
+ // </Representation>\r
+ Feature textCharacter = Feature.NewInstance();\r
+ textCharacter.setKindOf(Feature.DESCRIPTION());\r
+ importRepresentation(elTextCharacter, sddNamespace, textCharacter, idTC, sddConfig);\r
\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of TextCharacter " + j + " failed.");\r
- success = false; \r
- }\r
+ textCharacter.setSupportsTextData(true);\r
\r
- if ((++j % modCount) == 0){ logger.info("TextCharacters handled: " + j);}\r
+ features.put(idTC, textCharacter);\r
\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of TextCharacter " + j + " failed.");\r
+ success = false; \r
}\r
\r
- }\r
-\r
- /*for (Iterator<Feature> f = features.values().iterator() ; f.hasNext() ;){\r
- featureSet.add(f.next()); //XIM Why this line ?\r
- }*/\r
+ if ((++j % modCount) == 0){ logger.info("TextCharacters handled: " + j);}\r
\r
+ }\r
+ return success;\r
}\r
\r
// imports the descriptions of taxa\r
- protected void importCodedDescriptions(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
+ protected boolean importCodedDescriptions(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig){\r
+ boolean success = true;\r
+ \r
// <CodedDescriptions>\r
logger.info("start CodedDescriptions ...");\r
Element elCodedDescriptions = elDataset.getChild("CodedDescriptions",sddNamespace);\r
- // <CodedDescription id="D101">\r
\r
-\r
- ITaxonService taxonService = getTaxonService();\r
-\r
+ // <CodedDescription id="D101">\r
if (elCodedDescriptions != null) {\r
List<Element> listCodedDescriptions = elCodedDescriptions.getChildren("CodedDescription", sddNamespace);\r
int j = 0;\r
//for each CodedDescription\r
-\r
for (Element elCodedDescription : listCodedDescriptions){\r
+ success &= handleCodedDescription(sddNamespace, sddConfig, elCodedDescription, j);\r
+ if ((++j % modCount) == 0){ logger.info("CodedDescriptions handled: " + j);}\r
+ }\r
+ }\r
+ return success;\r
+ }\r
\r
- try {\r
-\r
- String idCD = elCodedDescription.getAttributeValue("id");\r
-\r
- // <Representation>\r
- // <Label><i>Viola hederacea</i> Labill. as revised by R. Morris April 8, 2006</Label>\r
- // </Representation>\r
- TaxonDescription taxonDescription = TaxonDescription.NewInstance();\r
- importRepresentation(elCodedDescription, sddNamespace, taxonDescription, idCD, sddConfig);\r
-\r
- // <Scope>\r
- // <TaxonName ref="t1"/>\r
- // <Citation ref="p1" location="p. 30"/>\r
- // </Scope>\r
- Element elScope = elCodedDescription.getChild("Scope",sddNamespace);\r
- String ref = "";\r
- Taxon taxon = null;\r
- if (elScope != null) {\r
- Element elTaxonName = elScope.getChild("TaxonName",sddNamespace);\r
- ref = elTaxonName.getAttributeValue("ref");\r
- NonViralName taxonNameBase = taxonNameBases.get(ref);\r
- \r
- if(sddConfig.isDoMatchTaxa()){\r
- taxon = getTaxonService().findBestMatchingTaxon(taxonNameBase.getTitleCache());\r
- }\r
- \r
- if(taxon != null){\r
- logger.info("using existing Taxon" + taxon.getTitleCache());\r
- if(!taxonNameBase.getUuid().equals(taxon.getName().getUuid())){\r
- logger.warn("TaxonNameBase entity of existing taxon does not match Name in list -> replacing Name in list");\r
- taxonNameBase = HibernateProxyHelper.deproxy(taxon.getName(), NonViralName.class);\r
- } \r
- } else { \r
- logger.info("creating new Taxon from TaxonName" + taxonNameBase.getTitleCache());\r
- taxon = Taxon.NewInstance(taxonNameBase, sec);\r
- }\r
- }\r
- \r
- else {//in case no taxon is linked to the description, a new one is created\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
- \r
- if(sddConfig.isDoMatchTaxa()){\r
- taxon = getTaxonService().findBestMatchingTaxon(tnb.getTitleCache());\r
- }\r
- \r
- if(taxon != null){\r
- tnb = HibernateProxyHelper.deproxy(taxon.getName(), NonViralName.class);\r
-// taxonNameBases.put(id ,tnb);\r
-// taxonNamesCount++;\r
- logger.info("using existing Taxon" + taxon.getTitleCache());\r
- } else {\r
- tnb.addSource(source);\r
- taxonNameBases.put(id ,tnb);\r
- taxonNamesCount++; \r
- logger.info("creating new Taxon from TaxonName" + tnb.getTitleCache());\r
- taxon = Taxon.NewInstance(tnb, sec);\r
- }\r
- }\r
+ /**\r
+ * @param sddNamespace\r
+ * @param sddConfig\r
+ * @param j\r
+ * @param elCodedDescription\r
+ * @return\r
+ */\r
+ private boolean handleCodedDescription(Namespace sddNamespace, SDDImportConfigurator sddConfig, Element elCodedDescription, int j) {\r
+ boolean success = true ;\r
+ try {\r
+\r
+ String idCD = elCodedDescription.getAttributeValue("id");\r
+\r
+ // <Representation>\r
+ // <Label><i>Viola hederacea</i> Labill. as revised by R. Morris April 8, 2006</Label>\r
+ // </Representation>\r
+ TaxonDescription taxonDescription = TaxonDescription.NewInstance();\r
+ if (!generatorName.isEmpty()){\r
+ Annotation annotation = Annotation.NewInstance(generatorName, AnnotationType.TECHNICAL(),Language.DEFAULT());\r
+ taxonDescription.addAnnotation(annotation);\r
+ }\r
+ importRepresentation(elCodedDescription, sddNamespace, taxonDescription, idCD, sddConfig);\r
+\r
+ // <Scope>\r
+ // <TaxonName ref="t1"/>\r
+ // <Citation ref="p1" location="p. 30"/>\r
+ // </Scope>\r
+ Element elScope = elCodedDescription.getChild("Scope", sddNamespace);\r
+ Taxon taxon;\r
+ if (elScope != null) {\r
+ taxon = handleCDScope(sddNamespace, sddConfig, idCD, elScope);\r
+ } else {//in case no taxon is linked to the description, a new one is created\r
+ taxon = handleCDNoScope(sddNamespace, sddConfig, elCodedDescription);\r
+ }\r
\r
- String refCitation = "";\r
- String location = "";\r
+ // <SummaryData>\r
+ Element elSummaryData = elCodedDescription.getChild("SummaryData",sddNamespace);\r
+ if (elSummaryData != null) {\r
+ handleSummaryCategoricalData(sddNamespace, taxonDescription, elSummaryData);\r
+ handleSummaryQuantitativeData(sddNamespace, taxonDescription, elSummaryData);\r
+ handleSummaryTextData(sddNamespace, taxonDescription, elSummaryData);\r
+ }\r
\r
- if (elScope != null) {\r
- Element elCitation = elScope.getChild("Citation",sddNamespace);\r
- if (elCitation != null) {\r
- refCitation = elCitation.getAttributeValue("ref");\r
- location = elCitation.getAttributeValue("location");\r
- }\r
- }\r
+ if (taxon != null) {\r
+ taxon.addDescription(taxonDescription);\r
+ }\r
+// \r
+ workingSet.addDescription(taxonDescription);\r
+ \r
+//OLD taxonDescription.setDescriptiveSystem(featureSet);\r
\r
- // <SummaryData>\r
- Element elSummaryData = elCodedDescription.getChild("SummaryData",sddNamespace);\r
- if (elSummaryData != null) {\r
+ taxonDescriptions.put(idCD, taxonDescription);//FIXME\r
\r
- // <Categorical ref="c4">\r
- List<Element> elCategoricals = elSummaryData.getChildren("Categorical", sddNamespace);\r
- int k = 0;\r
- //for each Categorical\r
- for (Element elCategorical : elCategoricals){\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
- categoricalData.setFeature(feature);\r
-\r
- // <State ref="s3"/>\r
- List<Element> elStates = elCategorical.getChildren("State", sddNamespace);\r
- int l = 0;\r
- \r
- //for each State\r
- for (Element elState : elStates){\r
- if ((++l % modCount) == 0){ logger.info("States handled: " + (l-1));}\r
- ref = elState.getAttributeValue("ref");\r
- State state = states.get(ref);\r
- if (state!=null) {\r
- StateData stateData = StateData.NewInstance();\r
- stateData.setState(state);\r
- List<Element> elModifiers = elState.getChildren("Modifier", sddNamespace);\r
- for (Element elModifier : elModifiers){\r
- ref = elModifier.getAttributeValue("ref");\r
- Modifier modifier = modifiers.get(ref);\r
- if (modifier!=null) {\r
- stateData.addModifier(modifier);\r
- }\r
- }\r
- categoricalData.addState(stateData);\r
- }\r
- taxonDescription.addElement(categoricalData);\r
- }\r
- }\r
- // <Quantitative ref="c2">\r
- List<Element> elQuantitatives = elSummaryData.getChildren("Quantitative", sddNamespace);\r
- k = 0;\r
- //for each Quantitative\r
- for (Element elQuantitative : elQuantitatives){\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
- quantitativeData.setFeature(feature);\r
-\r
- MeasurementUnit unit = units.get(ref);\r
- String prefix = defaultUnitPrefixes.get(ref);\r
- if (unit != null) {\r
- String u = unit.getLabel();\r
- if (prefix != null) {\r
- u = prefix + u;\r
- }\r
- unit.setLabel(u);\r
- quantitativeData.setUnit(unit);\r
- }\r
+ } catch (Exception e) {\r
+ //FIXME\r
+ logger.warn("Import of CodedDescription " + j + " failed.", e);\r
+ success = false;\r
+ }\r
+ return success;\r
+ }\r
\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
- 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
- } else if (type.equals("Mean")) {\r
- t = StatisticalMeasure.AVERAGE();\r
- } else if (type.equals("Max")) {\r
- t = StatisticalMeasure.MAX();\r
- } else if (type.equals("SD")) {\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
- }\r
+ /**\r
+ * @param sddNamespace\r
+ * @param sddConfig\r
+ * @param elCodedDescription\r
+ * @param taxon\r
+ * @return\r
+ */\r
+ private Taxon handleCDNoScope(Namespace sddNamespace,\r
+ SDDImportConfigurator sddConfig, Element elCodedDescription ) {\r
+ Taxon taxon = null;\r
+ NonViralName nonViralName = NonViralName.NewInstance(null);\r
+ String id = new String("" + taxonNamesCount);\r
+ IdentifiableSource source = IdentifiableSource.NewInstance(id, "TaxonName");\r
+ importRepresentation(elCodedDescription, sddNamespace, nonViralName, id, sddConfig);\r
+ \r
+ if(sddConfig.isDoMatchTaxa()){\r
+ taxon = getTaxonService().findBestMatchingTaxon(nonViralName.getTitleCache());\r
+ }\r
+ \r
+ if(taxon != null){\r
+ nonViralName = HibernateProxyHelper.deproxy(taxon.getName(), NonViralName.class);\r
+// taxonNameBases.put(id ,tnb);\r
+// taxonNamesCount++;\r
+ logger.info("using existing Taxon " + taxon.getTitleCache());\r
+ } else {\r
+ nonViralName.addSource(source);\r
+ taxonNameBases.put(id ,nonViralName);\r
+ taxonNamesCount++; \r
+ logger.info("creating new Taxon from TaxonName " + nonViralName.getTitleCache());\r
+ taxon = Taxon.NewInstance(nonViralName, sec);\r
+ }\r
+ return taxon;\r
+ }\r
\r
- StatisticalMeasurementValue statisticalValue = StatisticalMeasurementValue.NewInstance();\r
- statisticalValue.setValue(v);\r
- statisticalValue.setType(t);\r
- quantitativeData.addStatisticalValue(statisticalValue);\r
- featureData.add(statisticalValue);\r
- }\r
- taxonDescription.addElement(quantitativeData);\r
- }\r
+ /**\r
+ * @param sddNamespace\r
+ * @param sddConfig\r
+ * @param idCD\r
+ * @param elScope\r
+ * @param taxon\r
+ * @return\r
+ */\r
+ private Taxon handleCDScope(Namespace sddNamespace, SDDImportConfigurator sddConfig, \r
+ String idCD, Element elScope) {\r
+ Taxon taxon = null;\r
+ Element elTaxonName = elScope.getChild("TaxonName", sddNamespace);\r
+ String ref = elTaxonName.getAttributeValue("ref");\r
+ NonViralName nonViralName = taxonNameBases.get(ref);\r
+ \r
+ if(sddConfig.isDoMatchTaxa()){\r
+ taxon = getTaxonService().findBestMatchingTaxon(nonViralName.getTitleCache());\r
+ }\r
+ \r
+ if(taxon != null){\r
+ logger.info("using existing Taxon" + taxon.getTitleCache());\r
+ if(!nonViralName.getUuid().equals(taxon.getName().getUuid())){\r
+ logger.warn("TaxonNameBase entity of existing taxon does not match Name in list -> replacing Name in list");\r
+ nonViralName = HibernateProxyHelper.deproxy(taxon.getName(), NonViralName.class);\r
+ } \r
+ } else { \r
+ logger.info("creating new Taxon from TaxonName '" + nonViralName.getTitleCache()+"'");\r
+ taxon = Taxon.NewInstance(nonViralName, sec);\r
+ }\r
+ \r
+ //citation\r
+ Element elCitation = elScope.getChild("Citation",sddNamespace);\r
+ if (elCitation != null) {\r
+ String refCitation = elCitation.getAttributeValue("ref");\r
+ if (! refCitation.equals("")){\r
+ citations.put(idCD, refCitation);\r
+ }\r
+ String location = elCitation.getAttributeValue("location");\r
+ if (! location.equals("")){\r
+ locations.put(idCD, location);\r
+ }\r
+ }\r
+ return taxon;\r
+ }\r
\r
- // <TextChar ref="c3">\r
- List<Element> elTextChars = elSummaryData.getChildren("TextChar", sddNamespace);\r
- k = 0;\r
- //for each TextChar\r
- for (Element elTextChar : elTextChars){\r
- if ((++k % modCount) == 0){ logger.info("TextChar handled: " + (k-1));}\r
- ref = elTextChar.getAttributeValue("ref");\r
- Feature feature = features.get(ref);\r
- TextData textData = TextData.NewInstance();\r
- textData.setFeature(feature);\r
-\r
- // <Content>Free form text</Content>\r
- String content = (String)ImportHelper.getXmlInputValue(elTextChar, "Content",sddNamespace);\r
- textData.putText(content, datasetLanguage);\r
- taxonDescription.addElement(textData);\r
- }\r
+ /**\r
+ * @param sddNamespace\r
+ * @param taxonDescription\r
+ * @param elSummaryData\r
+ */\r
+ private void handleSummaryTextData(Namespace sddNamespace,\r
+ TaxonDescription taxonDescription, Element elSummaryData) {\r
+ String ref;\r
+ int k;\r
+ // <TextChar ref="c3">\r
+ List<Element> elTextChars = elSummaryData.getChildren("TextChar", sddNamespace);\r
+ k = 0;\r
+ //for each TextChar\r
+ for (Element elTextChar : elTextChars){\r
+ if ((++k % modCount) == 0){ logger.info("TextChar handled: " + (k-1));}\r
+ ref = elTextChar.getAttributeValue("ref");\r
+ Feature feature = features.get(ref);\r
+ TextData textData = TextData.NewInstance();\r
+ textData.setFeature(feature);\r
+\r
+ // <Content>Free form text</Content>\r
+ String content = (String)ImportHelper.getXmlInputValue(elTextChar, "Content",sddNamespace);\r
+ textData.putText(datasetLanguage, content);\r
+ taxonDescription.addElement(textData);\r
+ }\r
+ }\r
\r
- }\r
+ /**\r
+ * @param sddNamespace\r
+ * @param taxonDescription\r
+ * @param elSummaryData\r
+ */\r
+ private void handleSummaryQuantitativeData(Namespace sddNamespace,\r
+ TaxonDescription taxonDescription, Element elSummaryData) {\r
+ String ref;\r
+ int k;\r
+ // <Quantitative ref="c2">\r
+ List<Element> elQuantitatives = elSummaryData.getChildren("Quantitative", sddNamespace);\r
+ k = 0;\r
+ //for each Quantitative\r
+ for (Element elQuantitative : elQuantitatives){\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
+ quantitativeData.setFeature(feature);\r
+\r
+ MeasurementUnit unit = units.get(ref);\r
+ String prefix = defaultUnitPrefixes.get(ref);\r
+ if (unit != null) {\r
+ String u = unit.getLabel();\r
+ if (prefix != null) {\r
+ u = prefix + u;\r
+ }\r
+ unit.setLabel(u);\r
+ quantitativeData.setUnit(unit);\r
+ }\r
\r
- if (taxon != null) {\r
- taxon.addDescription(taxonDescription);\r
- }\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
+ 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
+ } else if (type.equals("Mean")) {\r
+ t = StatisticalMeasure.AVERAGE();\r
+ } else if (type.equals("Max")) {\r
+ t = StatisticalMeasure.MAX();\r
+ } else if (type.equals("SD")) {\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
+ }\r
\r
- if (!refCitation.equals("")){\r
- citations.put(idCD,refCitation);\r
- }\r
+ StatisticalMeasurementValue statisticalValue = StatisticalMeasurementValue.NewInstance();\r
+ statisticalValue.setValue(v);\r
+ statisticalValue.setType(t);\r
+ quantitativeData.addStatisticalValue(statisticalValue);\r
+ featureData.add(statisticalValue);\r
+ }\r
+ taxonDescription.addElement(quantitativeData);\r
+ }\r
+ }\r
\r
- if (!location.equals("")){\r
- locations.put(idCD, location);\r
+ /**\r
+ * @param sddNamespace\r
+ * @param taxonDescription\r
+ * @param elSummaryData\r
+ */\r
+ private void handleSummaryCategoricalData(Namespace sddNamespace,\r
+ TaxonDescription taxonDescription, Element elSummaryData) {\r
+ String ref;\r
+ // <Categorical ref="c4">\r
+ List<Element> elCategoricals = elSummaryData.getChildren("Categorical", sddNamespace);\r
+ int k = 0;\r
+ //for each Categorical\r
+ for (Element elCategorical : elCategoricals){\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
+ categoricalData.setFeature(feature);\r
+\r
+ // <State ref="s3"/>\r
+ List<Element> elStates = elCategorical.getChildren("State", sddNamespace);\r
+ int l = 0;\r
+ \r
+ //for each State\r
+ for (Element elState : elStates){\r
+ if ((++l % modCount) == 0){ logger.info("States handled: " + (l-1));}\r
+ ref = elState.getAttributeValue("ref");\r
+ State state = states.get(ref);\r
+ if (state != null) {\r
+ StateData stateData = StateData.NewInstance();\r
+ stateData.setState(state);\r
+ List<Element> elModifiers = elState.getChildren("Modifier", sddNamespace);\r
+ for (Element elModifier : elModifiers){\r
+ ref = elModifier.getAttributeValue("ref");\r
+ Modifier modifier = modifiers.get(ref);\r
+ if (modifier != null) {\r
+ stateData.addModifier(modifier);\r
+ }\r
}\r
- \r
- taxonDescription.setDescriptiveSystem(featureSet);\r
-\r
- taxonDescriptions.put(idCD, taxonDescription);//FIXME\r
-\r
- } catch (Exception e) {\r
- //FIXME\r
- logger.warn("Import of CodedDescription " + j + " failed.", e);\r
- success = false;\r
+ categoricalData.addState(stateData);\r
}\r
- if ((++j % modCount) == 0){ logger.info("CodedDescriptions handled: " + j);}\r
-\r
+ taxonDescription.addElement(categoricalData);\r
}\r
-\r
}\r
}\r
\r
try {\r
\r
String idP = elPublication.getAttributeValue("id");\r
- ReferenceBase publication = ReferenceFactory.newArticle();\r
+ Reference publication = ReferenceFactory.newArticle();\r
importRepresentation(elPublication, sddNamespace, publication, idP, sddConfig);\r
\r
publications.put(idP,publication);\r
URL url = new URL(href);\r
\r
imageMetaData.readMetaData(url.toURI(), 0);\r
- image = ImageFile.NewInstance(url.toString(), null, imageMetaData);\r
+ image = ImageFile.NewInstance(url.toURI(), null, imageMetaData);\r
} catch (MalformedURLException e) {\r
logger.error("Malformed URL", e);\r
}\r
String sns = sddConfig.getSourceNameString();\r
File f = new File(sns);\r
File parent = f.getParentFile();\r
- String fi = href;\r
- //String fi = parent.toString() + File.separator + href; //TODO erase file:/\r
+ String fi = parent.toString() + File.separator + href;\r
File file = new File(fi);\r
- imageMetaData.readMetaData(file.toURI(), 0);\r
- image = ImageFile.NewInstance(file.toString(), null, imageMetaData);\r
+ imageMetaData.readMetaData(new URI(fi), 0); //file\r
+ image = ImageFile.NewInstance(file.toURI(), null, imageMetaData);\r
}\r
MediaRepresentation representation = MediaRepresentation.NewInstance(imageMetaData.getMimeType(), null);\r
representation.addRepresentationPart(image);\r
// dtb.addMedia(me);\r
// }\r
// }\r
- } else if (lcb.get(k) instanceof ReferenceBase) {\r
- ReferenceBase rb = (ReferenceBase) lcb.get(k);\r
- //} else if (lcb.get(0) instanceof ReferenceBase) {\r
- //ReferenceBase rb = (ReferenceBase) lcb.get(0);\r
+ } else if (lcb.get(k) instanceof Reference) {\r
+ Reference rb = (Reference) lcb.get(k);\r
+ //} else if (lcb.get(0) instanceof Reference) {\r
+ //Reference rb = (Reference) lcb.get(0);\r
// rb.setTitleCache(label);\r
// if (rb!=null) {\r
// if (k == 0) {\r
// rb.addMedia(me);\r
// }\r
// }\r
- }/* else if (lcb.get(k) instanceof TaxonNameBase){\r
- TaxonNameBase tb = (TaxonNameBase) lcb.get(k);\r
- tb.addMedia(media);\r
- }*/\r
+// else if (lcb.get(k) instanceof TaxonNameBase){\r
+// TaxonNameBase tb = (TaxonNameBase) lcb.get(k);\r
+// tb.addMedia(media);\r
+ } else {\r
+ logger.warn("Can't handle associated media for " + lcb.get(k).getId() + "(" + lcb.get(k).getClass().getSimpleName()+")" );\r
+ }\r
}\r
}\r
}\r
Element elModifiers = elDescriptiveConcept.getChild("Modifiers", sddNamespace);\r
if (elModifiers !=null){\r
List<Element> listModifiers = elModifiers.getChildren("Modifier", sddNamespace);\r
- TermVocabulary<Modifier> termVocabularyState = new TermVocabulary<Modifier>();\r
+ TermVocabulary<Modifier> termVocabularyState = TermVocabulary.NewInstance(null, null, null, null);\r
for (Element elModifier : listModifiers) {\r
Modifier modif = Modifier.NewInstance();\r
String idmod = elModifier.getAttributeValue("id");\r
}\r
}\r
catch (Exception e) {\r
- logger.warn("Import of DescriptiveConcept " + j + " failed.");\r
+ logger.warn("Import of DescriptiveConcept " + j + " failed: " + e.getMessage());\r
}\r
if ((++j % modCount) == 0){ logger.info("DescriptiveConcepts handled: " + j);}\r
\r
String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace);\r
//Element elDesignedFor = elCharacterTree.getChild("DesignedFor",sddNamespace);//TODO ?\r
\r
- FeatureTree feattree = FeatureTree.NewInstance();\r
- importRepresentation(elCharacterTree, sddNamespace, feattree, "", sddConfig);\r
- FeatureNode root = feattree.getRoot();\r
- List<Element> listelNodes = elCharacterTree.getChildren("Nodes", sddNamespace);\r
+ FeatureTree featureTree = FeatureTree.NewInstance();\r
+ importRepresentation(elCharacterTree, sddNamespace, featureTree, "", sddConfig);\r
+ FeatureNode root = featureTree.getRoot();\r
+ List<Element> listeOfNodes = elCharacterTree.getChildren("Nodes", sddNamespace);\r
\r
//Nodes of CharacterTrees in SDD always refer to DescriptiveConcepts\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
- Feature dc = null;\r
- if (idN!=null) {\r
- // DescriptiveConcepts are used as nodes in CharacterTrees\r
- Element elDescriptiveConcept = elNode.getChild("DescriptiveConcept", sddNamespace);\r
- if (elDescriptiveConcept != null){\r
- String refDC = elDescriptiveConcept.getAttributeValue("ref");\r
- dc = features.get(refDC);\r
- fn = FeatureNode.NewInstance(dc);\r
- }\r
- if (fn==null){\r
- fn = FeatureNode.NewInstance();\r
- }\r
- Element elParent = elNode.getChild("Parent", sddNamespace);\r
- // in SDD links between Nodes are referenced by the <Parent> tag\r
- if (elParent!=null){\r
- String refP = elParent.getAttributeValue("ref");\r
- if (refP!=null) {\r
- FeatureNode parent = featureNodes.get(refP);\r
- if (parent==null){\r
- root.addChild(fn); // if no parent found or the reference is broken, add the node to the root of the tree\r
- }\r
- else {\r
- parent.addChild(fn);\r
- }\r
- }\r
- }\r
- else {\r
- root.addChild(fn); // if no parent found or the reference is broken, add the node to the root of the tree\r
- }\r
- }\r
- featureNodes.put(idN, fn);\r
- }\r
- }\r
-\r
- // Leaves of CharacterTrees in SDD are always CharNodes (referring to Characters)\r
- List<Element> listCharNodes = elNodes.getChildren("CharNode", sddNamespace);\r
- if (listCharNodes != null) {\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 = featureNodes.get(refP);\r
- if (parent==null){\r
- parent = root; // if no parent found or the reference is broken, add the node to the root of the tree\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
- featureNodes.put(refC, fn);\r
- }\r
- } \r
- }\r
- }\r
- featureTrees.add(feattree);\r
+ for (Element elNodes : listeOfNodes) {\r
+ handleCharacterNodes(sddNamespace, root, elNodes);\r
}\r
+ featureTrees.add(featureTree);\r
+ if (workingSet.getDescriptiveSystem() != null){\r
+ //TODO how to handle multiple \r
+ logger.warn("Multiple feature trees not yet supported");\r
+ }else{\r
+ workingSet.setDescriptiveSystem(featureTree);\r
+ }\r
+ }\r
\r
catch (Exception e) {\r
logger.warn("Import of Character tree " + j + " failed.");\r
}\r
}\r
\r
+ /**\r
+ * @param sddNamespace\r
+ * @param root\r
+ * @param elNodes\r
+ */\r
+ private void handleCharacterNodes(Namespace sddNamespace, FeatureNode root, Element elNodes) {\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
+ Feature dc = null;\r
+ if (idN!=null) {\r
+ // DescriptiveConcepts are used as nodes in CharacterTrees\r
+ Element elDescriptiveConcept = elNode.getChild("DescriptiveConcept", sddNamespace);\r
+ if (elDescriptiveConcept != null){\r
+ String refDC = elDescriptiveConcept.getAttributeValue("ref");\r
+ dc = features.get(refDC);\r
+ fn = FeatureNode.NewInstance(dc);\r
+ }\r
+ if (fn==null){\r
+ fn = FeatureNode.NewInstance();\r
+ }\r
+ Element elParent = elNode.getChild("Parent", sddNamespace);\r
+ // in SDD links between Nodes are referenced by the <Parent> tag\r
+ if (elParent!=null){\r
+ String refP = elParent.getAttributeValue("ref");\r
+ if (refP!=null) {\r
+ FeatureNode parent = featureNodes.get(refP);\r
+ if (parent==null){\r
+ root.addChild(fn); // if no parent found or the reference is broken, add the node to the root of the tree\r
+ }\r
+ else {\r
+ parent.addChild(fn);\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ root.addChild(fn); // if no parent found or the reference is broken, add the node to the root of the tree\r
+ }\r
+ }\r
+ featureNodes.put(idN, fn);\r
+ }\r
+ }\r
+\r
+ // Leaves of CharacterTrees in SDD are always CharNodes (referring to Characters)\r
+ List<Element> listCharNodes = elNodes.getChildren("CharNode", sddNamespace);\r
+ if (listCharNodes != null) {\r
+ for (Element elCharNode : listCharNodes){\r
+ Element elParent = elCharNode.getChild("Parent", sddNamespace);\r
+ Element elCharacter = elCharNode.getChild("Character", sddNamespace);\r
+ Element elDependencyRules = elCharNode.getChild("DependencyRules", sddNamespace);\r
+ FeatureNode fn = FeatureNode.NewInstance();\r
+ \r
+ if (elDependencyRules!=null){\r
+ Element elInapplicableIf = elCharNode.getChild("InapplicableIf", sddNamespace);\r
+ if (elInapplicableIf!=null){\r
+ List<Element> listStates = elInapplicableIf.getChildren("State", sddNamespace);\r
+ for (Element stateElement : listStates) {\r
+ String refState = stateElement.getAttributeValue("ref");\r
+ if ((refState!=null)&&(!refState.equals(""))) {\r
+ State state = states.get(refState);\r
+ fn.addInapplicableState(state);\r
+ }\r
+ }\r
+ }\r
+ Element elOnlyapplicableIf = elCharNode.getChild("OnlyApplicableIf", sddNamespace);\r
+ if (elOnlyapplicableIf!=null){\r
+ List<Element> listStates = elInapplicableIf.getChildren("State", sddNamespace);\r
+ for (Element stateElement : listStates) {\r
+ String refState = stateElement.getAttributeValue("ref");\r
+ if ((refState!=null)&&(!refState.equals(""))) {\r
+ State state = states.get(refState);\r
+ fn.addApplicableState(state);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ if (elParent!=null){\r
+ String refP = elParent.getAttributeValue("ref");\r
+ if ((refP!=null)&&(!refP.equals(""))) {\r
+ FeatureNode parent = featureNodes.get(refP);\r
+ if (parent==null){\r
+ parent = root; // if no parent found or the reference is broken, add the node to the root of the tree\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
+ featureNodes.put(refC, fn);\r
+ }\r
+ } \r
+ }\r
+ }\r
+\r
// imports the <TaxonHierarchies> block\r
protected void importTaxonHierarchies(Element elDataset, Namespace sddNamespace, SDDImportConfigurator sddConfig, boolean success){\r
\r
try {\r
Element elRepresentation = elTaxonHierarchy.getChild("Representation",sddNamespace);\r
String label = (String)ImportHelper.getXmlInputValue(elRepresentation,"Label",sddNamespace);\r
- TaxonomicTree taxonomicTree = TaxonomicTree.NewInstance(label);\r
- importRepresentation(elTaxonHierarchy, sddNamespace, taxonomicTree, "", sddConfig);\r
+ Classification classification = Classification.NewInstance(label);\r
+ importRepresentation(elTaxonHierarchy, sddNamespace, classification, "", sddConfig);\r
\r
- Set<TaxonNode> root = taxonomicTree.getChildNodes();\r
+ Set<TaxonNode> root = classification.getChildNodes();\r
Element elNodes = elTaxonHierarchy.getChild("Nodes", sddNamespace); // There can be only one <Nodes> block for TaxonHierarchies\r
List<Element> listNodes = elNodes.getChildren("Node", sddNamespace);\r
\r
}\r
}\r
else {\r
- TaxonNode tn = taxonomicTree.addChildTaxon(taxon, sec, "", Synonym.NewInstance(tnb, sec)); // if no parent found or the reference is broken, add the node to the root of the tree\r
+ TaxonNode tn = classification.addChildTaxon(taxon, sec, "", Synonym.NewInstance(tnb, sec)); // if no parent found or the reference is broken, add the node to the root of the tree\r
taxonNodes.put(idN,tn);\r
}\r
}\r
}\r
\r
- taxonomicTrees.add(taxonomicTree);\r
+ classifications.add(classification);\r
}\r
\r
catch (Exception e) {\r